feature/estrutura #1
23
.gitignore
vendored
Normal 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*
|
99
README.md
@ -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.
|
||||
### `npm 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:
|
||||
### `npm 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
|
||||
### `npm run 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
|
||||
### `npm run eject`
|
||||
|
||||
Use the built-in continuous integration in GitLab.
|
||||
**Note: this is a one-way operation. Once you `eject`, you can’t 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 aren’t 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 you’re on your own.
|
||||
|
||||
# Editing this README
|
||||
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t 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/).
|
||||
|
29104
package-lock.json
generated
Normal file
51
package.json
Normal file
@ -0,0 +1,51 @@
|
||||
{
|
||||
"name": "desafio_5",
|
||||
"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": "^2.0.1",
|
||||
"date-fns": "^2.28.0",
|
||||
"formik": "^2.2.9",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-scripts": "5.0.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"
|
||||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react-input-mask": "^3.0.1"
|
||||
}
|
||||
}
|
BIN
public/favicon_m3/android-chrome-192x192.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
public/favicon_m3/android-chrome-512x512.png
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
public/favicon_m3/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
public/favicon_m3/favicon-16x16.png
Normal file
After Width: | Height: | Size: 617 B |
BIN
public/favicon_m3/favicon-32x32.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
public/favicon_m3/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
1
public/favicon_m3/site.webmanifest
Normal file
@ -0,0 +1 @@
|
||||
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
24
public/index.html
Normal file
@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-br">
|
||||
<head>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="%PUBLIC_URL%/favicon_m3/apple-touch-icon.png">
|
||||
<link rel="icon" type=".image/png" sizes="32x32" href="%PUBLIC_URL%/favicon_m3/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="%PUBLIC_URL%/favicon_m3/favicon-16x16.png">
|
||||
<link rel="manifest" href="%PUBLIC_URL%/favicon_m3/site.webmanifest">
|
||||
|
||||
<meta charset="utf-8" />
|
||||
<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"
|
||||
/>
|
||||
|
||||
<title>M3 Academy </title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
BIN
src/assets/icons/android-chrome-192x192.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
src/assets/icons/android-chrome-512x512.png
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
src/assets/icons/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 15 KiB |
10
src/assets/icons/arrow-icon.svg
Normal 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_89)">
|
||||
<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_89">
|
||||
<rect width="8" height="8" fill="white" transform="matrix(1 0 0 -1 0 8)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 667 B |
4
src/assets/icons/arrowToTop-icon.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg width="37" height="37" viewBox="0 0 37 37" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="18.5" cy="18.5" r="18.5" fill="#C4C4C4"/>
|
||||
<path d="M24.6 21.1365C24.5989 21.249 24.5519 21.3612 24.4588 21.4489L24.4587 21.449C24.2574 21.639 23.9216 21.6389 23.7204 21.449L23.7204 21.449L18.7744 16.7826L18.4999 16.5236L18.2254 16.7826L13.2797 21.4488C13.2797 21.4488 13.2796 21.4489 13.2796 21.4489C13.0781 21.6389 12.7424 21.6388 12.5412 21.4489L12.5411 21.4488C12.4483 21.3613 12.4013 21.2494 12.4 21.1372C12.4011 21.0247 12.4481 20.9124 12.5412 20.8246L12.5412 20.8246L18.1308 15.551C18.1308 15.5509 18.1309 15.5509 18.1309 15.5509C18.2292 15.4582 18.3616 15.4085 18.4999 15.4085C18.6382 15.4085 18.7708 15.4583 18.8691 15.551C18.8691 15.551 18.8691 15.551 18.8691 15.551L24.4587 20.8247L24.4588 20.8248C24.5516 20.9124 24.5987 21.0243 24.6 21.1365Z" fill="white" stroke="white" stroke-width="0.8"/>
|
||||
</svg>
|
After Width: | Height: | Size: 919 B |
11
src/assets/icons/facebook-icon.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1686_307)">
|
||||
<path d="M19.5769 28.063V18.9297H22.6347L23.0935 15.3693H19.5769V13.0964C19.5769 12.0659 19.8612 11.3636 21.3375 11.3636L23.2173 11.3629V8.17828C22.8922 8.13594 21.7763 8.03888 20.4775 8.03888C17.7655 8.03888 15.9088 9.69784 15.9088 12.7438V15.3693H12.8416V18.9297H15.9088V28.063H19.5769Z" fill="#303030"/>
|
||||
</g>
|
||||
<circle cx="17.8641" cy="17.8641" r="16.8641" stroke="#303030" stroke-width="2"/>
|
||||
<defs>
|
||||
<clipPath id="clip0_1686_307">
|
||||
<rect width="19.9812" height="20.0241" fill="white" transform="translate(8.03883 8.03885)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 685 B |
BIN
src/assets/icons/favicon-16x16.png
Normal file
After Width: | Height: | Size: 617 B |
BIN
src/assets/icons/favicon-32x32.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
src/assets/icons/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
10
src/assets/icons/home-icon.svg
Normal file
@ -0,0 +1,10 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="#C4C4C4" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1_85)">
|
||||
<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"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1_85">
|
||||
<rect width="16" height="16"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 959 B |
13
src/assets/icons/instagram-icon.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<svg width="37" height="36" viewBox="0 0 37 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1686_319)">
|
||||
<path d="M23.1131 8.03885H14.1269C11.0753 8.03885 8.59253 10.5178 8.59253 13.5647V22.5369C8.59253 25.584 11.0753 28.0628 14.1269 28.0628H23.1131C26.165 28.0628 28.6477 25.5839 28.6477 22.5369V13.5647C28.6478 10.5178 26.165 8.03885 23.1131 8.03885ZM26.8684 22.5369C26.8684 24.6043 25.1838 26.2862 23.1132 26.2862H14.1269C12.0564 26.2863 10.3719 24.6043 10.3719 22.5369V13.5647C10.3719 11.4975 12.0564 9.81548 14.1269 9.81548H23.1131C25.1837 9.81548 26.8683 11.4975 26.8683 13.5647V22.5369H26.8684Z" fill="#303030"/>
|
||||
<path d="M18.6201 12.8915C15.7706 12.8915 13.4524 15.2061 13.4524 18.0512C13.4524 20.8961 15.7706 23.2106 18.6201 23.2106C21.4696 23.2106 23.7878 20.8961 23.7878 18.0512C23.7878 15.2061 21.4696 12.8915 18.6201 12.8915ZM18.6201 21.4339C16.7519 21.4339 15.2318 19.9164 15.2318 18.051C15.2318 16.1856 16.7518 14.668 18.6201 14.668C20.4885 14.668 22.0084 16.1856 22.0084 18.051C22.0084 19.9164 20.4884 21.4339 18.6201 21.4339Z" fill="#303030"/>
|
||||
<path d="M24.0046 11.3851C23.6617 11.3851 23.325 11.5236 23.0828 11.7665C22.8395 12.0081 22.6997 12.3444 22.6997 12.6879C22.6997 13.0303 22.8397 13.3666 23.0828 13.6094C23.3248 13.851 23.6617 13.9908 24.0046 13.9908C24.3486 13.9908 24.6843 13.851 24.9275 13.6094C25.1707 13.3666 25.3094 13.0302 25.3094 12.6879C25.3094 12.3444 25.1707 12.0081 24.9275 11.7665C24.6855 11.5236 24.3486 11.3851 24.0046 11.3851Z" fill="#303030"/>
|
||||
</g>
|
||||
<circle cx="18.4178" cy="17.8641" r="16.8641" stroke="#303030" stroke-width="2"/>
|
||||
<defs>
|
||||
<clipPath id="clip0_1686_319">
|
||||
<rect width="20.0553" height="20.0241" fill="white" transform="translate(8.59253 8.03885)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
6
src/assets/icons/linkedin-icon.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="17.8641" cy="17.8641" r="16.8641" stroke="#303030" stroke-width="2"/>
|
||||
<path d="M13.7244 14.1474H10.5124C10.3698 14.1474 10.2543 14.2629 10.2543 14.4054V24.7243C10.2543 24.8669 10.3698 24.9824 10.5124 24.9824H13.7244C13.8669 24.9824 13.9825 24.8669 13.9825 24.7243V14.4054C13.9825 14.2629 13.8669 14.1474 13.7244 14.1474Z" fill="#303030"/>
|
||||
<path d="M12.1195 9.01761C10.9508 9.01761 10 9.96739 10 11.1348C10 12.3028 10.9508 13.2529 12.1195 13.2529C13.2873 13.2529 14.2374 12.3027 14.2374 11.1348C14.2374 9.96739 13.2873 9.01761 12.1195 9.01761Z" fill="#303030"/>
|
||||
<path d="M21.8944 13.8909C20.6044 13.8909 19.6507 14.4455 19.0723 15.0756V14.4054C19.0723 14.2629 18.9568 14.1474 18.8142 14.1474H15.7381C15.5956 14.1474 15.4801 14.2629 15.4801 14.4054V24.7243C15.4801 24.8669 15.5956 24.9824 15.7381 24.9824H18.9431C19.0857 24.9824 19.2012 24.8669 19.2012 24.7243V19.6189C19.2012 17.8984 19.6685 17.2282 20.8678 17.2282C22.1739 17.2282 22.2777 18.3027 22.2777 19.7074V24.7244C22.2777 24.8669 22.3932 24.9824 22.5358 24.9824H25.742C25.8845 24.9824 26 24.8669 26 24.7244V19.0643C26 16.5061 25.5122 13.8909 21.8944 13.8909Z" fill="#303030"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
5
src/assets/icons/menuHamburguer-icon.svg
Normal file
@ -0,0 +1,5 @@
|
||||
<svg width="28" height="23" viewBox="0 0 28 23" fill="white" 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"/>
|
||||
<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"/>
|
||||
<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"/>
|
||||
</svg>
|
After Width: | Height: | Size: 650 B |
3
src/assets/icons/more-icon.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="9" height="9" viewBox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M5.23438 3.89844H8.40625V5.26562H5.23438V8.85938H3.78125V5.26562H0.609375V3.89844H3.78125V0.578125H5.23438V3.89844Z" fill="#303030"/>
|
||||
</svg>
|
After Width: | Height: | Size: 242 B |
3
src/assets/icons/search-icon.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<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.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="#292929"/>
|
||||
</svg>
|
After Width: | Height: | Size: 655 B |
12
src/assets/icons/shoppingCart-icon.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<svg width="28" height="28" viewBox="0 0 28 28" fill="white" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1659_354)">
|
||||
<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"/>
|
||||
<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"/>
|
||||
<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"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1659_354">
|
||||
<rect width="28" height="28"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
1
src/assets/icons/site.webmanifest
Normal file
@ -0,0 +1 @@
|
||||
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
4
src/assets/icons/twitter-icon.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="17.8641" cy="17.8641" r="16.8641" stroke="#303030" stroke-width="2"/>
|
||||
<path d="M30.6154 10.3677C29.7 10.7692 28.7246 11.0354 27.7077 11.1646C28.7538 10.54 29.5523 9.55846 29.9277 8.37538C28.9523 8.95692 27.8754 9.36769 26.7277 9.59692C25.8015 8.61077 24.4815 8 23.0415 8C20.2477 8 17.9985 10.2677 17.9985 13.0477C17.9985 13.4477 18.0323 13.8323 18.1154 14.1985C13.92 13.9938 10.2077 11.9831 7.71385 8.92C7.27846 9.67538 7.02308 10.54 7.02308 11.4708C7.02308 13.2185 7.92308 14.7677 9.26462 15.6646C8.45385 15.6492 7.65846 15.4138 6.98462 15.0431C6.98462 15.0585 6.98462 15.0785 6.98462 15.0985C6.98462 17.5508 8.73385 19.5877 11.0277 20.0569C10.6169 20.1692 10.1692 20.2231 9.70462 20.2231C9.38154 20.2231 9.05538 20.2046 8.74923 20.1369C9.40308 22.1354 11.2585 23.6046 13.4646 23.6523C11.7477 24.9954 9.56769 25.8046 7.20769 25.8046C6.79385 25.8046 6.39692 25.7862 6 25.7354C8.23538 27.1769 10.8846 28 13.7415 28C23.0277 28 28.1046 20.3077 28.1046 13.64C28.1046 13.4169 28.0969 13.2015 28.0862 12.9877C29.0877 12.2769 29.9292 11.3892 30.6154 10.3677Z" fill="#303030"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
9
src/assets/icons/vtexPci-icon.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<svg width="53" height="33" viewBox="0 0 53 33" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<rect width="53" height="33" fill="url(#pattern0)"/>
|
||||
<defs>
|
||||
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||
<use xlink:href="#image0_1660_276" transform="translate(0 -0.00590909) scale(0.005 0.0080303)"/>
|
||||
</pattern>
|
||||
<image id="image0_1660_276" width="200" height="126" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAB+CAMAAABWFa7EAAACr1BMVEUAAAAiP3MiP3MiP3MiP3MiP3MiP3MiP3MiP3MiP3MiP3MiP3MiP3P///8iP3P2GWMNa3F6jKvi5ezEzNry9Pd9jq34Q4AObHL+4usAYWj9xdhdcpgAY2n2HmYddXr3NXYJaW8FZmwbrz/T2eP4UooOaHEHZ273J2z5b50xTHwLanAAYGb//v7w8/fX5uj2HGU/WYYgQ3MhQXP2I2r/+fv/8fb+2eURYnECZWv2IGinssf5Z5hOZY8eR3P3LHAYrT3+5O390uD9w9agxcd3rLD4TIYTX3IXVnIaUHIPZXH//P3/9vn+7fP+6PD+3+mawcNUlpr5ZJb5YJT5WY4Ub3UUXHIcSnIAV14mskkjsUbz/PP91OL9zd38sMmZpr/7l7l/sbSJmbR8r7L6jLH6ha36fadsf6JHX4sfsEP7/v34+/rx9vfn8PHc6evg9uP9ydrH7NC1v9Cpy82kyMr7krVtpqn6gKn5cJ5keZ2G1ZlQlJj3OXgnRHf3MHMVWXIbTXIeRXISUW8wtlEps0v0+fjp7fL+7PLj7e/m9+n+3OfS4+X8qMT7nr36daJbm59LkZVGjJP5XJH4RoL4QH1hyHobcnkYU3IQY3FTw24stU7u9fbq8vPf6+zW8ty61te30tX8u9GvztCvucyUvsCPur2h3rCa3Ktzhac9iI34VYsygob4SYP4SIMlen9Kv2YAXWP+5u7a8uDI1N/9z9+/x9b8vtP8vdL8t86ewMj8qsW15cGSorqDtLdxp6xkoaX6eKOM1p75aZo5goc1T4AuW333PHohUXZYxHIKXG0FW2REvWI8u1sOqjXc4enE29zC2tux0NG86MahrsSy5byr5LV/kK59kK36eqRkl6KN2Z1YdZdWbJRUa5N70JFRaJF0zooxb4M8VoMfY3gXX3QMY285bkN9AAAADXRSTlMAZvBppEc7YBbPzIqHXR2KhAAACBxJREFUeNrs2M9r2mAcx/H97hj77MtgE+kIOUyIB8GDURBBVPBStaAeVTy0nnuR9iBeBdEe2v4DZZdR2kOhtKOnUkb/hh0G+1v2jabJYxKMh5E+jrygJQQPz5vHPM8Tn4VCodW83Xi+jt44O97//P5xHf1+tZiy8ecT1tO3Vwsh775iXX15LYa8WNcJAT6/DEPkEobIJgyRTRhiydwfR5Y5vxvBg3QhUY38POhwky5kn/x14CZdSIP8deEmXcgO+duDm3QhtSz5KcODdCHokZ8SPMgXUkvRcjF4kS8EuxI8If8kpLp8SprwJFdIem+T1SkfESkkamMFtVarVdt6spCSuWKd6xBlSNDA3A1R8hIskSfqIy+uaaUIGZIlNIiUKwBFhT8UXEiT5nKOeUqSrSjcvAUrztYx+2ATwfbjFP5Ahi+Pt5AoE6mVYELEXV0pQNQn5mrkscXBukRZHWVVNSZlqKq52WpxEmNXmF1Pccv/TxFcyB6ZDiFIa2TLiEeAoTmNRzBsElEUrC6sCBWVKDXmxgaCChG/W8o2vA8tcVjaRDQG9BRRdzEkJn7ulO9qHFMINKRtDdh7NU4KgVs8vOl8FjOukHqUFWDOD+sGvI8ciSN2748HEOR4vOY3zBkifg8LKeOR0QMOKdoPtXhi8VwEJkRaAmUrzx3SAktc8FUv8J294Xyqe2S7g+jSWIwrClHHHTKIs4MRWIeYMg46JOOYkkKWLNkaFpwQda/5fhUeD7u4bLGzoEOQW9z5DsnWc78VN/nvGI6QMzFkh6fDePI6QYdkkuJZJKqQJTXCohKPUSPadYbkiCI65qI8o71qnmiYDjgEcXFK4mTbhYOeJcOmM6TPF0mNlWZRWhoTvvMr6JDtxylpCtdMq8LpgNhgyxkyyltnLePeFLOzVrIYcAgPz3SqH5FtBy7peyUZs3aclqoO5rHjumZ8FR/aiKtqzAhtDVT1MOiQgmLtG2TLp+EhocNbJZ148jdEe6XKkq2P5eR6Q1zcO9SOMCEVLCdjyONuPklcrP7jopQhtay5HF2Taeg7IVKGYJ/MvbhMc1P4kTPEeAc5Scw27xlVhx85Q3BzcZaBfSSfwJekIZa2QrPfQXzJHoJ2/Xw/DX/Sh6woDAlD1kUYIpswRDb/a8iH9RWG/G3nTF7aiMIA3kILLeV9jBOKDA4ymZCBxKYkuSSIIYeGLCdziFk8lJqDRlvFBUGluEVRPKgHrdqVLloRVFp6KN0obem+b7Slpesf0vdmxsYkkiIzDLGd32VeHh/k+8173/ceBFJs6CLFhi5SbOgixYYuUmzoIsXGfy7iJDj6PdFoXzB4LNBbU+N3uUIuB2iDchGSvEdOvrfG73fNzIRCZrOZwlg5rg80QKFIgLz0mZAZQ22I0U0JD0EDFIqEqMIYyy+c7piMgkI0WBFzQQ+OOo0QOv4NNECZiMdVyKOUXRpCGF8/aIAiEWegoIh7+QTCdA6AxFGLBdRAfRHwmMWM16Bk8MhqpUop96HDCJ2e/uUBTEPJOZPpvSoq6ouAn7RYpkKEcVvl2mArWDfLMBxVcWd8QjCWHsORF+lT81Pzw12gBuqLBHHakc4bhzC+8SWBxSocE+m5caC94/z4tLvH13mzM8LNOGHv4dtzT1dOnWsAEXulDdEleIAkyoBGGFubXZyS5xANeF6kHg/ywk11qok4QrjHnkQijUNnFllKEG7tb0SEoXCsHT8OlwvC/a6mL96nD0ZfH5U9sIbBhg6SzAyEKqDJgEY2C+CnDZE5SUQKIKlDTjgOM1lUEoFeLLIfp9t0HGFOLDLWakTYtw+h8dgBPDpSzlVMDt/mvQ9GD4IMjfBqWAzyS5enAFOJ5TAG8YMssi4gP9yglkifLHL2TucR/GiPJRHm5KFwOHkmLIswy81vUvzj0cqjIFGPKgFjKcvLzI5MmxEBEypTScThkkTOx2JkKV6IH0YWV3HtRyKMKBJhz7QM8nOtV7CHRFvm63MzQ/SmRErQQZVEICCJVD8qf05WZLKJWFUIuJkJnCgyItxsnPXyC/R3gHVZbCxShQybErEjg1oiUUmkuaMZYSZ6EMbHSI1YFGmetHXz3qnaLsjLPlO9FikzuwnV5YpkyjsnXA5RSwQeYhGZE77VnkayPAyXETmyvzXBD566DhuLSNjX2mwb5IpkGm5WuPoiA6LI8bGxl8klllk+STruBDkR3cIqEUG1Kzz/cfgewF+2lsGAyHpov7Vk+qeJSDtHCaybszIXEDG5EJ641XF1WmzF3d7Ek9rko36AvxV7HWrbpEi9asWO+UFEOhiB1EWpMXIWyewbHSF10xqP828v/xxwAiar/VbVWXIyo1EVaN1+M9wfIecIi8tCNCn1jUkHffdgdy3eWLMpfrbpE4hkH4im3AMRGxpA6wMxg+ODz5fswQsimzDl4WR19VhLwuudvYQW+ETq2hVYo8AVRX7DBUSUX1EKM8CyrJH6g9XIsu5YuHaKT3tXrj1OeaeGPkMOG10aAVNW8GTPvzRaQE2RqJnKgzNebXnCpxPxeCLeiu8mGqBcxOnK8zD7B+5dfpVOpONp/utwA2iBchEI5FjUBD1OgAZ6gU/FU4Mt10EblIt41u2tUE3QARJdTd2Dc3Pzz+6CNigXAb+8FK7ePgdkKKFbWi/RXaAVykWCFMYfiDogm4b6dxc1LBDlIo6Q65jHAUXHf/6zQhGiixQbukixoYsUG/+myG7YuuxcL7Idtiw7tmWxB7Yo+G9ys9m1fUuyc5uOjo6Ojo4K/AbFAa9esd0XkgAAAABJRU5ErkJggg=="/>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 4.2 KiB |
4
src/assets/icons/whatsapp-icon.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M17.0042 0H16.9958C7.62238 0 0 7.6245 0 17C0 20.7188 1.1985 24.1655 3.23638 26.9641L1.11775 33.2796L7.65213 31.1908C10.3403 32.9715 13.5469 34 17.0042 34C26.3776 34 34 26.3734 34 17C34 7.62663 26.3776 0 17.0042 0Z" fill="#4CAF50"/>
|
||||
<path d="M26.8961 24.0061C26.486 25.1643 24.8582 26.1248 23.5599 26.4053C22.6716 26.5944 21.5114 26.7453 17.6056 25.126C12.6097 23.0563 9.39249 17.9796 9.14174 17.6503C8.90161 17.3209 7.12299 14.9621 7.12299 12.5226C7.12299 10.0831 8.36186 8.89525 8.86124 8.38525C9.27136 7.96663 9.94924 7.77538 10.5995 7.77538C10.8099 7.77538 10.999 7.786 11.169 7.7945C11.6684 7.81575 11.9191 7.8455 12.2485 8.63388C12.6586 9.622 13.6574 12.0615 13.7764 12.3123C13.8975 12.563 14.0186 12.903 13.8486 13.2324C13.6892 13.5724 13.549 13.7233 13.2982 14.0123C13.0475 14.3013 12.8095 14.5223 12.5587 14.8325C12.3292 15.1024 12.07 15.3914 12.359 15.8908C12.648 16.3795 13.6467 18.0094 15.1172 19.3184C17.0149 21.0077 18.5534 21.5475 19.1037 21.777C19.5139 21.947 20.0026 21.9066 20.3022 21.5879C20.6826 21.1778 21.1522 20.4978 21.6304 19.8284C21.9704 19.3481 22.3996 19.2886 22.8501 19.4586C23.3091 19.618 25.738 20.8186 26.2374 21.0672C26.7367 21.318 27.0661 21.437 27.1872 21.6474C27.3062 21.8578 27.3062 22.8459 26.8961 24.0061Z" fill="white"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
4
src/assets/icons/youtube-icon.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="17.8641" cy="17.8641" r="16.8641" stroke="#303030" stroke-width="2"/>
|
||||
<path d="M28.3811 12.5036C28.1178 11.5246 27.3459 10.7529 26.367 10.4893C24.5788 10 17.4257 10 17.4257 10C17.4257 10 10.2729 10 8.48465 10.4707C7.52463 10.7341 6.73393 11.5248 6.4706 12.5036C6 14.2917 6 18 6 18C6 18 6 21.727 6.4706 23.4964C6.73421 24.4752 7.5058 25.247 8.48479 25.5106C10.2917 26 17.426 26 17.426 26C17.426 26 24.5788 26 26.367 25.5293C27.346 25.2658 28.1178 24.4941 28.3814 23.5152C28.8518 21.727 28.8518 18.0188 28.8518 18.0188C28.8518 18.0188 28.8707 14.2917 28.3811 12.5036ZM15.1483 21.4258V14.5742L21.0965 18L15.1483 21.4258Z" fill="#303030"/>
|
||||
</svg>
|
After Width: | Height: | Size: 751 B |
9
src/assets/images/AmericanExpress.svg
Normal file
After Width: | Height: | Size: 92 KiB |
9
src/assets/images/Elo.svg
Normal file
After Width: | Height: | Size: 25 KiB |
9
src/assets/images/Hiper.svg
Normal file
After Width: | Height: | Size: 24 KiB |
9
src/assets/images/Master.svg
Normal file
After Width: | Height: | Size: 14 KiB |
9
src/assets/images/PayPal.svg
Normal file
After Width: | Height: | Size: 28 KiB |
9
src/assets/images/Visa.svg
Normal file
After Width: | Height: | Size: 26 KiB |
9
src/assets/images/boleto.svg
Normal file
After Width: | Height: | Size: 18 KiB |
9
src/assets/logos/logo-m3Academy.svg
Normal file
After Width: | Height: | Size: 19 KiB |
10
src/assets/logos/logo-m3Academy_invert.svg
Normal file
After Width: | Height: | Size: 45 KiB |
4
src/assets/logos/m3-logo.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg width="29" height="16" viewBox="0 0 29 16" fill="white" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M16.6908 5.35268C16.2433 4.75927 15.6813 4.26577 15.0395 3.90269C14.3977 3.53961 13.6897 3.31466 12.9593 3.24175C12.2288 3.16883 11.4915 3.2495 10.7929 3.47877C10.0942 3.70803 9.44909 4.08103 8.89735 4.57469L8.42068 4.20515C5.14601 1.85175 0.560514 3.8502 0.131517 7.88112C0.00101444 9.82309 -0.0323953 11.7706 0.0314179 13.716C0.0208904 13.9656 0.0607758 14.2148 0.148598 14.4481C0.236421 14.6814 0.370306 14.8937 0.541944 15.072C0.713582 15.2503 0.91931 15.3907 1.14636 15.4845C1.3734 15.5782 1.61692 15.6234 1.8618 15.6172C2.10146 15.6161 2.33844 15.5657 2.55849 15.4688C2.77854 15.372 2.97712 15.2307 3.14231 15.0536C3.30749 14.8765 3.43586 14.6671 3.51971 14.4381C3.60356 14.209 3.64115 13.9651 3.63022 13.7209C3.63022 12.3205 3.63022 10.9201 3.63022 9.51489C3.62637 9.0983 3.65506 8.68206 3.71602 8.27012C3.79291 7.84849 4.02343 7.4722 4.36124 7.21691C4.69905 6.96162 5.11908 6.84627 5.53687 6.89406C5.94527 6.92547 6.32842 7.10775 6.61449 7.40673C6.90056 7.70571 7.06991 8.10086 7.09079 8.5181C7.11463 9.03351 7.09079 9.54893 7.09079 10.0643C7.09079 11.3188 7.09079 12.5733 7.09079 13.8278C7.0859 14.1917 7.19199 14.5481 7.39437 14.8478C7.59676 15.1475 7.88545 15.3755 8.22048 15.5005C9.43597 16.0159 10.6753 15.1115 10.6991 13.6868C10.6991 12.0288 10.6991 10.3707 10.7468 8.71259C10.7629 8.31178 10.8829 7.92249 11.0948 7.58452C11.2965 7.2865 11.5888 7.06453 11.9265 6.95292C12.2642 6.8413 12.6286 6.84625 12.9633 6.96699C13.3408 7.07493 13.6709 7.31116 13.8989 7.63656C14.1269 7.96196 14.2391 8.35703 14.2169 8.75636C14.2169 10.4339 14.2169 12.1114 14.2169 13.7889C14.2169 14.0297 14.2634 14.268 14.3537 14.4904C14.444 14.7129 14.5764 14.9149 14.7432 15.0852C14.9101 15.2554 15.1082 15.3904 15.3262 15.4825C15.5443 15.5746 15.7779 15.6221 16.0139 15.6221C16.2499 15.6221 16.4836 15.5746 16.7016 15.4825C16.9196 15.3904 17.1177 15.2554 17.2846 15.0852C17.4515 14.9149 17.5838 14.7129 17.6741 14.4904C17.7645 14.268 17.8109 14.0297 17.8109 13.7889C17.8109 12.0725 17.8109 10.3853 17.8109 8.64452C17.8142 7.44943 17.4192 6.28868 16.6908 5.35268"/>
|
||||
<path d="M25.695 6.32487L25.1278 6.08661C25.6903 5.63927 26.2241 5.25514 26.7008 4.81752C27.1243 4.4774 27.4899 4.06832 27.7828 3.60679C28.6408 1.97302 27.4301 0.0718221 25.5091 0.0280605C23.7359 0.00374847 21.9675 0.00374847 20.1943 0.00374847C19.9771 -0.0115626 19.7592 0.0201443 19.5549 0.0967889C19.3505 0.173434 19.1644 0.293284 19.0087 0.448477C18.8529 0.60367 18.7311 0.790699 18.6512 0.997294C18.5713 1.20389 18.5352 1.42538 18.5451 1.64724C18.5239 1.87321 18.5511 2.10119 18.6248 2.31537C18.6985 2.52956 18.817 2.72483 18.9721 2.88764C19.1272 3.05046 19.3151 3.17692 19.5229 3.25828C19.7306 3.33964 19.9532 3.37394 20.1753 3.3588C21.0428 3.3588 21.9103 3.3588 22.7778 3.3588C22.9256 3.40743 23.0781 3.40743 23.3641 3.40743C22.1868 4.37991 21.1 5.30376 20.0275 6.21789C19.3363 6.80138 19.1266 7.43836 19.3697 8.16285C19.4988 8.52047 19.7394 8.82497 20.0546 9.02963C20.3697 9.23429 20.742 9.3278 21.1143 9.29579C22.0343 9.29579 22.959 9.29579 23.8789 9.29579C24.0853 9.25688 24.2974 9.26476 24.5004 9.31886C24.7034 9.37297 24.8923 9.47198 25.0536 9.60888C25.2148 9.74577 25.3446 9.91719 25.4337 10.111C25.5227 10.3048 25.5689 10.5162 25.5689 10.7302C25.5689 10.9442 25.5227 11.1556 25.4337 11.3494C25.3446 11.5432 25.2148 11.7146 25.0536 11.8515C24.8923 11.9884 24.7034 12.0874 24.5004 12.1415C24.2974 12.1956 24.0853 12.2035 23.8789 12.1646C22.6873 12.1646 21.4956 12.1646 20.304 12.1646C19.8862 12.1876 19.4931 12.3731 19.2053 12.6829C18.9176 12.9927 18.7573 13.4032 18.7573 13.83C18.7573 14.2567 18.9176 14.6672 19.2053 14.977C19.4931 15.2868 19.8862 15.4723 20.304 15.4954C21.5481 15.4954 22.7969 15.4954 24.041 15.4954C25.1339 15.4671 26.184 15.0565 27.0154 14.3323C27.8467 13.6082 28.4088 12.6145 28.6074 11.5179C28.7658 10.4443 28.5644 9.34753 28.0359 8.40513C27.5073 7.46273 26.6826 6.72978 25.695 6.32487"/>
|
||||
</svg>
|
After Width: | Height: | Size: 3.9 KiB |
7
src/assets/logos/vtex-logo.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<svg width="45" height="16" viewBox="0 0 45 16" fill="white" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M32.4567 5.99083H30.8496V11.4557C30.8496 11.558 30.7611 11.6456 30.6579 11.6456H29.4193C29.3161 11.6456 29.2276 11.558 29.2276 11.4557V5.99083H27.6057C27.5615 5.99083 27.5025 5.97622 27.473 5.94699C27.4436 5.91777 27.4141 5.87394 27.4141 5.81549V4.8511C27.4141 4.80727 27.4288 4.74882 27.473 4.7196C27.5025 4.69037 27.5615 4.66115 27.6057 4.67576H32.4567C32.5599 4.67576 32.6484 4.74882 32.6484 4.8511V5.81549C32.6484 5.91777 32.5599 5.99083 32.4567 5.99083Z"/>
|
||||
<path d="M37.632 11.6017C36.998 11.6893 36.3492 11.7332 35.7152 11.7186C34.4914 11.7186 33.415 11.4117 33.415 9.70213V6.5898C33.415 4.88021 34.5061 4.58797 35.7299 4.58797C36.364 4.57336 36.998 4.6172 37.632 4.70487C37.7647 4.71948 37.8237 4.77793 37.8237 4.89482V5.77154C37.8237 5.87382 37.7352 5.96149 37.632 5.96149H35.6415C35.1991 5.96149 35.0369 6.10761 35.0369 6.60441V7.4519H37.5583C37.6615 7.4519 37.7499 7.53957 37.7499 7.64186V8.53318C37.7499 8.63547 37.6615 8.72314 37.5583 8.72314H35.0369V9.71675C35.0369 10.1989 35.1991 10.3597 35.6415 10.3597H37.632C37.7352 10.3597 37.8237 10.4473 37.8237 10.5496V11.4263C37.8237 11.5286 37.7647 11.5871 37.632 11.6017Z"/>
|
||||
<path d="M44.7685 11.6455H43.2646C43.1614 11.6601 43.0582 11.6016 43.0139 11.4993L41.7017 9.45367L40.5221 11.4555C40.4631 11.5724 40.3894 11.6455 40.2862 11.6455H38.8854C38.8559 11.6455 38.8117 11.6455 38.7822 11.6162C38.7527 11.587 38.738 11.5578 38.738 11.5139C38.738 11.4847 38.7527 11.4701 38.7527 11.4555L40.8022 8.06555L38.7232 4.85094C38.7085 4.83632 38.7085 4.8071 38.7085 4.79249C38.7085 4.71943 38.7822 4.66098 38.8559 4.67559H40.4041C40.5073 4.67559 40.5811 4.76327 40.64 4.85094L41.8491 6.75048L43.0287 4.85094C43.0729 4.74865 43.1614 4.69021 43.2646 4.67559H44.6653C44.739 4.67559 44.8128 4.71943 44.8128 4.79249C44.8128 4.8071 44.798 4.83632 44.798 4.85094L42.7338 8.09477L44.8865 11.4555C44.9012 11.4847 44.916 11.5139 44.916 11.5432C44.9012 11.6016 44.8423 11.6455 44.7685 11.6455Z"/>
|
||||
<path d="M25.1581 4.69055C25.0844 4.69055 25.0254 4.73439 25.0107 4.80745L23.6394 9.84854C23.6247 9.95082 23.5952 9.99466 23.5067 9.99466C23.4182 9.99466 23.3888 9.95082 23.374 9.84854L22.0028 4.80745C21.988 4.73439 21.929 4.69055 21.8553 4.69055H20.4988C20.4546 4.69055 20.4103 4.70516 20.3809 4.749C20.3514 4.77822 20.3366 4.82206 20.3514 4.86589C20.3514 4.86589 22.0322 10.6522 22.047 10.7106C22.2682 11.3974 22.8137 11.7335 23.5067 11.7335C24.1702 11.7627 24.7747 11.3389 24.9664 10.7106C24.9959 10.6376 26.6326 4.86589 26.6326 4.86589C26.6473 4.82206 26.6326 4.77822 26.6031 4.749C26.5736 4.71978 26.5294 4.69055 26.4851 4.69055H25.1581Z"/>
|
||||
<path d="M17.491 0H3.38045C2.86439 0 2.39256 0.277625 2.1419 0.70137C1.8765 1.13973 1.86176 1.68037 2.09767 2.11872L3.51315 4.77808H0.947592C0.623211 4.77808 0.313574 4.93881 0.136639 5.21644C-0.0402959 5.49406 -0.040296 5.84475 0.10715 6.13699L4.64849 14.6411C4.81068 14.9479 5.13506 15.1379 5.47418 15.1379C5.81331 15.1379 6.13769 14.9479 6.29988 14.6411L7.53843 12.3324L9.08661 15.2402C9.33727 15.7078 9.83858 16 10.3694 16C10.9002 16 11.4015 15.7078 11.6522 15.2402L18.7296 2.04566C18.9655 1.60731 18.9507 1.08128 18.6853 0.672146C18.4494 0.248402 17.9776 0 17.491 0ZM11.1803 5.56712L8.08398 11.3242C7.98076 11.5288 7.77434 11.6457 7.53843 11.6457C7.30251 11.6457 7.09609 11.5142 6.99288 11.3242L3.94075 5.62557C3.85228 5.45023 3.85228 5.24566 3.95549 5.07032C4.0587 4.89498 4.25038 4.79269 4.44206 4.79269H10.6938C10.8854 4.79269 11.0624 4.88037 11.1509 5.0411C11.2688 5.20183 11.2688 5.40639 11.1803 5.56712Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
49
src/components/Footer/Footer.tsx
Normal file
@ -0,0 +1,49 @@
|
||||
import React from "react";
|
||||
|
||||
import style from "../../styles/footer/footer.module.css";
|
||||
|
||||
import Master from "../../assets/images/Master.svg";
|
||||
import Visa from "../../assets/images/Visa.svg";
|
||||
import AmericanExpress from "../../assets/images/AmericanExpress.svg";
|
||||
import Elo from "../../assets/images/Elo.svg";
|
||||
import Hiper from "../../assets/images/Hiper.svg";
|
||||
import Paypal from "../../assets/images/PayPal.svg";
|
||||
import Boleto from "../../assets/images/boleto.svg";
|
||||
import VtexPci from "../../assets/icons/vtexPci-icon.svg";
|
||||
import { FooterCreators } from "./contentsFooter/FooterCreators";
|
||||
import { ImagePayment } from "./contentsFooter/ImagePaymant";
|
||||
|
||||
const Footer = () => {
|
||||
return (
|
||||
<footer className={style["footer-home"]}>
|
||||
<p
|
||||
className={`${style["footer-home__text"]} ${style["footer-home__text--desktop"]}`}
|
||||
>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
|
||||
tempor
|
||||
</p>
|
||||
<div className={style["footer-home__payments"]}>
|
||||
<div className= {style["footer-home__payments--division"]}>
|
||||
<ImagePayment urlImage= {Master} textAlt="Bandeira Mastercard" />
|
||||
<ImagePayment urlImage= {Visa} textAlt="Bandeira Visa" />
|
||||
<ImagePayment urlImage= {AmericanExpress} textAlt="Bandeira AmericanExpress" />
|
||||
<ImagePayment urlImage= {Elo} textAlt="Bandeira Elo" />
|
||||
</div>
|
||||
<div className= {style["footer-home__payments--division"]}>
|
||||
<ImagePayment urlImage= {Hiper} textAlt="Bandeira Hiper" />
|
||||
<ImagePayment urlImage= {Paypal} textAlt="Bandeira Paypal" />
|
||||
<ImagePayment urlImage= {Boleto} textAlt="Ícone Boleto" />
|
||||
<ImagePayment urlImage= {VtexPci} textAlt="Ícone VtexPci" vtexPci={true} />
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className={`${style["footer-home__text"]} ${style["footer-home__text--mobile"]}`}
|
||||
>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit
|
||||
</div>
|
||||
<FooterCreators />
|
||||
</footer>
|
||||
);
|
||||
};
|
||||
|
||||
export { Footer };
|
29
src/components/Footer/contentsFooter/FooterCreators.tsx
Normal file
@ -0,0 +1,29 @@
|
||||
import React from "react";
|
||||
import { ReactComponent as M3 } from "../../../assets/logos/m3-logo.svg";
|
||||
import { ReactComponent as Vtex } from "../../../assets/logos/vtex-logo.svg";
|
||||
import style from "../../../styles/footer/creators.module.css";
|
||||
|
||||
const FooterCreators = () => {
|
||||
return (
|
||||
<div className={style["footer-home__creators"]}>
|
||||
<a
|
||||
href="https://vtex.com/br-pt/"
|
||||
target="_blank"
|
||||
className={style["footer-home__creators-powered"]}
|
||||
>
|
||||
Powered by
|
||||
<Vtex />
|
||||
</a>
|
||||
<a
|
||||
href="https://m3ecommerce.com/"
|
||||
target="_blank"
|
||||
className={style["footer-home__creators-developed"]}
|
||||
>
|
||||
Developed by
|
||||
<M3 />
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { FooterCreators };
|
20
src/components/Footer/contentsFooter/ImagePaymant.tsx
Normal file
@ -0,0 +1,20 @@
|
||||
import React from "react";
|
||||
import style from "../../../styles/footer/payments.module.css";
|
||||
|
||||
interface IPayment{
|
||||
urlImage: string;
|
||||
textAlt: string;
|
||||
vtexPci?: boolean
|
||||
}
|
||||
|
||||
const ImagePayment = ({urlImage, textAlt, vtexPci} : IPayment) => {
|
||||
return (
|
||||
<img
|
||||
className={`${style["footer-home__payments-band"]} ${vtexPci == true ? style["footer-home__payments-band--vtexPci"]:""}`}
|
||||
src={urlImage}
|
||||
alt={textAlt}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export { ImagePayment };
|
18
src/components/Header/Header.tsx
Normal file
@ -0,0 +1,18 @@
|
||||
import React from "react";
|
||||
import style from "../../styles/header/header.module.css";
|
||||
import { SubmenuHeader } from "./contentsHeader/SubmenuHeader";
|
||||
import { MenuHeader } from "./contentsHeader/MenuHeader";
|
||||
import { HeaderProvider } from "../../contexts/HeaderContext";
|
||||
|
||||
const Header = () => {
|
||||
return (
|
||||
<HeaderProvider>
|
||||
<header className={style["page-header"]}>
|
||||
<MenuHeader />
|
||||
<SubmenuHeader />
|
||||
</header>
|
||||
</HeaderProvider>
|
||||
);
|
||||
};
|
||||
|
||||
export { Header };
|
30
src/components/Header/contentsHeader/InputMenuHeader.tsx
Normal file
@ -0,0 +1,30 @@
|
||||
import React from "react";
|
||||
import style from "../../../styles/header/inputMenuHeader.module.css";
|
||||
import searchIcon from "../../../assets/icons/search-icon.svg";
|
||||
|
||||
interface IView{
|
||||
view: string
|
||||
}
|
||||
|
||||
const InputMenuHeader = ({view}: IView) => {
|
||||
return (
|
||||
<div
|
||||
className={`${style["input-search"]} ${style[`input-search--${view}`]}`}
|
||||
>
|
||||
<input
|
||||
className={style["inputHeader"]}
|
||||
type="text"
|
||||
name="Buscar"
|
||||
id="Buscar"
|
||||
placeholder="Buscar..."
|
||||
/>
|
||||
<img
|
||||
className={style["icon-input"]}
|
||||
src={searchIcon}
|
||||
alt="Icon de busca"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { InputMenuHeader };
|
38
src/components/Header/contentsHeader/MenuHeader.tsx
Normal file
@ -0,0 +1,38 @@
|
||||
import React, { useContext } from "react";
|
||||
|
||||
import style from "../../../styles/header/menuHeader.module.css";
|
||||
|
||||
import logo from "../../../assets/logos/logo-m3Academy.svg";
|
||||
import { ReactComponent as CartIcon } from "../../../assets/icons/shoppingCart-icon.svg";
|
||||
import { ReactComponent as MenuIcon } from "../../../assets/icons/menuHamburguer-icon.svg";
|
||||
import { InputMenuHeader } from "./InputMenuHeader";
|
||||
import { HeaderContext } from "../../../contexts/HeaderContext";
|
||||
|
||||
const MenuHeader = () => {
|
||||
const { menu } = useContext(HeaderContext);
|
||||
|
||||
return (
|
||||
<div className={style["container"]}>
|
||||
<div className={style["menu"]}>
|
||||
<div onClick={() => menu(true)} className={style["icon-menu"]}>
|
||||
<MenuIcon />
|
||||
</div>
|
||||
<a href="#" className={style["logo"]}>
|
||||
<img src={logo} alt="Logo M3" />
|
||||
</a>
|
||||
<InputMenuHeader view="desktop" />
|
||||
<div className={style["header-links"]}>
|
||||
<a className={style["login"]} href="#">
|
||||
ENTRAR
|
||||
</a>
|
||||
<button className={style["cart"]}>
|
||||
<CartIcon />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<InputMenuHeader view="mobile" />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { MenuHeader };
|
53
src/components/Header/contentsHeader/SubmenuHeader.tsx
Normal file
@ -0,0 +1,53 @@
|
||||
import React, { useContext } from "react";
|
||||
import { HeaderContext } from "../../../contexts/HeaderContext";
|
||||
import style from "../../../styles/header/submenuHeader.module.css";
|
||||
|
||||
const SubmenuHeader = () => {
|
||||
const { open, menu } = useContext(HeaderContext);
|
||||
|
||||
return (
|
||||
<div className={style["submenu"]}>
|
||||
<div className={style["container"]}>
|
||||
<div
|
||||
className={`${style["submenu-links"]} ${style["submenu-links--desktop"]}`}
|
||||
>
|
||||
<a className={style["submenu-link"]} href="#">
|
||||
CURSOS
|
||||
</a>
|
||||
<a className={style["submenu-link"]} href="#">
|
||||
SAIBA MAIS
|
||||
</a>
|
||||
<a className={style["submenu-link"]} href="#">
|
||||
INSTITUCIONAIS
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div className={style["submenu--mobile"]}>
|
||||
<div
|
||||
onClick={() => menu(false)}
|
||||
className={`${style["submenu--absolute"]} ${
|
||||
open == true ? style["is-open"] : ""
|
||||
}`}
|
||||
></div>
|
||||
<div
|
||||
className={`${style["submenu-links"]} ${
|
||||
style["submenu-links--mobile"]
|
||||
} ${open == true ? style["is-open"] : ""}`}
|
||||
>
|
||||
<a className={style["submenu-link"]} href="#">
|
||||
ENTRAR
|
||||
</a>
|
||||
<a className={style["submenu-link"]} href="#">
|
||||
CURSOS
|
||||
</a>
|
||||
<a className={style["submenu-link"]} href="#">
|
||||
SAIBA MAIS
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { SubmenuHeader };
|
24
src/components/InformationsFooter/InformationsFooter.tsx
Normal file
@ -0,0 +1,24 @@
|
||||
import React from "react";
|
||||
import { DuvidasFooter } from "./contentsInformationsFooter/Duvidas";
|
||||
import { FaleConosco } from "./contentsInformationsFooter/FaleConosco";
|
||||
import { InstitucionalFooter } from "./contentsInformationsFooter/Institucional";
|
||||
import { SocialMedia } from "./contentsInformationsFooter/SocialMedia";
|
||||
|
||||
import style from "../../styles/infosfooter/informationsfooter.module.css";
|
||||
|
||||
const InformationsFooter = () => {
|
||||
|
||||
return (
|
||||
<section className={style["infosFooter"]}>
|
||||
<div className={style["container"]}>
|
||||
<InstitucionalFooter />
|
||||
<DuvidasFooter />
|
||||
<FaleConosco />
|
||||
<SocialMedia />
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
export { InformationsFooter };
|
@ -0,0 +1,36 @@
|
||||
import React, { useState } from "react";
|
||||
import { LiPersonText } from "./LiPersonText";
|
||||
import style from "../../../styles/infosfooter/columns.module.css";
|
||||
|
||||
import moreIcon from "../../../assets/icons/more-icon.svg";
|
||||
|
||||
const DuvidasFooter = () => {
|
||||
|
||||
const [open, setOpen] = useState(false);
|
||||
|
||||
return (
|
||||
<div className={style["infosFooter__column"]}>
|
||||
<div
|
||||
onClick={() => setOpen(!open)}
|
||||
className={style["infosFooter__title--mobile"]}
|
||||
>
|
||||
<h2 className={style["infosFooter__titles"]}>DÚVIDAS</h2>
|
||||
<span className={style["infosFooter__morelist"]}>
|
||||
<img src={moreIcon} alt="Ícone Mais" />
|
||||
</span>
|
||||
</div>
|
||||
<ul
|
||||
className={`${style["infosFooter-list--mobile"]} ${
|
||||
open == true ? style["open-infos"] : ""
|
||||
}`}
|
||||
>
|
||||
<LiPersonText textType="link" text="Entrega" />
|
||||
<LiPersonText textType="link" text="Pagamento" />
|
||||
<LiPersonText textType="link" text="Trocas e Devoluções" />
|
||||
<LiPersonText textType="link" text="Dúvidas Frequentes" />
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { DuvidasFooter };
|
@ -0,0 +1,36 @@
|
||||
import React, { useState } from "react";
|
||||
import style from "../../../styles/infosfooter/columns.module.css";
|
||||
|
||||
import moreIcon from "../../../assets/icons/more-icon.svg";
|
||||
import { LiPersonText } from "./LiPersonText";
|
||||
|
||||
const FaleConosco = () => {
|
||||
|
||||
const [open, setOpen] = useState(false);
|
||||
|
||||
return (
|
||||
<div className={style["infosFooter__column"]}>
|
||||
<div
|
||||
onClick={() => setOpen(!open)}
|
||||
className={style["infosFooter__title--mobile"]}
|
||||
>
|
||||
<h2 className={style["infosFooter__titles"]}>FALE CONOSCO</h2>
|
||||
<span className={style["infosFooter__morelist"]}>
|
||||
<img src={moreIcon} alt="Ícone Mais" />
|
||||
</span>
|
||||
</div>
|
||||
<ul
|
||||
className={`${style["infosFooter-list--mobile"]} ${
|
||||
open == true ? style["open-infos"] : ""
|
||||
}`}
|
||||
>
|
||||
<LiPersonText text="Atendimento ao Consumidor" textType="title" />
|
||||
<LiPersonText text="(11) 4159 9504" textType="paragraph" />
|
||||
<LiPersonText text="Atendimento ao Cliente" textType="title" />
|
||||
<LiPersonText text="(11) 99433-8825" textType="paragraph"/>
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { FaleConosco };
|
@ -0,0 +1,35 @@
|
||||
import React, { useState } from "react";
|
||||
import { LiPersonText } from "./LiPersonText";
|
||||
import style from "../../../styles/infosfooter/columns.module.css";
|
||||
|
||||
import moreIcon from "../../../assets/icons/more-icon.svg";
|
||||
|
||||
const InstitucionalFooter = () => {
|
||||
const [open, setOpen] = useState(false);
|
||||
|
||||
return (
|
||||
<div className={style["infosFooter__column"]}>
|
||||
<div
|
||||
onClick={() => setOpen(!open)}
|
||||
className={style["infosFooter__title--mobile"]}
|
||||
>
|
||||
<h2 className={style["infosFooter__titles"]}>INSTITUCIONAL</h2>
|
||||
<span className={style["infosFooter__morelist"]}>
|
||||
<img src={moreIcon} alt="Ícone Mais" />
|
||||
</span>
|
||||
</div>
|
||||
<ul
|
||||
className={`${style["infosFooter-list--mobile"]} ${
|
||||
open == true ? style["open-infos"] : ""
|
||||
}`}
|
||||
>
|
||||
<LiPersonText textType="link" text="Quem Somos" />
|
||||
<LiPersonText textType="link" text="Política de Privacidades" />
|
||||
<LiPersonText textType="link" text="Segurança" />
|
||||
<LiPersonText textType="link" text="Seja um Revendedor" classmore="underline" />
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { InstitucionalFooter };
|
@ -0,0 +1,45 @@
|
||||
import React from "react";
|
||||
import style from "../../../styles/infosfooter/liPersonText.module.css";
|
||||
|
||||
interface IList {
|
||||
text: string;
|
||||
textType: string;
|
||||
classmore?: string;
|
||||
}
|
||||
|
||||
const LiPersonText = ({ text, textType, classmore }: IList) => {
|
||||
switch (textType) {
|
||||
case "title":
|
||||
return (
|
||||
<li className={style["infosFooter-item"]}>
|
||||
<h3 className={style["infosFooter-item-contact__title"]}>{text}</h3>
|
||||
</li>
|
||||
);
|
||||
case "link":
|
||||
return (
|
||||
<li className={style["infosFooter-item"]}>
|
||||
<a
|
||||
className={`${style["infosFooter-item__link"]} ${
|
||||
classmore != null
|
||||
? style[`infosFooter-item__link--${classmore}`]
|
||||
: ""
|
||||
}`}
|
||||
href="#"
|
||||
target="_blank"
|
||||
>
|
||||
{text}
|
||||
</a>
|
||||
</li>
|
||||
);
|
||||
default:
|
||||
return (
|
||||
<li className={style["infosFooter-item"]}>
|
||||
<p className={style["infosFooter-item-contact__description"]}>
|
||||
{text}
|
||||
</p>
|
||||
</li>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export { LiPersonText };
|
@ -0,0 +1,37 @@
|
||||
import React from "react";
|
||||
import { ReactComponent as Facebook } from "../../../assets/icons/facebook-icon.svg";
|
||||
import { ReactComponent as Instagram } from "../../../assets/icons/instagram-icon.svg";
|
||||
import { ReactComponent as Twitter } from "../../../assets/icons/twitter-icon.svg";
|
||||
import { ReactComponent as YouTube } from "../../../assets/icons/youtube-icon.svg";
|
||||
import { ReactComponent as Linkedin } from "../../../assets/icons/linkedin-icon.svg";
|
||||
|
||||
import style from "../../../styles/infosfooter/socialmedia.module.css";
|
||||
|
||||
const SocialMedia = () => {
|
||||
return (
|
||||
<div className={style["infosFooter-socialMedia"]}>
|
||||
<div className={style["infosFooter-socialMedia__links"]}>
|
||||
<a href="#" target="_blank">
|
||||
<Facebook />
|
||||
</a>
|
||||
<a className={style["infosFooter-socialMedia__item"]} href="#" target="_blank">
|
||||
<Instagram />
|
||||
</a>
|
||||
<a className={style["infosFooter-socialMedia__item"]} href="#" target="_blank">
|
||||
<Twitter />
|
||||
</a>
|
||||
<a className={style["infosFooter-socialMedia__item"]} href="#" target="_blank">
|
||||
<YouTube />
|
||||
</a>
|
||||
<a className={style["infosFooter-socialMedia__item"]} href="#" target="_blank">
|
||||
<Linkedin />
|
||||
</a>
|
||||
</div>
|
||||
<p className={style["infosFooter-socialMedia-website"]}>
|
||||
<a className={style["infosFooter-socialMedia-website__link"]} href="#" target="_blank">www.loremipsum.com</a>
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { SocialMedia };
|
14
src/components/Main/Main.tsx
Normal file
@ -0,0 +1,14 @@
|
||||
import React from "react";
|
||||
import { BreadcrumbsMain } from "./contentsMain/BreadcrumbsMain";
|
||||
import { MainContent } from "./contentsMain/MainContent";
|
||||
|
||||
const Main = () => {
|
||||
return (
|
||||
<main>
|
||||
<BreadcrumbsMain />
|
||||
<MainContent />
|
||||
</main>
|
||||
);
|
||||
};
|
||||
|
||||
export { Main };
|
22
src/components/Main/contentsMain/BreadcrumbsMain.tsx
Normal file
@ -0,0 +1,22 @@
|
||||
import React from "react";
|
||||
import style from "../../../styles/main/breadcrumbsMain.module.css";
|
||||
import {ReactComponent as HomeIcon} from "../../../assets/icons/home-icon.svg";
|
||||
import {ReactComponent as ArrowIcon} from "../../../assets/icons/arrow-icon.svg";
|
||||
|
||||
const BreadcrumbsMain = () => {
|
||||
return (
|
||||
<section className={style["container"]}>
|
||||
<div className={style["breadcrumbs"]}>
|
||||
<a className={style["breadcrumbs-link"]} href="#">
|
||||
<HomeIcon />
|
||||
</a>
|
||||
<ArrowIcon />
|
||||
<a className={style["breadcrumbs-link"]} href="#">
|
||||
INSTITUCIONAL
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export { BreadcrumbsMain };
|
21
src/components/Main/contentsMain/LiNavigation.tsx
Normal file
@ -0,0 +1,21 @@
|
||||
import React, { useContext } from "react";
|
||||
import { PageContext } from "../../../contexts/PageContext";
|
||||
import style from "../../../styles/main/liNavigation.module.css";
|
||||
|
||||
interface Itext {
|
||||
text: string;
|
||||
}
|
||||
|
||||
|
||||
const LiNavigation = ({ text }: Itext) => {
|
||||
|
||||
const { content, aba } = useContext(PageContext);
|
||||
|
||||
return (
|
||||
<li>
|
||||
<button onClick={() => aba(text)} className={`${style["item-button"]} ${content === text ? style["is-selected"]:""}`}>{text}</button>
|
||||
</li>
|
||||
);
|
||||
};
|
||||
|
||||
export { LiNavigation };
|
16
src/components/Main/contentsMain/MainContent.tsx
Normal file
@ -0,0 +1,16 @@
|
||||
import React from "react";
|
||||
import style from "../../../styles/main/mainContent.module.css";
|
||||
import { NavigationMain } from "./NavigationMain";
|
||||
|
||||
const MainContent = () => {
|
||||
return (
|
||||
<section className={style["mainContent"]}>
|
||||
<div className={style["container"]}>
|
||||
<h1 className={style["title"]}>INSTITUCIONAL</h1>
|
||||
<NavigationMain />
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export { MainContent };
|
24
src/components/Main/contentsMain/NavigationMain.tsx
Normal file
@ -0,0 +1,24 @@
|
||||
import React from "react";
|
||||
import style from "../../../styles/main/navigationMain.module.css";
|
||||
import { LiNavigation } from "./LiNavigation";
|
||||
import { SelectedContent } from "./SelectedContent";
|
||||
|
||||
const NavigationMain = () => {
|
||||
return (
|
||||
<div className={style["navigationContent"]}>
|
||||
<nav className={style["navigation"]}>
|
||||
<ul className={style["navigation-list"]}>
|
||||
<LiNavigation text="Sobre" />
|
||||
<LiNavigation text="Forma de Pagamento" />
|
||||
<LiNavigation text="Entrega" />
|
||||
<LiNavigation text="Troca e Devolução" />
|
||||
<LiNavigation text="Segurança e Privacidade" />
|
||||
<LiNavigation text="Contato" />
|
||||
</ul>
|
||||
</nav>
|
||||
<SelectedContent />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { NavigationMain };
|
33
src/components/Main/contentsMain/SelectedContent.tsx
Normal file
@ -0,0 +1,33 @@
|
||||
import React, { useContext } from "react";
|
||||
import { PageContext } from "../../../contexts/PageContext";
|
||||
import { About } from "./selectedContent/About";
|
||||
import { Delivery } from "./selectedContent/Delivery";
|
||||
import { ExchangeReturn } from "./selectedContent/ExchangeReturn";
|
||||
import { CustomForm } from "./selectedContent/form/Form";
|
||||
import { FormPayment } from "./selectedContent/FormPayment";
|
||||
import { SecurityPrivacy } from "./selectedContent/SecurityPrivacy";
|
||||
|
||||
function renderSwitch(param: string) {
|
||||
switch (param) {
|
||||
case "Sobre":
|
||||
return <About />;
|
||||
case "Forma de Pagamento":
|
||||
return <FormPayment />;
|
||||
case "Entrega":
|
||||
return <Delivery />;
|
||||
case "Troca e Devolução":
|
||||
return <ExchangeReturn />;
|
||||
case "Segurança e Privacidade":
|
||||
return <SecurityPrivacy />;
|
||||
default:
|
||||
return <CustomForm />;
|
||||
}
|
||||
}
|
||||
|
||||
const SelectedContent = () => {
|
||||
const { content } = useContext(PageContext);
|
||||
|
||||
return renderSwitch(content);
|
||||
};
|
||||
|
||||
export { SelectedContent };
|
41
src/components/Main/contentsMain/selectedContent/About.tsx
Normal file
@ -0,0 +1,41 @@
|
||||
import React from "react";
|
||||
import style from "../../../../styles/main/contentSelected.module.css";
|
||||
|
||||
const About = () => {
|
||||
return (
|
||||
<div className={style["contentSelected"]}>
|
||||
<h2 className={style["content-title"]}>Sobre</h2>
|
||||
<div className={style["content"]}>
|
||||
<p className={style["content-paragraph"]}>
|
||||
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 className={style["content-paragraph"]}>
|
||||
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 className={style["content-paragraph"]}>
|
||||
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>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { About };
|
@ -0,0 +1,34 @@
|
||||
import React from "react";
|
||||
import style from "../../../../styles/main/contentSelected.module.css";
|
||||
|
||||
const Delivery = () => {
|
||||
return (
|
||||
<div className={style["contentSelected"]}>
|
||||
<h2 className={style["content-title"]}>Entrega</h2>
|
||||
<div className={style["content"]}>
|
||||
<p className={style["content-paragraph"]}>
|
||||
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 className={style["content-paragraph"]}>
|
||||
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>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { Delivery };
|
@ -0,0 +1,41 @@
|
||||
import React from "react";
|
||||
import style from "../../../../styles/main/contentSelected.module.css";
|
||||
|
||||
const ExchangeReturn = () => {
|
||||
return (
|
||||
<div className={style["contentSelected"]}>
|
||||
<h2 className={style["content-title"]}>Troca e Devolução</h2>
|
||||
<div className={style["content"]}>
|
||||
<p className={style["content-paragraph"]}>
|
||||
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 className={style["content-paragraph"]}>
|
||||
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 className={style["content-paragraph"]}>
|
||||
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>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { ExchangeReturn };
|
@ -0,0 +1,23 @@
|
||||
import React from "react";
|
||||
import style from "../../../../styles/main/contentSelected.module.css";
|
||||
|
||||
const FormPayment = () => {
|
||||
return (
|
||||
<div className={style["contentSelected"]}>
|
||||
<h2 className={style["content-title"]}>Forma de Pagamento</h2>
|
||||
<div className={style["content"]}>
|
||||
<p className={style["content-paragraph"]}>
|
||||
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>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { FormPayment };
|
@ -0,0 +1,23 @@
|
||||
import React from "react";
|
||||
import style from "../../../../styles/main/contentSelected.module.css";
|
||||
|
||||
const SecurityPrivacy = () => {
|
||||
return (
|
||||
<div className={style["contentSelected"]}>
|
||||
<h2 className={style["content-title"]}>Segurança e Privacidade</h2>
|
||||
<div className={style["content"]}>
|
||||
<p className={style["content-paragraph"]}>
|
||||
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>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { SecurityPrivacy };
|
@ -0,0 +1,28 @@
|
||||
import React, { ReactNode } from "react";
|
||||
import { ErrorMessage, Field, FieldProps } from "formik";
|
||||
import MaskedInput, {} from "react-input-mask";
|
||||
import style from "../../../../../styles/main/form/fieldForm.module.css";
|
||||
|
||||
interface IFieldForm {
|
||||
lab: string;
|
||||
camp: string;
|
||||
place: string;
|
||||
}
|
||||
|
||||
const FieldForm = ({ lab, camp, place }: IFieldForm) => {
|
||||
return (
|
||||
<div className={style["form-inputGroup"]}>
|
||||
<label className={style["form__label"]} htmlFor={camp}>
|
||||
{lab}
|
||||
</label>
|
||||
<Field className={style["form__input"]} id={camp} name={camp} placeholder={place} />
|
||||
<ErrorMessage
|
||||
className={style["form__error"]}
|
||||
component="span"
|
||||
name={camp}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { FieldForm };
|
@ -0,0 +1,64 @@
|
||||
import React from "react";
|
||||
import { Formik, Form as FormikForm, FormikHelpers } from "formik";
|
||||
|
||||
import FormSchema from "../../../../../schema/FormSchema";
|
||||
import style from "../../../../../styles/main/form/form.module.css";
|
||||
import { FieldForm } from "./FieldForm";
|
||||
import { TermForm } from "./TermForm";
|
||||
|
||||
interface IFormikValues {
|
||||
name: string;
|
||||
email: string;
|
||||
cpf: string;
|
||||
dataNascimento: string;
|
||||
telefone: string;
|
||||
instagram: string;
|
||||
}
|
||||
const initialValues = {
|
||||
name: "",
|
||||
email: "",
|
||||
cpf: "",
|
||||
dataNascimento: "",
|
||||
telefone: "",
|
||||
instagram: "",
|
||||
};
|
||||
|
||||
const CustomForm = () => {
|
||||
const handleFormikSubmit = (
|
||||
values: IFormikValues,
|
||||
actions: FormikHelpers<IFormikValues>
|
||||
) => {
|
||||
console.log(values);
|
||||
actions.resetForm();
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={style["content-selected"]}>
|
||||
<Formik
|
||||
initialValues={initialValues}
|
||||
onSubmit={handleFormikSubmit}
|
||||
validationSchema={FormSchema}
|
||||
>
|
||||
<FormikForm className={style["form"]}>
|
||||
<h2 className={style["form__title"]}>PREENCHA O FORMULÁRIO</h2>
|
||||
<FieldForm camp="name" lab="Nome" place="Seu nome Completo" />
|
||||
<FieldForm camp="email" lab="E-mail" place="Seu e-mail" />
|
||||
<FieldForm camp="cpf" lab="CPF" place="000 000 000 00" />
|
||||
<FieldForm
|
||||
camp="dataNascimento"
|
||||
lab="Data de Nascimento"
|
||||
place="00.00.0000"
|
||||
/>
|
||||
<FieldForm camp="telefone" lab="Telefone" place="(+00) 00000 0000" />
|
||||
<FieldForm camp="instagram" lab="Instagram" place="@seuuser" />
|
||||
<TermForm />
|
||||
<button className={style["form-button"]} type="submit">
|
||||
CADASTRE-SE
|
||||
</button>
|
||||
</FormikForm>
|
||||
</Formik>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { CustomForm };
|
@ -0,0 +1,32 @@
|
||||
import { ErrorMessage, Field } from "formik";
|
||||
import React from "react";
|
||||
import style from "../../../../../styles/main/form/termForm.module.css";
|
||||
|
||||
const TermForm = () => {
|
||||
return (
|
||||
<div className={style["form-term"]}>
|
||||
<div className={style["form-term__group"]}>
|
||||
<label htmlFor="term" className={style["form-term__label"]}>
|
||||
<span className={style["form-term__span"]}>*</span> Declaro que li e
|
||||
aceito
|
||||
</label>
|
||||
<div className={style["form-term__input-group"]}>
|
||||
<Field
|
||||
type="checkbox"
|
||||
name="term"
|
||||
id="term"
|
||||
className={style["form-term__input"]}
|
||||
/>
|
||||
<div className={style["form-term__input--custom"]}></div>
|
||||
</div>
|
||||
</div>
|
||||
<ErrorMessage
|
||||
name="term"
|
||||
component="span"
|
||||
className={style["form-term__error"]}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { TermForm };
|
59
src/components/Newsletter.tsx
Normal file
@ -0,0 +1,59 @@
|
||||
import {
|
||||
Formik,
|
||||
Form as FormikForm,
|
||||
Field,
|
||||
ErrorMessage,
|
||||
FormikHelpers,
|
||||
} from "formik";
|
||||
import React, { useState } from "react";
|
||||
import * as Yup from "yup";
|
||||
import style from "../styles/newsletter.module.css";
|
||||
|
||||
interface IValue {
|
||||
email: string;
|
||||
}
|
||||
|
||||
const Newsletter = () => {
|
||||
return (
|
||||
<section className={style["newsletter"]}>
|
||||
<div className={style["container"]}>
|
||||
<Formik
|
||||
initialValues={{ email: "" }}
|
||||
onSubmit={(value: IValue, actions: FormikHelpers<IValue>) => {
|
||||
console.log("Newsletter Assinado!!!");
|
||||
actions.resetForm();
|
||||
}}
|
||||
validationSchema={Yup.object().shape({
|
||||
email: Yup.string()
|
||||
.email("Email Inválido")
|
||||
.required("Campo Obrigatório"),
|
||||
})}
|
||||
>
|
||||
<FormikForm>
|
||||
<label className={style["newsletter__label"]} htmlFor="email">
|
||||
ASSINE NOSSA NEWSLETTER
|
||||
</label>
|
||||
<div className={style["newsletter__form-group"]}>
|
||||
<Field
|
||||
className={style["newsletter__email"]}
|
||||
id="email"
|
||||
name="email"
|
||||
placeholder="E-mail"
|
||||
/>
|
||||
<button className={style["newsletter__button"]} type="submit">
|
||||
ENVIAR
|
||||
</button>
|
||||
</div>
|
||||
<ErrorMessage
|
||||
className={style["form__error"]}
|
||||
component="span"
|
||||
name="email"
|
||||
/>
|
||||
</FormikForm>
|
||||
</Formik>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export { Newsletter };
|
30
src/components/ScroolToTop.tsx
Normal file
@ -0,0 +1,30 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { ReactComponent as ArrowToTop } from "../assets/icons/arrowToTop-icon.svg";
|
||||
import style from "../styles/scroolToTop.module.css";
|
||||
|
||||
const ScroolToTop = () => {
|
||||
const [pageYPosition, setPageYPosition] = useState(0);
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener("scroll", getPageYAfterScroll);
|
||||
}, []);
|
||||
|
||||
function getPageYAfterScroll() {
|
||||
setPageYPosition(window.scrollY);
|
||||
}
|
||||
|
||||
function toTop(){
|
||||
setPageYPosition(0);
|
||||
window.scrollTo(0,0);
|
||||
}
|
||||
|
||||
if (pageYPosition > 200) {
|
||||
return (
|
||||
<aside className={style["scroolToTop"]} onClick={toTop}>
|
||||
<ArrowToTop />
|
||||
</aside>
|
||||
);
|
||||
} else return (null);
|
||||
};
|
||||
|
||||
export { ScroolToTop };
|
19
src/components/WhatsappButton.tsx
Normal file
@ -0,0 +1,19 @@
|
||||
import React from "react";
|
||||
import { ReactComponent as WhatsappIcon } from "../assets/icons/whatsapp-icon.svg";
|
||||
import style from "../styles/whatsappButton.module.css";
|
||||
|
||||
const WhatsappButton = () => {
|
||||
return (
|
||||
<div>
|
||||
<a
|
||||
className={style["whatsappButton"]}
|
||||
href="https://api.whatsapp.com/send?phone=123456789&text=Olá, em que a M3 pode ajudar?"
|
||||
target="_blank"
|
||||
>
|
||||
<WhatsappIcon />
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { WhatsappButton };
|
25
src/contexts/HeaderContext.tsx
Normal file
@ -0,0 +1,25 @@
|
||||
import React, { createContext, ReactNode, useState } from "react";
|
||||
|
||||
const HeaderContext = createContext({} as IValues);
|
||||
|
||||
interface Props {
|
||||
children: ReactNode;
|
||||
}
|
||||
|
||||
interface IValues{
|
||||
open: boolean,
|
||||
menu: (stateMenu: boolean) => void
|
||||
}
|
||||
|
||||
const HeaderProvider = ({ children }: Props) => {
|
||||
const [open, setOpen] = useState(false);
|
||||
|
||||
function menu(stateMenu:boolean){
|
||||
setOpen(stateMenu);
|
||||
}
|
||||
|
||||
return <HeaderContext.Provider value={{open, menu}}>{children}</HeaderContext.Provider>;
|
||||
};
|
||||
|
||||
export { HeaderProvider };
|
||||
export { HeaderContext };
|
25
src/contexts/PageContext.tsx
Normal file
@ -0,0 +1,25 @@
|
||||
import React, { createContext, ReactNode, useEffect, useState } from "react";
|
||||
|
||||
const PageContext = createContext({} as IValues);
|
||||
|
||||
interface Props {
|
||||
children: ReactNode;
|
||||
}
|
||||
|
||||
interface IValues{
|
||||
content: string,
|
||||
aba: (contentSelect: string) => void
|
||||
}
|
||||
|
||||
const PageProvider = ({ children }: Props) => {
|
||||
const [content, setContent] = useState('Sobre');
|
||||
|
||||
function aba(contentSelect:string){
|
||||
setContent(contentSelect);
|
||||
}
|
||||
|
||||
return <PageContext.Provider value={{content, aba}}>{children}</PageContext.Provider>;
|
||||
};
|
||||
|
||||
export { PageProvider };
|
||||
export { PageContext };
|
16
src/index.tsx
Normal file
@ -0,0 +1,16 @@
|
||||
import React from "react";
|
||||
import ReactDOM from "react-dom/client";
|
||||
import "./styles/reset.css";
|
||||
import { Home } from "./pages/Home";
|
||||
import { PageProvider } from "./contexts/PageContext";
|
||||
|
||||
const root = ReactDOM.createRoot(
|
||||
document.getElementById("root") as HTMLElement
|
||||
);
|
||||
root.render(
|
||||
<PageProvider>
|
||||
<React.StrictMode>
|
||||
<Home />
|
||||
</React.StrictMode>
|
||||
</PageProvider>
|
||||
);
|
24
src/pages/Home.tsx
Normal file
@ -0,0 +1,24 @@
|
||||
import React from "react";
|
||||
import { Footer } from "../components/Footer/Footer";
|
||||
import { Header } from "../components/Header/Header";
|
||||
import { InformationsFooter } from "../components/InformationsFooter/InformationsFooter";
|
||||
import { Main } from "../components/Main/Main";
|
||||
import { Newsletter } from "../components/Newsletter";
|
||||
import { ScroolToTop } from "../components/ScroolToTop";
|
||||
import { WhatsappButton } from "../components/WhatsappButton";
|
||||
|
||||
const Home = () => {
|
||||
return (
|
||||
<div>
|
||||
<Header />
|
||||
<WhatsappButton />
|
||||
<Main />
|
||||
<Newsletter />
|
||||
<ScroolToTop />
|
||||
<InformationsFooter />
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { Home };
|
1
src/react-app-env.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
/// <reference types="react-scripts" />
|
25
src/schema/FormSchema.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import * as Yup from "yup";
|
||||
import "yup-phone";
|
||||
import { parse } from "date-fns";
|
||||
import CPF from "cpf";
|
||||
|
||||
export default Yup.object().shape({
|
||||
name: Yup.string().min(3, "Nome inválido").required("Campo obrigatório"),
|
||||
email: Yup.string().email("Email inválido").required("Campo obrigatório"),
|
||||
telefone: Yup.string()
|
||||
.required("Campo obrigatório")
|
||||
.phone("BR", true, "Telefone Inválido"),
|
||||
instagram: Yup.string().min(3, "Instagram inválido").required("Campo Obrigatório"),
|
||||
dataNascimento: Yup.date()
|
||||
.transform((value, originalValue, context) => {
|
||||
if (context.isType(value)) return value;
|
||||
return parse(originalValue, "dd.MM.yyyy", new Date());
|
||||
})
|
||||
.typeError("Data Inválida")
|
||||
.max(new Date(), "Data Inválida")
|
||||
.required("Campo Obrigatório"),
|
||||
cpf: Yup.string()
|
||||
.required("Campo Obrigatório")
|
||||
.test("test-cpf", "Cpf inválido", (cpf) => CPF.isValid(cpf!)),
|
||||
term: Yup.bool().oneOf([true], 'Termo Obrigatório')
|
||||
});
|
36
src/styles/footer/creators.module.css
Normal file
@ -0,0 +1,36 @@
|
||||
.footer-home__creators {
|
||||
display: flex;
|
||||
}
|
||||
.footer-home__creators-powered,
|
||||
.footer-home__creators-developed {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
font-size: 10px;
|
||||
line-height: 12px;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
text-decoration: none;
|
||||
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.footer-home__creators-powered svg,
|
||||
.footer-home__creators-developed svg {
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
.footer-home__creators-developed{
|
||||
margin-left: 16px;
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.footer-home__creators{
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 425px) {
|
||||
.footer-home__creators{
|
||||
justify-content: flex-start;
|
||||
}
|
||||
}
|
71
src/styles/footer/footer.module.css
Normal file
@ -0,0 +1,71 @@
|
||||
.footer-home {
|
||||
display: flex;
|
||||
background-color: var(--black-500);
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 16px 32px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.footer-home__text {
|
||||
max-width: 234px;
|
||||
width: 100%;
|
||||
font-weight: 400;
|
||||
font-size: 10px;
|
||||
line-height: 12px;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
.footer-home__text--mobile{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.footer-home__payments{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.footer-home__payments--division{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-left: 6px;
|
||||
}
|
||||
.footer-home__payments--division:first-child{
|
||||
padding-left: 0;
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.footer-home{
|
||||
flex-direction: column;
|
||||
padding: 16px;
|
||||
}
|
||||
.footer-home__text{
|
||||
max-width: 100%;
|
||||
}
|
||||
.footer-home__text--mobile{
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin: 18px 0 24px;
|
||||
}
|
||||
.footer-home__text--desktop{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 425px) {
|
||||
.footer-home__text--mobile{
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 374px) {
|
||||
.footer-home__payments{
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
}
|
||||
.footer-home{
|
||||
align-items: center;
|
||||
}
|
||||
.footer-home__text--mobile{
|
||||
text-align: center;
|
||||
}
|
||||
.footer-home__payments--division:last-child{
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
24
src/styles/footer/payments.module.css
Normal file
@ -0,0 +1,24 @@
|
||||
.footer-home__payments-band{
|
||||
padding: 0 7px;
|
||||
}
|
||||
.footer-home__payments-band:first-child{
|
||||
padding: 0 7px 0 0;
|
||||
}
|
||||
.footer-home__payments-band--vtexPci{
|
||||
margin-left: 7px;
|
||||
padding: 0 0 0 10px;
|
||||
border-left: 1px solid var(--gray-400);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 425px) {
|
||||
.footer-home__payments-band{
|
||||
max-width: 30px;
|
||||
padding: 0 5px;
|
||||
}
|
||||
.footer-home__payments-band:first-child{
|
||||
padding: 0 5px 0 0;
|
||||
}
|
||||
.footer-home__payments-band--vtexPci{
|
||||
max-width: 45px;
|
||||
}
|
||||
}
|
9
src/styles/header/header.module.css
Normal file
@ -0,0 +1,9 @@
|
||||
.page-header {
|
||||
background-color: var(--black-500);
|
||||
padding-top: 18px;
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.page-header{
|
||||
padding: 30px 0 16px;
|
||||
}
|
||||
}
|
44
src/styles/header/inputMenuHeader.module.css
Normal file
@ -0,0 +1,44 @@
|
||||
.input-search {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.inputHeader {
|
||||
width: 216px;
|
||||
border: 2px solid #f0f0f0;
|
||||
border-radius: 5px;
|
||||
outline: 0;
|
||||
|
||||
padding: 8px 32px 8px 12px;
|
||||
|
||||
transition: border .2s linear;
|
||||
}
|
||||
.inputHeader:focus {
|
||||
border-color: var(--black-300);
|
||||
}
|
||||
.input::placeholder {
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
color: var(--gray-400);
|
||||
}
|
||||
.icon-input {
|
||||
position: absolute;
|
||||
right: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.input-search--mobile{
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.input-search--desktop{
|
||||
display: none;
|
||||
}
|
||||
.input-search--mobile{
|
||||
display: flex;
|
||||
margin-top: 32px;
|
||||
}
|
||||
.input-search--mobile .inputHeader{
|
||||
width: 100%;
|
||||
}
|
||||
}
|
55
src/styles/header/menuHeader.module.css
Normal file
@ -0,0 +1,55 @@
|
||||
.container{
|
||||
padding: 0 40px 0 110px;
|
||||
}
|
||||
.menu{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.icon-menu{
|
||||
display: none;
|
||||
}
|
||||
.header-links {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.login {
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
|
||||
transition: color .2s linear;
|
||||
}
|
||||
.login:hover{
|
||||
color: var(--black-300);
|
||||
}
|
||||
.cart {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
cursor: pointer;
|
||||
|
||||
margin-left: 40px;
|
||||
}
|
||||
.cart svg{
|
||||
transition: fill .2s linear;
|
||||
}
|
||||
.cart svg:hover{
|
||||
fill: var(--black-300);
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.container{
|
||||
padding: 0 16px;
|
||||
}
|
||||
.icon-menu{
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
}
|
||||
.login{
|
||||
display: none;
|
||||
}
|
||||
.cart{
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
87
src/styles/header/submenuHeader.module.css
Normal file
@ -0,0 +1,87 @@
|
||||
.submenu {
|
||||
margin-top: 18px;
|
||||
padding: 14px 0;
|
||||
border-top: 1px solid var(--gray-400);
|
||||
}
|
||||
.container{
|
||||
padding: 0 40px 0 110px;
|
||||
}
|
||||
.submenu-links{
|
||||
display: flex;
|
||||
}
|
||||
.submenu-links--desktop {
|
||||
max-width: 258px;
|
||||
width: 100%;
|
||||
|
||||
|
||||
justify-content: space-between;
|
||||
}
|
||||
.submenu-link{
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
font-weight: 500;
|
||||
text-decoration: none;
|
||||
|
||||
transition: color .2s linear;
|
||||
}
|
||||
.submenu-links--desktop .submenu-link{
|
||||
color: #fff;
|
||||
}
|
||||
.submenu-links--mobile{
|
||||
position: absolute;
|
||||
z-index: 5;
|
||||
top: 0;
|
||||
width: 66%;
|
||||
height: 100%;
|
||||
|
||||
background-color: #fff;
|
||||
|
||||
flex-direction: column;
|
||||
|
||||
transform: translateX(-100%);
|
||||
transition: all .2s .1s linear;
|
||||
}
|
||||
.submenu-links .submenu-link:hover{
|
||||
color: var(--black-300);
|
||||
}
|
||||
.submenu--absolute{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
z-index: 2;
|
||||
|
||||
background-color: rgba(0, 0, 0, .8);
|
||||
|
||||
transition: all .2s linear;
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.submenu{
|
||||
border-top: none;
|
||||
margin-top: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.submenu-links--desktop{
|
||||
display: none;
|
||||
}
|
||||
.submenu-links--mobile .submenu-link{
|
||||
width: 100%;
|
||||
padding: 10px 0;
|
||||
|
||||
text-align: center;
|
||||
color: var(--blue-500);
|
||||
|
||||
border-bottom: 1px solid var(--blue-500);
|
||||
}
|
||||
.submenu--absolute.is-open{
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
.submenu-links--mobile.is-open{
|
||||
transform: translateX(0);
|
||||
}
|
||||
}
|
35
src/styles/infosfooter/columns.module.css
Normal file
@ -0,0 +1,35 @@
|
||||
.infosFooter__titles {
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
.infosFooter__morelist{
|
||||
display: none;
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.infosFooter__column{
|
||||
padding-bottom: 24px;
|
||||
}
|
||||
.infosFooter__title--mobile{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
cursor: pointer;
|
||||
}
|
||||
.infosFooter__morelist{
|
||||
display: block;
|
||||
}
|
||||
.infosFooter-list--mobile{
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
height: 0;
|
||||
}
|
||||
.infosFooter-list--mobile.open-infos{
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
height: auto;
|
||||
transition: all .2s ease-in-out;
|
||||
}
|
||||
}
|
25
src/styles/infosfooter/informationsfooter.module.css
Normal file
@ -0,0 +1,25 @@
|
||||
.infosFooter{
|
||||
padding: 25px 0 44px;
|
||||
}
|
||||
.container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
max-width: 870px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1028px) {
|
||||
.infosFooter{
|
||||
padding: 24px 22px 32px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.infosFooter{
|
||||
padding: 24px 28px 32px;
|
||||
}
|
||||
.container{
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
36
src/styles/infosfooter/liPersonText.module.css
Normal file
@ -0,0 +1,36 @@
|
||||
.infosFooter-item {
|
||||
padding: 6px 0;
|
||||
}
|
||||
.infosFooter-item__link {
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
text-transform: capitalize;
|
||||
text-decoration: none;
|
||||
color: var(--black-200);
|
||||
|
||||
transition: color .2s linear;
|
||||
}
|
||||
.infosFooter-item__link:hover {
|
||||
color: var(--blue-500);
|
||||
}
|
||||
.infosFooter-item__link--underline {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.infosFooter-item-contact__title {
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
color: var(--black-200);
|
||||
|
||||
padding: 0.2rem 0;
|
||||
}
|
||||
.infosFooter-item-contact__description {
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
font-weight: 400;
|
||||
text-transform: capitalize;
|
||||
color: #303030;
|
||||
}
|
31
src/styles/infosfooter/socialmedia.module.css
Normal file
@ -0,0 +1,31 @@
|
||||
.infosFooter-socialMedia {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.infosFooter-socialMedia__links {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.infosFooter-socialMedia__item {
|
||||
margin-left: 10px;
|
||||
}
|
||||
.infosFooter-socialMedia-website {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.infosFooter-socialMedia-website__link {
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
font-weight: 400;
|
||||
text-decoration: none;
|
||||
color: var(--black-200);
|
||||
|
||||
transition: color .2s linear;
|
||||
}
|
||||
.infosFooter-socialMedia-website__link:hover{
|
||||
color: var(--blue-500);
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.infosFooter-socialMedia-website{
|
||||
display: none;
|
||||
}
|
||||
}
|
38
src/styles/main/breadcrumbsMain.module.css
Normal file
@ -0,0 +1,38 @@
|
||||
.container{
|
||||
padding: 0 40px 0 120px;
|
||||
}
|
||||
.breadcrumbs {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
|
||||
margin: 30px 0 80px;
|
||||
}
|
||||
.breadcrumbs-link {
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
color: var(--gray-400);
|
||||
text-decoration: none;
|
||||
|
||||
margin: 0 8px;
|
||||
|
||||
transition: color .2s linear;
|
||||
}
|
||||
.breadcrumbs-link svg{
|
||||
transition: fill .2s linear;
|
||||
}
|
||||
.breadcrumbs-link svg:hover{
|
||||
fill: var(--black-300)
|
||||
}
|
||||
.breadcrumbs-link:hover{
|
||||
color: var(--black-300);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.container{
|
||||
padding: 0 16px 0 8px;
|
||||
}
|
||||
.breadcrumbs {
|
||||
margin: 16px 0 32px;
|
||||
}
|
||||
}
|
42
src/styles/main/contentSelected.module.css
Normal file
@ -0,0 +1,42 @@
|
||||
.contentSelected {
|
||||
max-width: 715px;
|
||||
width: 100%;
|
||||
padding-left: 32px;
|
||||
}
|
||||
.content-title {
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
line-height: 28px;
|
||||
color: var(--black-300);
|
||||
}
|
||||
.content {
|
||||
padding-top: 12px;
|
||||
}
|
||||
.content-paragraph {
|
||||
font-weight: 400;
|
||||
font-size: 13px;
|
||||
line-height: 15px;
|
||||
color: var(--gray-600);
|
||||
|
||||
padding-bottom: 24px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.contentSelected {
|
||||
max-width: 100%;
|
||||
padding-left: 0;
|
||||
}
|
||||
.content {
|
||||
padding-top: 16px;
|
||||
}
|
||||
.content-title {
|
||||
text-align: center;
|
||||
}
|
||||
.content-paragraph {
|
||||
padding-bottom: 30px;
|
||||
|
||||
text-align: justify;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
}
|
||||
}
|
31
src/styles/main/form/fieldForm.module.css
Normal file
@ -0,0 +1,31 @@
|
||||
.form-inputGroup {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
}
|
||||
.form__label {
|
||||
margin-left: 14px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
line-height: 23px;
|
||||
color: var(--black-400);
|
||||
padding: 12px 0 4px;
|
||||
}
|
||||
.form__input {
|
||||
border: 1px solid var(--black-400);
|
||||
border-radius: 25px;
|
||||
padding: 12px 28px;
|
||||
}
|
||||
.form__input::placeholder {
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
line-height: 23px;
|
||||
color: var(--gray-500);
|
||||
}
|
||||
.form__error{
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
right: 0;
|
||||
color: #dc143c;
|
||||
font-size: 12px;
|
||||
}
|
56
src/styles/main/form/form.module.css
Normal file
@ -0,0 +1,56 @@
|
||||
.content-selected {
|
||||
max-width: 715px;
|
||||
width: 100%;
|
||||
}
|
||||
.form{
|
||||
max-width: 720px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
margin-left: 32px;
|
||||
}
|
||||
.form__title {
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
line-height: 56px;
|
||||
color: var(--black-500);
|
||||
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
.form-button {
|
||||
width: 100%;
|
||||
padding: 8px ;
|
||||
background: var(--black-500);
|
||||
|
||||
border-radius: 25px;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
|
||||
font-family: "Montserrat", sans-serif;
|
||||
font-size: 16px;
|
||||
line-height: 34px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.05em;
|
||||
color: white;
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
@media screen and (max-width: 1024px) {
|
||||
.content-selected{
|
||||
margin-left: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.form{
|
||||
max-width: 100%;
|
||||
margin-left: 16px;
|
||||
}
|
||||
.form__title {
|
||||
font-size: 18px;
|
||||
line-height: 18px;
|
||||
text-align: center;
|
||||
}
|
||||
.content-selected{
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
70
src/styles/main/form/termForm.module.css
Normal file
@ -0,0 +1,70 @@
|
||||
.form-term {
|
||||
padding: 20px 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
-webkit-touch-callout: none;
|
||||
user-select: none;
|
||||
}
|
||||
.form-term__group {
|
||||
display: flex;
|
||||
}
|
||||
.form-term__label {
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
line-height: 23px;
|
||||
text-decoration: underline;
|
||||
color: var(--black-400);
|
||||
cursor: pointer;
|
||||
}
|
||||
.form-term__span {
|
||||
color: var(--black-500);
|
||||
cursor: help;
|
||||
}
|
||||
.form-term__input-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
margin-left: 12px;
|
||||
}
|
||||
.form-term__input {
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
cursor: pointer;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
}
|
||||
.form-term__input--custom {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
border: 1px solid #000000;
|
||||
border-radius: 3px;
|
||||
position: relative;
|
||||
pointer-events: none;
|
||||
}
|
||||
.form-term__input--custom::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
display: none;
|
||||
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border-radius: 3px;
|
||||
background-color: var(--black-500);
|
||||
}
|
||||
|
||||
.form-term__input:checked ~ .form-term__input--custom::after {
|
||||
display: block;
|
||||
}
|
||||
.form-term__error {
|
||||
color: #dc143c;
|
||||
font-size: 12px;
|
||||
margin-top: 5px;
|
||||
}
|
29
src/styles/main/liNavigation.module.css
Normal file
@ -0,0 +1,29 @@
|
||||
.item-button {
|
||||
width: 100%;
|
||||
outline: 0;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
cursor: pointer;
|
||||
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
line-height: 19px;
|
||||
color: var(--gray-600);
|
||||
text-align: left;
|
||||
|
||||
padding: 10px 16px;
|
||||
transition: all .2s ease-in-out;
|
||||
}
|
||||
.item-button:hover:not(.is-selected){
|
||||
background-color: var(--gray-200);
|
||||
color: var(--black-500);
|
||||
}
|
||||
|
||||
.is-selected {
|
||||
font-weight: 700;
|
||||
font-size: 16px;
|
||||
line-height: 19px;
|
||||
|
||||
background-color: var(--black-500);
|
||||
color: #fff;
|
||||
}
|
18
src/styles/main/mainContent.module.css
Normal file
@ -0,0 +1,18 @@
|
||||
.container{
|
||||
padding: 0 40px 0 128px;
|
||||
}
|
||||
.title {
|
||||
font-size: 24px;
|
||||
line-height: 29px;
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
text-align: center;
|
||||
letter-spacing: 0.1em;
|
||||
|
||||
width: 100%;
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.container{
|
||||
padding: 0 16px;
|
||||
}
|
||||
}
|
29
src/styles/main/navigationMain.module.css
Normal file
@ -0,0 +1,29 @@
|
||||
.navigationContent {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
width: 100%;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.navigation {
|
||||
max-width: 270px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.navigation-list {
|
||||
border-right: 1px solid var(--gray-300);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.navigationContent{
|
||||
flex-direction: column;
|
||||
margin-top: 22px;
|
||||
}
|
||||
.navigation{
|
||||
max-width: 100%;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.navigation-list{
|
||||
border: none;
|
||||
}
|
||||
}
|
110
src/styles/newsletter.module.css
Normal file
@ -0,0 +1,110 @@
|
||||
.newsletter {
|
||||
margin: 170px 0 25px;
|
||||
padding: 16px 0;
|
||||
|
||||
border: 1px solid var(--gray-200);
|
||||
border-right: 0;
|
||||
border-left: 0;
|
||||
}
|
||||
.container{
|
||||
max-width: 475px;
|
||||
width: 100%;
|
||||
|
||||
margin: 0 auto;
|
||||
}
|
||||
.newsletter__label {
|
||||
font-size: 18px;
|
||||
line-height: 21px;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0.05em;
|
||||
font-variant: small-caps;
|
||||
color: var(--black-200);
|
||||
}
|
||||
.newsletter__form-group{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.newsletter__email {
|
||||
max-width: 312px;
|
||||
width: 100%;
|
||||
|
||||
padding: 14px;
|
||||
|
||||
border: 1px solid var(--gray-300);
|
||||
border-radius: 4px;
|
||||
outline: 0;
|
||||
|
||||
transition: border .2s linear;
|
||||
}
|
||||
.newsletter__email::placeholder {
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
font-weight: 400;
|
||||
color: var(--gray-400);
|
||||
}
|
||||
.newsletter__email:focus {
|
||||
border: 1px solid var(--black-300);
|
||||
}
|
||||
|
||||
.newsletter__button {
|
||||
max-width: 126px;
|
||||
width: 100%;
|
||||
|
||||
padding: 14px 0;
|
||||
margin-left: 8px;
|
||||
|
||||
background: var(--black-500);
|
||||
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
|
||||
|
||||
border-radius: 4px;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
letter-spacing: 0.05em;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
|
||||
cursor: pointer;
|
||||
transition: background 0.2s linear;
|
||||
}
|
||||
.newsletter__button:hover {
|
||||
background-color: var(--black-400);
|
||||
}
|
||||
.newsletter__button:active {
|
||||
background-color: var(--black-500);
|
||||
}
|
||||
.form__error{
|
||||
color: #dc143c;
|
||||
font-size: 12px;
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.newsletter {
|
||||
margin: 30px 0 24px;
|
||||
padding: 20px 16px 32px;
|
||||
}
|
||||
.newsletter__label{
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
}
|
||||
.newsletter__form-group{
|
||||
flex-direction: column;
|
||||
margin-top: 12px;
|
||||
}
|
||||
.newsletter__button,
|
||||
.newsletter__email {
|
||||
max-width: 100%;
|
||||
padding: 18px;
|
||||
border-radius: 0;
|
||||
}
|
||||
.newsletter__email{
|
||||
width: calc(100% - 38px);
|
||||
}
|
||||
.newsletter__button {
|
||||
margin: 16px 0 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|