Merge pull request 'develop' (#24) from develop into main

Reviewed-on: #24
This commit is contained in:
Manuela Luana Schumacker Tavares 2023-01-19 23:22:53 +00:00
commit 14ebb33d5c
62 changed files with 31738 additions and 65 deletions

23
.gitignore vendored Normal file
View File

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

109
README.md
View File

@ -1,93 +1,72 @@
# 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).
## About
## Getting started
This project is an institutional page, with a mobile sidebar 'menu
hamburger', contact form with formik, accordion menu in the footer, input validation using yup and route navigation with no need to reload the page!
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
Este Projeto é uma página institucional, com 'menu hamburguer' mobile, formulário de contato com formik, menu acordeon no footer, validação de inputs utilizando yup e navegação por rotas sem necessidade de reload da página!
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)!
## Available Scripts
## Add your files
In the project directory, you can run:
- [ ] [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 start`
```
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
```
Rode o projeto no modo de desenvolvimento. \
Abra [http://localhost:3000](http://localhost:3000) para ve-lo no navegador.
## Integrate with your tools
Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
- [ ] [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)
The page will reload if you make edits.\
You will also see any lint errors in the console.
## Collaborate with your team
### `npm test`
- [ ] [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)
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.
## Test and Deploy
### `npm run build`
Use the built-in continuous integration in GitLab.
Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.
- [ ] [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)
The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!
***
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
# Editing this README
### `npm run eject`
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.
**Note: this is a one-way operation. Once you `eject`, you cant go back!**
## 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.
If you arent satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
## Name
Choose a self-explaining name for your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point youre on your own.
## 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.
You dont have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldnt feel obligated to use this feature. However we understand that this tool wouldnt be useful if you couldnt customize it when you are ready for it.
## 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.
## Learn More
## 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.
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
## 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.
To learn React, check out the [React documentation](https://reactjs.org/).
## 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.
## Libraries that I used
## 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.
React
react-dom
react-router-dom
typescript
sass
react-headless-accordion
Classnames
Formik
Yup
## 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.
## Node version
node: ^16.18.11

29041
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

51
package.json Normal file
View File

@ -0,0 +1,51 @@
{
"name": "desafio-react-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^27.5.2",
"@types/node": "^16.18.11",
"@types/react": "^18.0.26",
"@types/react-dom": "^18.0.10",
"classnames": "^2.3.2",
"formik": "^2.2.9",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.6.2",
"react-scripts": "5.0.1",
"typescript": "^4.9.4",
"web-vitals": "^2.1.4",
"yup": "^0.32.11"
},
"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": {
"react-headless-accordion": "^1.0.2",
"sass": "^1.57.1"
}
}

43
public/index.html Normal file
View File

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

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 92 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

View File

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

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

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

After

Width:  |  Height:  |  Size: 638 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,16 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_6949_746)">
<g clip-path="url(#clip1_6949_746)">
<path d="M19.1778 27.4911V18.544H22.1734L22.6228 15.0561H19.1778V12.8296C19.1778 11.8201 19.4564 11.1321 20.9026 11.1321L22.744 11.1314V8.01168C22.4256 7.97021 21.3324 7.87512 20.0601 7.87512C17.4033 7.87512 15.5845 9.50028 15.5845 12.4842V15.0561H12.5798V18.544H15.5845V27.4911H19.1778Z" fill="#303030"/>
</g>
<circle cx="17.5" cy="17.5" r="16.5" stroke="#303030" stroke-width="2"/>
</g>
<defs>
<clipPath id="clip0_6949_746">
<rect width="35" height="35" fill="white"/>
</clipPath>
<clipPath id="clip1_6949_746">
<rect width="19.574" height="19.616" fill="white" transform="translate(7.875 7.87509)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 800 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 24 KiB

10
src/assets/svgs/home.svg Normal file
View File

@ -0,0 +1,10 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3715_5676)">
<path d="M15.8327 7.59562L14.6904 6.4533L8.40443 0.167326C8.1813 -0.0557753 7.81954 -0.0557753 7.59641 0.167326L1.3104 6.4533L0.167503 7.59623C-0.0517478 7.82324 -0.0454864 8.185 0.181532 8.40425C0.402993 8.61814 0.754068 8.61814 0.975529 8.40425L1.14238 8.23623V15.4285C1.14238 15.7442 1.39823 16 1.71384 16H14.2858C14.6014 16 14.8573 15.7442 14.8573 15.4285V8.23623L15.0247 8.40368C15.2517 8.62293 15.6135 8.61664 15.8327 8.38965C16.0466 8.16819 16.0466 7.81708 15.8327 7.59562ZM9.71421 14.8571H6.28549V10.2855H9.71421V14.8571ZM13.7144 14.8571H10.8571V9.71403C10.8571 9.39841 10.6013 9.14256 10.2856 9.14256H5.71403C5.39841 9.14256 5.14256 9.39841 5.14256 9.71403V14.8571H2.28531V7.09334L7.99982 1.3788L13.7144 7.09334V14.8571Z" fill="#C4C4C4"/>
</g>
<defs>
<clipPath id="clip0_3715_5676">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 997 B

View File

@ -0,0 +1,18 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_6949_751)">
<g clip-path="url(#clip1_6949_751)">
<path d="M22.0996 7.87509H13.2966C10.3071 7.87509 7.875 10.3036 7.875 13.2884V22.0777C7.875 25.0626 10.3071 27.491 13.2966 27.491H22.0996C25.0893 27.491 27.5214 25.0625 27.5214 22.0777V13.2884C27.5215 10.3036 25.0893 7.87509 22.0996 7.87509ZM25.7784 22.0777C25.7784 24.103 24.1281 25.7506 22.0997 25.7506H13.2966C11.2683 25.7507 9.61813 24.103 9.61813 22.0777V13.2884C9.61813 11.2632 11.2683 9.61551 13.2966 9.61551H22.0996C24.128 9.61551 25.7783 11.2632 25.7783 13.2884V22.0777H25.7784Z" fill="#303030"/>
<path d="M17.6981 12.6288C14.9067 12.6288 12.6357 14.8962 12.6357 17.6833C12.6357 20.4703 14.9067 22.7376 17.6981 22.7376C20.4896 22.7376 22.7605 20.4703 22.7605 17.6833C22.7605 14.8962 20.4896 12.6288 17.6981 12.6288ZM17.6981 20.9971C15.868 20.9971 14.3789 19.5105 14.3789 17.6832C14.3789 15.8558 15.8678 14.3691 17.6981 14.3691C19.5284 14.3691 21.0174 15.8558 21.0174 17.6832C21.0174 19.5105 19.5283 20.9971 17.6981 20.9971Z" fill="#303030"/>
<path d="M22.9729 11.1531C22.637 11.1531 22.3071 11.2889 22.0699 11.5267C21.8316 11.7634 21.6946 12.0929 21.6946 12.4294C21.6946 12.7648 21.8317 13.0943 22.0699 13.3321C22.307 13.5688 22.637 13.7057 22.9729 13.7057C23.3099 13.7057 23.6387 13.5688 23.877 13.3321C24.1152 13.0943 24.2512 12.7647 24.2512 12.4294C24.2512 12.0929 24.1152 11.7634 23.877 11.5267C23.6399 11.2889 23.3099 11.1531 22.9729 11.1531Z" fill="#303030"/>
</g>
<circle cx="17.5" cy="17.5" r="16.5" stroke="#303030" stroke-width="2"/>
</g>
<defs>
<clipPath id="clip0_6949_751">
<rect width="35" height="35" fill="white"/>
</clipPath>
<clipPath id="clip1_6949_751">
<rect width="19.6465" height="19.616" fill="white" transform="translate(7.875 7.87509)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,18 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_6949_766)">
<circle cx="17.5" cy="17.5" r="16.5" stroke="#303030" stroke-width="2"/>
<g clip-path="url(#clip1_6949_766)">
<path d="M13.4445 13.8592H10.298C10.1583 13.8592 10.0452 13.9724 10.0452 14.112V24.2205C10.0452 24.3602 10.1583 24.4733 10.298 24.4733H13.4445C13.5842 24.4733 13.6973 24.3602 13.6973 24.2205V14.112C13.6973 13.9724 13.5842 13.8592 13.4445 13.8592Z" fill="#303030"/>
<path d="M11.8725 8.83395C10.7276 8.83395 9.79614 9.76438 9.79614 10.908C9.79614 12.0522 10.7276 12.9829 11.8725 12.9829C13.0165 12.9829 13.9472 12.0521 13.9472 10.908C13.9472 9.76438 13.0165 8.83395 11.8725 8.83395Z" fill="#303030"/>
<path d="M21.4482 13.6079C20.1844 13.6079 19.2502 14.1512 18.6835 14.7685V14.112C18.6835 13.9724 18.5704 13.8592 18.4307 13.8592H15.4174C15.2777 13.8592 15.1646 13.9724 15.1646 14.112V24.2206C15.1646 24.3602 15.2777 24.4734 15.4174 24.4734H18.557C18.6967 24.4734 18.8098 24.3602 18.8098 24.2206V19.2192C18.8098 17.5338 19.2676 16.8772 20.4425 16.8772C21.722 16.8772 21.8236 17.9298 21.8236 19.3059V24.2206C21.8236 24.3603 21.9368 24.4734 22.0764 24.4734H25.2173C25.3569 24.4734 25.4701 24.3603 25.4701 24.2206V18.6759C25.4701 16.1698 24.9922 13.6079 21.4482 13.6079Z" fill="#303030"/>
</g>
</g>
<defs>
<clipPath id="clip0_6949_766">
<rect width="35" height="35" fill="white"/>
</clipPath>
<clipPath id="clip1_6949_766">
<rect width="15.6739" height="15.6739" fill="white" transform="translate(9.79614 8.81671)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

3
src/assets/svgs/lupa.svg Normal file
View 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.6186C14.0951 10.409 14.6249 8.92328 14.6249 7.31261C14.6249 3.28064 11.3444 0.00012207 7.31245 0.00012207C3.28048 0.00012207 0 3.28064 0 7.31261C0 11.3446 3.28052 14.6251 7.31248 14.6251C8.92315 14.6251 10.409 14.0952 11.6186 13.2094L16.4092 18L18 16.4092C18 16.4092 13.2094 11.6186 13.2094 11.6186ZM7.31248 12.3751C4.52086 12.3751 2.25001 10.1042 2.25001 7.31261C2.25001 4.52098 4.52086 2.25013 7.31248 2.25013C10.1041 2.25013 12.375 4.52098 12.375 7.31261C12.375 10.1042 10.1041 12.3751 7.31248 12.3751Z" fill="#303030"/>
</svg>

After

Width:  |  Height:  |  Size: 648 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,4 @@
<svg width="29" height="16" viewBox="0 0 29 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.0307 5.52928C16.5833 4.93587 16.0213 4.44237 15.3795 4.0793C14.7376 3.71622 14.0296 3.49127 13.2992 3.41835C12.5688 3.34544 11.8315 3.42611 11.1328 3.65537C10.4342 3.88464 9.78905 4.25763 9.23731 4.7513L8.76065 4.38176C5.48598 2.02835 0.900479 4.0268 0.471483 8.05773C0.34098 9.99969 0.307571 11.9472 0.371384 13.8926C0.360856 14.1423 0.400742 14.3914 0.488564 14.6247C0.576387 14.858 0.710272 15.0703 0.88191 15.2486C1.05355 15.4269 1.25928 15.5673 1.48632 15.6611C1.71337 15.7549 1.95689 15.8 2.20177 15.7938C2.44143 15.7927 2.6784 15.7423 2.89845 15.6454C3.11851 15.5486 3.31709 15.4073 3.48227 15.2302C3.64746 15.0531 3.77583 14.8437 3.85968 14.6147C3.94352 14.3856 3.98111 14.1417 3.97019 13.8975C3.97019 12.4971 3.97019 11.0967 3.97019 9.69149C3.96633 9.2749 3.99502 8.85866 4.05599 8.44672C4.13287 8.0251 4.3634 7.64881 4.70121 7.39352C5.03901 7.13823 5.45905 7.02288 5.87684 7.07066C6.28524 7.10207 6.66838 7.28435 6.95445 7.58333C7.24052 7.88231 7.40987 8.27746 7.43076 8.6947C7.45459 9.21012 7.43076 9.72553 7.43076 10.2409C7.43076 11.4954 7.43076 12.7499 7.43076 14.0044C7.42587 14.3683 7.53195 14.7247 7.73434 15.0244C7.93673 15.3241 8.22541 15.5521 8.56045 15.6771C9.77594 16.1925 11.0153 15.2881 11.0391 13.8634C11.0391 12.2054 11.0391 10.5473 11.0868 8.8892C11.1028 8.48838 11.2229 8.0991 11.4347 7.76112C11.6364 7.4631 11.9287 7.24114 12.2665 7.12952C12.6042 7.01791 12.9685 7.02285 13.3032 7.1436C13.6808 7.25154 14.0109 7.48776 14.2388 7.81317C14.4668 8.13857 14.579 8.53364 14.5569 8.93296C14.5569 10.6105 14.5569 12.288 14.5569 13.9655C14.5569 14.2063 14.6033 14.4446 14.6937 14.6671C14.784 14.8895 14.9163 15.0915 15.0832 15.2618C15.2501 15.432 15.4482 15.567 15.6662 15.6591C15.8842 15.7513 16.1179 15.7987 16.3539 15.7987C16.5899 15.7987 16.8236 15.7513 17.0416 15.6591C17.2596 15.567 17.4577 15.432 17.6246 15.2618C17.7914 15.0915 17.9238 14.8895 18.0141 14.6671C18.1044 14.4446 18.1509 14.2063 18.1509 13.9655C18.1509 12.2491 18.1509 10.5619 18.1509 8.82113C18.1542 7.62603 17.7592 6.46529 17.0307 5.52928Z" fill="white"/>
<path d="M26.035 6.5015L25.4678 6.26325C26.0302 5.8159 26.5641 5.43177 27.0407 4.99416C27.4642 4.65403 27.8298 4.24496 28.1228 3.78342C28.9808 2.14966 27.77 0.248458 25.8491 0.204696C24.0759 0.180384 22.3075 0.180384 20.5343 0.180384C20.3171 0.165073 20.0992 0.19678 19.8949 0.273425C19.6905 0.350069 19.5044 0.46992 19.3486 0.625113C19.1929 0.780306 19.0711 0.967335 18.9912 1.17393C18.9113 1.38052 18.8751 1.60202 18.8851 1.82387C18.8638 2.04985 18.891 2.27783 18.9648 2.49201C19.0385 2.7062 19.157 2.90146 19.3121 3.06428C19.4671 3.22709 19.6551 3.35356 19.8628 3.43492C20.0706 3.51627 20.2932 3.55057 20.5152 3.53544C21.3828 3.53544 22.2503 3.53544 23.1178 3.53544C23.2656 3.58406 23.4181 3.58406 23.7041 3.58406C22.5268 4.55654 21.44 5.4804 20.3675 6.39453C19.6763 6.97802 19.4666 7.61499 19.7097 8.33949C19.8388 8.6971 20.0794 9.00161 20.3946 9.20627C20.7097 9.41093 21.082 9.50443 21.4543 9.47243C22.3742 9.47243 23.2989 9.47243 24.2189 9.47243C24.4252 9.43352 24.6374 9.44139 24.8404 9.4955C25.0434 9.54961 25.2322 9.64862 25.3935 9.78551C25.5548 9.92241 25.6846 10.0938 25.7736 10.2876C25.8627 10.4814 25.9089 10.6928 25.9089 10.9068C25.9089 11.1209 25.8627 11.3323 25.7736 11.5261C25.6846 11.7198 25.5548 11.8913 25.3935 12.0282C25.2322 12.1651 25.0434 12.2641 24.8404 12.3182C24.6374 12.3723 24.4252 12.3802 24.2189 12.3412C23.0273 12.3412 21.8356 12.3412 20.6439 12.3412C20.2262 12.3643 19.833 12.5498 19.5453 12.8596C19.2576 13.1694 19.0972 13.5799 19.0972 14.0066C19.0972 14.4334 19.2576 14.8439 19.5453 15.1537C19.833 15.4635 20.2262 15.649 20.6439 15.672C21.888 15.672 23.1369 15.672 24.381 15.672C25.4738 15.6437 26.5239 15.2331 27.3553 14.5089C28.1867 13.7848 28.7488 12.7912 28.9474 11.6945C29.1057 10.6209 28.9043 9.52417 28.3758 8.58176C27.8473 7.63936 27.0225 6.90642 26.035 6.5015Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

View File

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

After

Width:  |  Height:  |  Size: 688 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -0,0 +1,3 @@
<svg width="25" height="13" viewBox="0 0 25 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M23.7428 11.3959C23.741 11.6959 23.6177 11.9953 23.373 12.226L23.3728 12.2261C22.8668 12.7035 22.037 12.7035 21.5311 12.2261L21.5232 12.2345L21.5311 12.2261L12.3457 3.5599L12.0712 3.30091L11.7967 3.5599L2.61178 12.2258C2.10549 12.7033 1.27571 12.7032 0.769767 12.2259L0.769708 12.2258C0.525704 11.9957 0.402467 11.6972 0.400037 11.398C0.401876 11.0981 0.525111 10.7986 0.769782 10.5678L0.769785 10.5678L11.1506 0.773762C11.4013 0.537307 11.7333 0.415846 12.0712 0.415846C12.4093 0.415846 12.7415 0.537566 12.9922 0.773969L23.3728 10.568L23.3729 10.5681C23.6171 10.7983 23.7403 11.0968 23.7428 11.3959Z" fill="white" stroke="white" stroke-width="0.8"/>
</svg>

After

Width:  |  Height:  |  Size: 764 B

3
src/assets/svgs/seta.svg Normal file
View File

@ -0,0 +1,3 @@
<svg width="6" height="8" viewBox="0 0 6 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.1162 3.60396L1.67632 0.164193C1.45751 -0.0547314 1.10273 -0.0547314 0.884018 0.164193C0.665288 0.382921 0.665288 0.737679 0.884018 0.95639L3.92778 4.00006L0.884106 7.04362C0.665377 7.26244 0.665377 7.61716 0.884106 7.83589C1.10284 8.0547 1.45759 8.0547 1.67641 7.83589L5.11629 4.39607C5.22566 4.28665 5.28028 4.1434 5.28028 4.00008C5.28028 3.85668 5.22555 3.71332 5.1162 3.60396Z" fill="#C4C4C4"/>
</svg>

After

Width:  |  Height:  |  Size: 509 B

View File

@ -0,0 +1,11 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_6949_758)">
<circle cx="17.5" cy="17.5" r="16.5" stroke="#303030" stroke-width="2"/>
<path d="M29.9914 10.1563C29.0947 10.5497 28.1392 10.8104 27.143 10.937C28.1678 10.3251 28.95 9.36358 29.3177 8.20462C28.3622 8.7743 27.3072 9.1767 26.1829 9.40126C25.2757 8.43521 23.9826 7.83688 22.5719 7.83688C19.835 7.83688 17.6316 10.0584 17.6316 12.7817C17.6316 13.1735 17.6648 13.5503 17.7462 13.909C13.6363 13.7086 9.99962 11.7388 7.5566 8.73813C7.13009 9.47812 6.87991 10.3251 6.87991 11.2369C6.87991 12.949 7.76157 14.4666 9.07577 15.3453C8.28152 15.3302 7.50235 15.0996 6.84223 14.7364C6.84223 14.7515 6.84223 14.7711 6.84223 14.7907C6.84223 17.193 8.55581 19.1884 10.8029 19.6481C10.4005 19.7581 9.96195 19.8108 9.5068 19.8108C9.19031 19.8108 8.8708 19.7928 8.57089 19.7264C9.21141 21.6842 11.029 23.1235 13.1902 23.1702C11.5082 24.4859 9.37267 25.2786 7.06076 25.2786C6.65535 25.2786 6.26652 25.2605 5.87769 25.2108C8.06751 26.623 10.6628 27.4293 13.4614 27.4293C22.5583 27.4293 27.5318 19.8937 27.5318 13.3619C27.5318 13.1434 27.5243 12.9324 27.5137 12.7229C28.4948 12.0266 29.3192 11.157 29.9914 10.1563Z" fill="#303030"/>
</g>
<defs>
<clipPath id="clip0_6949_758">
<rect width="35" height="35" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,9 @@
<svg width="56" height="34" viewBox="0 0 56 34" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect x="0.408936" width="54.6061" height="34" fill="url(#pattern0)"/>
<defs>
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_6797_1223" transform="translate(0 -0.00590909) scale(0.005 0.0080303)"/>
</pattern>
<image id="image0_6797_1223" width="200" height="126" xlink:href="data:image/png;base64,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"/>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,7 @@
<svg width="46" height="16" viewBox="0 0 46 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M32.8807 5.99083H31.2736V11.4557C31.2736 11.558 31.1851 11.6456 31.0819 11.6456H29.8433C29.7401 11.6456 29.6517 11.558 29.6517 11.4557V5.99083H28.0298C27.9855 5.99083 27.9265 5.97622 27.8971 5.94699C27.8676 5.91777 27.8381 5.87394 27.8381 5.81549V4.8511C27.8381 4.80727 27.8528 4.74882 27.8971 4.7196C27.9265 4.69037 27.9855 4.66115 28.0298 4.67576H32.8807C32.9839 4.67576 33.0724 4.74882 33.0724 4.8511V5.81549C33.0724 5.91777 32.9839 5.99083 32.8807 5.99083Z" fill="white"/>
<path d="M38.0559 11.6017C37.4219 11.6894 36.7732 11.7332 36.1391 11.7186C34.9153 11.7186 33.839 11.4118 33.839 9.70216V6.58983C33.839 4.88024 34.9301 4.588 36.1539 4.588C36.7879 4.57339 37.4219 4.61723 38.0559 4.7049C38.1886 4.71951 38.2476 4.77796 38.2476 4.89485V5.77157C38.2476 5.87385 38.1592 5.96152 38.0559 5.96152H36.0654C35.6231 5.96152 35.4609 6.10764 35.4609 6.60444V7.45193H37.9822C38.0854 7.45193 38.1739 7.53961 38.1739 7.64189V8.53321C38.1739 8.6355 38.0854 8.72317 37.9822 8.72317H35.4609V9.71678C35.4609 10.199 35.6231 10.3597 36.0654 10.3597H38.0559C38.1592 10.3597 38.2476 10.4474 38.2476 10.5497V11.4264C38.2476 11.5286 38.1886 11.5871 38.0559 11.6017Z" fill="white"/>
<path d="M45.1925 11.6455H43.6885C43.5853 11.6601 43.4821 11.6016 43.4379 11.4993L42.1256 9.45367L40.946 11.4555C40.8871 11.5724 40.8133 11.6455 40.7101 11.6455H39.3094C39.2799 11.6455 39.2357 11.6455 39.2062 11.6162C39.1767 11.587 39.1619 11.5578 39.1619 11.5139C39.1619 11.4847 39.1767 11.4701 39.1767 11.4555L41.2262 8.06555L39.1472 4.85094C39.1324 4.83632 39.1324 4.8071 39.1324 4.79249C39.1324 4.71943 39.2062 4.66098 39.2799 4.67559H40.8281C40.9313 4.67559 41.005 4.76327 41.064 4.85094L42.273 6.75048L43.4526 4.85094C43.4969 4.74865 43.5853 4.69021 43.6885 4.67559H45.0893C45.163 4.67559 45.2367 4.71943 45.2367 4.79249C45.2367 4.8071 45.222 4.83632 45.222 4.85094L43.1577 8.09477L45.3104 11.4555C45.3252 11.4847 45.3399 11.5139 45.3399 11.5432C45.3252 11.6016 45.2662 11.6455 45.1925 11.6455Z" fill="white"/>
<path d="M25.5821 4.69058C25.5084 4.69058 25.4494 4.73442 25.4347 4.80748L24.0634 9.84857C24.0487 9.95085 24.0192 9.99469 23.9307 9.99469C23.8423 9.99469 23.8128 9.95085 23.798 9.84857L22.4268 4.80748C22.412 4.73442 22.353 4.69058 22.2793 4.69058H20.9228C20.8786 4.69058 20.8344 4.70519 20.8049 4.74903C20.7754 4.77825 20.7606 4.82209 20.7754 4.86592C20.7754 4.86592 22.4563 10.6522 22.471 10.7107C22.6922 11.3974 23.2377 11.7335 23.9307 11.7335C24.5942 11.7627 25.1988 11.339 25.3904 10.7107C25.4199 10.6376 27.0566 4.86592 27.0566 4.86592C27.0713 4.82209 27.0566 4.77825 27.0271 4.74903C26.9976 4.71981 26.9534 4.69058 26.9091 4.69058H25.5821Z" fill="white"/>
<path d="M17.9149 0H3.80434C3.28828 0 2.81645 0.277625 2.56579 0.70137C2.30039 1.13973 2.28565 1.68037 2.52156 2.11872L3.93704 4.77808H1.37148C1.0471 4.77808 0.737464 4.93881 0.560528 5.21644C0.383593 5.49406 0.383593 5.84475 0.531039 6.13699L5.07237 14.6411C5.23457 14.9479 5.55895 15.1379 5.89807 15.1379C6.2372 15.1379 6.56158 14.9479 6.72377 14.6411L7.96232 12.3324L9.5105 15.2402C9.76116 15.7078 10.2625 16 10.7933 16C11.3241 16 11.8254 15.7078 12.0761 15.2402L19.1535 2.04566C19.3894 1.60731 19.3746 1.08128 19.1092 0.672146C18.8733 0.248402 18.4015 0 17.9149 0ZM11.6042 5.56712L8.50787 11.3242C8.40465 11.5288 8.19823 11.6457 7.96232 11.6457C7.7264 11.6457 7.51998 11.5142 7.41677 11.3242L4.36463 5.62557C4.27617 5.45023 4.27617 5.24566 4.37938 5.07032C4.48259 4.89498 4.67427 4.79269 4.86595 4.79269H11.1177C11.3093 4.79269 11.4863 4.88036 11.5747 5.0411C11.6927 5.20183 11.6927 5.40639 11.6042 5.56712Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,11 @@
<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3715_5917)">
<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.8962 24.0061C26.486 25.1642 24.8583 26.1247 23.5599 26.4052C22.6717 26.5944 21.5114 26.7452 17.6057 25.126C12.6098 23.0562 9.39255 17.9796 9.1418 17.6502C8.90167 17.3209 7.12305 14.9621 7.12305 12.5226C7.12305 10.0831 8.36192 8.89524 8.8613 8.38524C9.27142 7.96661 9.9493 7.77536 10.5995 7.77536C10.8099 7.77536 10.999 7.78599 11.169 7.79449C11.6684 7.81574 11.9192 7.84549 12.2485 8.63386C12.6587 9.62199 13.6574 12.0615 13.7764 12.3122C13.8975 12.563 14.0187 12.903 13.8487 13.2324C13.6893 13.5724 13.549 13.7232 13.2983 14.0122C13.0475 14.3012 12.8095 14.5222 12.5588 14.8325C12.3293 15.1024 12.07 15.3914 12.359 15.8907C12.648 16.3795 13.6468 18.0094 15.1173 19.3184C17.0149 21.0077 18.5534 21.5475 19.1038 21.777C19.5139 21.947 20.0027 21.9066 20.3023 21.5879C20.6827 21.1777 21.1523 20.4977 21.6304 19.8284C21.9704 19.3481 22.3997 19.2886 22.8502 19.4586C23.3092 19.618 25.738 20.8186 26.2374 21.0672C26.7368 21.318 27.0662 21.437 27.1873 21.6474C27.3063 21.8577 27.3063 22.8459 26.8962 24.0061Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_3715_5917">
<rect width="34" height="34" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,11 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_6949_763)">
<circle cx="17.5" cy="17.5" r="16.5" stroke="#303030" stroke-width="2"/>
<path d="M27.8026 12.2486C27.5447 11.2896 26.7885 10.5336 25.8296 10.2754C24.0778 9.79605 17.0705 9.79605 17.0705 9.79605C17.0705 9.79605 10.0635 9.79605 8.3117 10.2572C7.37124 10.5152 6.59666 11.2897 6.33869 12.2486C5.87769 14.0003 5.87769 17.633 5.87769 17.633C5.87769 17.633 5.87769 21.284 6.33869 23.0174C6.59693 23.9763 7.35279 24.7323 8.31183 24.9905C10.0819 25.47 17.0708 25.47 17.0708 25.47C17.0708 25.47 24.0778 25.47 25.8296 25.0088C26.7887 24.7507 27.5447 23.9947 27.8029 23.0358C28.2638 21.284 28.2638 17.6515 28.2638 17.6515C28.2638 17.6515 28.2822 14.0003 27.8026 12.2486ZM14.8396 20.989V14.277L20.6665 17.633L14.8396 20.989Z" fill="#303030"/>
</g>
<defs>
<clipPath id="clip0_6949_763">
<rect width="35" height="35" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 978 B

View File

@ -0,0 +1,16 @@
import React from "react";
interface Link {
href: string;
text: string;
}
function DropDownItem(props: Link) {
return (
<li>
<a href={props.href}>{props.text}</a>
</li>
);
}
export { DropDownItem };

View File

@ -0,0 +1,19 @@
import React from "react";
interface Media {
href: string;
src: string;
alt: string;
}
function SocialMediaItem(props: Media) {
return (
<li>
<a href={props.href}>
<img src={props.src} alt={props.alt} />
</a>
</li>
);
}
export { SocialMediaItem };

View File

@ -0,0 +1,87 @@
import React from "react";
import master from "../assets/svgs/mastercard.svg";
import visa from "../assets/svgs/visacard.svg";
import Aexpress from "../assets/svgs/american-expresscard.svg";
import elo from "../assets/svgs/elocard.svg";
import hipercard from "../assets/svgs/hipercard.svg";
import paypal from "../assets/svgs/paypal.svg";
import boleto from "../assets/svgs/boleto.svg";
import vtexpci from "../assets/svgs/vtex-pci-200.svg";
import vtexicon from "../assets/svgs/vtexicon.svg";
import m3icon from "../assets/svgs/m3icon.svg";
import style from "./footer-bottom.module.scss";
const FooterBottom = () => {
return (
<footer className={style["footer-container"]}>
<div className={style["footer-wrapper"]}>
<p className={style["footer-text"]}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor
</p>
<div className={style["footer-creditcards"]}>
<figure>
<img
className={style["creditcard"]}
src={master}
alt="Master Card"
/>
</figure>
<figure>
<img className={style["creditcard"]} src={visa} alt="Visa" />
</figure>
<figure>
<img
className={style["creditcard"]}
src={Aexpress}
alt="American Express"
/>
</figure>
<figure>
<img className={style["creditcard"]} src={elo} alt="Elo" />
</figure>
<figure>
<img
className={style["creditcard"]}
src={hipercard}
alt="Hipercard"
/>
</figure>
<figure>
<img className={style["creditcard"]} src={paypal} alt="PayPal" />
</figure>
<figure>
<img className={style["creditcard"]} src={boleto} alt="Boleto" />
</figure>
<div className={style["footer-line"]} />
<figure>
<img
className={style["vtex-certified"]}
src={vtexpci}
alt="VTEX PCI CERTIFIED"
/>
</figure>
</div>
<div className={style["footer-copyright"]}>
<span>Powered by</span>
<figure>
<a href="/">
<img src={vtexicon} alt="VTEX" />
</a>
</figure>
<span>Developed by</span>
<figure>
<a href="/">
<img src={m3icon} alt="M3 ECOMMERCE" />
</a>
</figure>
</div>
</div>
</footer>
);
};
export { FooterBottom };

View File

@ -0,0 +1,63 @@
import React from "react";
import { DropDownItem } from "../atomo/DropDownItem";
import { SocialMediaItem } from "../atomo/SocialMediaItem";
import { FooterTopMobile } from "./FooterTopMobile";
import style from "../components/footer-top.module.scss";
import facebook from "../assets/svgs/facebookicon.svg";
import instagram from "../assets/svgs/instagramicon.svg";
import twitter from "../assets/svgs/twittericon.svg";
import youtube from "../assets/svgs/youtubeicon.svg";
import linkedin from "../assets/svgs/linkedinicon.svg";
const FooterTop = () => {
return (
<footer className={style["footer-container"]}>
<div className={style["footer-wrapper"]}>
<FooterTopMobile />
<section className={style["footer-list-wrapper"]}>
<ul className={style["footer-list"]}>
<h3>Institucional</h3>
<DropDownItem href={"/"} text={"Quem Somos"} />
<DropDownItem href={"/"} text={"Política de Privacidade"} />
<DropDownItem href={"/"} text={"Segurança"} />
<DropDownItem href={"/"} text={"Seja um Revendedor"} />
</ul>
<ul className={style["footer-list"]}>
<h3>dÚVIDAS</h3>
<DropDownItem href={"/"} text={"Entrega"} />
<DropDownItem href={"/"} text={"Pagamento"} />
<DropDownItem href={"/"} text={"Trocas e Devoluções"} />
<DropDownItem href={"/"} text={"Dúvidas Frequentes"} />
</ul>
<ul className={style["footer-list"]}>
<h3>FALE CONOSCO</h3>
<h4>
Atendimento ao <br />
Consumidor
</h4>
<DropDownItem href={"/"} text={"(11) 4159-9504"} />
<h4>Atendimento Online</h4>
<DropDownItem href={"/"} text={"(11) 99433-8825"} />
</ul>
</section>
<div className={style["footer-social-media-container"]}>
<ul className={style["footer-social-media-wrapper"]}>
<SocialMediaItem href={"/"} src={facebook} alt={"Facebook"} />
<SocialMediaItem href={"/"} src={instagram} alt={"Instagram"} />
<SocialMediaItem href={"/"} src={twitter} alt={"Twitter"} />
<SocialMediaItem href={"/"} src={youtube} alt={"Youtube"} />
<SocialMediaItem href={"/"} src={linkedin} alt={"LinkedIn"} />
</ul>
<a href="/">www.loremipsum.com</a>
</div>
</div>
</footer>
);
};
export { FooterTop };

View File

@ -0,0 +1,62 @@
import React from "react";
import {
Accordion,
AccordionBody,
AccordionHeader,
AccordionItem,
} from "react-headless-accordion";
import style from "../components/footer-top.module.scss";
// import { DropDownItem } from "../atomo/DropDownItem";
const FooterTopMobile = () => {
return (
<Accordion className={style["footer-accordion"]}>
<AccordionItem>
<AccordionHeader className={style["footer-button"]}>
<h3>Institucional</h3>
</AccordionHeader>
<AccordionBody className={style["footer-list-accordion"]}>
<div className={style["footer-list-item"]}>
<a href="/">Quem Somos</a>
<a href="/">Política de Privacidade</a>
<a href="/">Segurança</a>
<a href="/">Seja um Revendedor</a>
</div>
</AccordionBody>
</AccordionItem>
<AccordionItem>
<AccordionHeader className={style["footer-button"]}>
<h3>Dúvidas</h3>
</AccordionHeader>
<AccordionBody className={style["footer-list-accordion"]}>
<div className={style["footer-list-item"]}>
<a href="/">Entrega</a>
<a href="/">Pagamento</a>
<a href="/">Trocas e Devoluções</a>
<a href="/">Dúvidas Frequentes</a>
</div>
</AccordionBody>
</AccordionItem>
<AccordionItem>
<AccordionHeader className={style["footer-button"]}>
<h3>Fale Conosco</h3>
</AccordionHeader>
<AccordionBody className={style["footer-list-accordion"]}>
<div className={style["footer-list-item"]}>
<h4>Atendimento ao Consumidor</h4>
<a href="/">(11) 4159-9504</a>
<h4>Atendimento Online</h4>
<a href="/">(11) 99433-8825</a>
</div>
</AccordionBody>
</AccordionItem>
</Accordion>
);
};
export { FooterTopMobile };

View File

@ -0,0 +1,28 @@
import React from "react";
import style from "./header-bottom.module.scss";
const HeaderBottom = () => {
return (
<header className={style["header-bottom-container"]}>
<nav className={style["header-bottom-wrapper"]}>
<button type="button">
<a className={style["header-button"]} href="/">
cursos
</a>
</button>
<button type="button">
<a className={style["header-button"]} href="/">
Saiba mais
</a>
</button>
<button type="button">
<a className={style["header-button"]} href="/">
Institucionais
</a>
</button>
</nav>
</header>
);
};
export { HeaderBottom };

View File

@ -0,0 +1,38 @@
import React from "react";
import style from "./header-top.module.scss";
import logo from "../assets/svgs/m3-logo.svg";
import lupa from "../assets/svgs/lupa.svg";
import cart from "../assets/svgs/buying-cart.svg";
import { MenuHamburguer } from "./MenuHamburguer";
const HeaderTop = () => {
return (
<header className={style["header-top-container"]}>
<div className={style["header-top-wrapper"]}>
<MenuHamburguer />
<figure className={style["m3-logo-wrapper"]}>
<img className={style["m3-logo"]} src={logo} alt="M3 Ecommerce" />
</figure>
<span className={style["search"]}>
<input
className={style["search-input"]}
type="search"
placeholder="Buscar..."
/>
<img className={style["search-img"]} src={lupa} alt="Search" />
</span>
<div className={style["cart-container"]}>
<span>entrar</span>
<figure>
<img src={cart} alt="Carrinho" />
</figure>
</div>
</div>
</header>
);
};
export { HeaderTop };

View File

@ -0,0 +1,73 @@
import React from "react";
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
import style from "./main-content.module.scss";
import { Sobre } from "../components/main/components/Sobre";
import { FormasDePagamento } from "../components/main/components/FormasDePagamento";
import { Entrega } from "../components/main/components/Entrega";
import { TrocaEDevolucao } from "../components/main/components/TrocaEDevolucao";
import { SegurancaEPrivacidade } from "../components/main/components/SegurancaEPrivacidade";
import { Contato } from "../components/main/components/Contato";
import home from "../assets/svgs/home.svg";
import seta from "../assets/svgs/seta.svg";
import whats from "../assets/svgs/whatsapp.svg";
import setaCima from "../assets/svgs/seta-para-cima.svg";
const MainContent = () => {
return (
<main className={style["main-content-container"]}>
<section className={style["main-content-top-container"]}>
<div className={style["main-content-bread-wrapper"]}>
<a href="/">
<img src={home} alt="Home" />
</a>
<figure>
<img src={seta} alt="Seta" />
</figure>
<span>institucional</span>
</div>
<div className={style["main-content-title-wrapper"]}>
<h1>institucional</h1>
</div>
</section>
<Router>
<Routes>
<Route path="/" element={<Sobre />} />
<Route path="/sobre" element={<Sobre />} />
<Route path="/forma-de-pagamento" element={<FormasDePagamento />} />
<Route path="/entrega" element={<Entrega />} />
<Route path="/troca-e-devolucao" element={<TrocaEDevolucao />} />
<Route
path="/seguranca-e-privacidade"
element={<SegurancaEPrivacidade />}
/>
<Route path="/contato" element={<Contato />} />
</Routes>
</Router>
<a
className={style["main-link-topButton"]}
href="https://api.whatsapp.com/send/?phone=%2B5522997240484&text&type=phone_number&app_absent=0"
target="_blank"
>
<img
className={style["main-whatssap-link"]}
src={whats}
alt="Whatsapp"
/>
</a>
<a className={style["main-link-topButton"]} href="#">
<img
className={style["main-content-backToTop"]}
src={setaCima}
alt="Volte ao Topo"
/>
</a>
</main>
);
};
export { MainContent };

View File

@ -0,0 +1,73 @@
import React, { useEffect, useState, useRef } from "react";
import "./header-bottom.module.scss";
import style from "./header-top.module.scss";
import menuIcon from "../assets/svgs/menu-hamburguer.svg";
import closeButton from "../assets/svgs/close-button.svg";
import { DropDownItem } from "../atomo/DropDownItem";
import classnames from "classnames";
const MenuHamburguer = () => {
const [open, setOpen] = useState(false);
const menuRef = useRef<HTMLDivElement>();
const actualRef = menuRef.current;
useEffect(() => {
const handler = (e: any) => {
if (actualRef) {
if (!actualRef.contains(e.target)) {
setOpen(false);
}
}
};
document.addEventListener("mousedown", handler);
return () => {
document.removeEventListener("mousedown", handler);
};
});
return (
<div
className={style["menu-container"]}
ref={menuRef as React.MutableRefObject<HTMLDivElement>}
>
<div
className={style["menu-trigger"]}
onClick={() => {
setOpen(!open);
}}
>
<button className={style["menu-hamburger"]}>
<img src={menuIcon} alt="Menu Mobile" />
</button>
</div>
<div
className={classnames(
style["dropdown-menu"],
style[`${open ? "active" : "inactive"}`]
)}
>
<div className={style["menu-top"]}>
<button>ENTRAR</button>
<button
onClick={() => {
setOpen(!open);
}}
>
<img src={closeButton} alt="Close button" />
</button>
</div>
<ul className={style["menu-bottom"]}>
<DropDownItem href={"/"} text={"CURSOS"} />
<DropDownItem href={"/"} text={"SAIBA MAIS"} />
<DropDownItem href={"/"} text={"INSTITUCIONAIS"} />
</ul>
<div className={style["menu-overlay"]} />
</div>
</div>
);
};
export { MenuHamburguer };

View File

@ -0,0 +1,60 @@
import React from "react";
import { Formik, Form, Field, ErrorMessage, FormikHelpers } from "formik";
import style from "./newsletter.module.scss";
import NewsletterSchema from "../schema/NewsletterSchema";
interface INewsletter {
newsletter: string;
}
const initialValues = {
newsletter: "",
};
const Newsletter = () => {
const handleSubmit = (values: INewsletter) => {
console.log(values);
};
return (
<section className={style["newsletter-container"]}>
<div className={style["newsletter-wrapper"]}>
<h2 className={style["newsletter-title"]}>Assine nossa Newsletter</h2>
<Formik
onSubmit={handleSubmit}
initialValues={initialValues}
validationSchema={NewsletterSchema}
>
{({ errors, touched }) => (
<Form className={style["newsletter-form"]}>
<div className={style["newsletter-form-wrapper"]}>
<div className={style["newsletter-input"]}>
<Field
id="newsletter"
name="newsletter"
placeholder="E-mail"
/>
<ErrorMessage
component="span"
name="newsletter"
className={
errors.newsletter && touched.newsletter
? style["form-feedback"]
: ""
}
/>
</div>
<button className={style["newsletter-button"]} type="submit">
ENVIAR
</button>
</div>
</Form>
)}
</Formik>
</div>
</section>
);
};
export { Newsletter };

View File

@ -0,0 +1,123 @@
@use "../variables.module.scss";
.footer-container {
width: 100%;
height: 64px;
background: variables.$color-black;
@media screen and (min-width: 2500px) {
height: 96px;
}
@media screen and (max-width: 1024px) {
height: 134px;
}
.footer-wrapper {
width: 80.46875%;
padding: 20px 0;
display: flex;
align-items: center;
justify-content: space-between;
margin: 0 auto;
@media screen and (max-width: 1024px) {
width: 100%;
padding: 15px 16px;
gap: 15px;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
}
.footer-text {
width: 25%;
display: flex;
font-weight: 400;
font-size: 10px;
line-height: 12px;
text-transform: capitalize;
color: variables.$color-white;
@media screen and (min-width: 2500px) {
font-size: 20px;
line-height: 23px;
}
@media screen and (max-width: 1024px) {
order: 1;
width: 100%;
}
}
.footer-creditcards {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 12px;
width: 45%;
@media screen and (max-width: 1024px) {
justify-content: flex-start;
width: 100%;
}
.creditcard {
@media screen and (min-width: 2500px) {
height: 40px;
}
}
.footer-line {
width: 24px;
border: 1px solid variables.$color-grey;
transform: rotate(90deg);
}
.vtex-certified {
@media screen and (min-width: 2500px) {
height: 66px;
}
}
}
.footer-copyright {
display: flex;
align-items: center;
width: 25%;
justify-content: flex-end;
gap: 13px;
@media screen and (max-width: 1024px) {
justify-content: flex-start;
order: 2;
width: 100%;
}
a {
img {
@media screen and (min-width: 2500px) {
height: 30px;
}
}
}
span {
font-weight: 400;
font-size: 10px;
line-height: 12px;
text-transform: capitalize;
white-space: nowrap;
color: variables.$color-white;
@media screen and (min-width: 2500px) {
font-size: 20px;
line-height: 23px;
}
}
}
}
}

View File

@ -0,0 +1,188 @@
@use "../variables.module.scss";
.footer-container {
width: 100%;
height: 239px;
background: variables.$color-white;
border-top: 1px solid variables.$color-black;
display: flex;
position: relative;
@media screen and (min-width: 2500px) {
height: 297px;
}
.footer-wrapper {
display: flex;
justify-content: space-between;
padding: 50px 0;
margin: 0 auto;
width: 80.46875%;
//mobile
@media screen and (max-width: 1024px) {
width: 100%;
flex-direction: column;
padding: 24px 16px;
}
.footer-accordion {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: space-between;
z-index: 5;
width: 100%;
@media screen and (min-width: 1025px) {
display: none;
}
.footer-button {
outline: 0;
border: 0;
background: variables.$color-white;
width: 100%;
padding: 12px 0;
display: flex;
justify-content: space-between;
&::after {
content: "+";
font-weight: 500;
font-size: 14px;
line-height: 16px;
color: variables.$color-black3;
}
h3 {
font-weight: 500;
font-size: 14px;
line-height: 16px;
text-transform: capitalize;
color: variables.$color-black3;
}
}
.footer-list-accordion {
width: 100%;
}
.footer-list-item {
display: flex;
flex-direction: column;
background: variables.$color-white;
width: 100%;
a {
text-decoration: none;
font-weight: 400;
font-size: 14px;
line-height: 16px;
text-transform: capitalize;
margin-top: 6px;
color: variables.$color-grey;
}
}
}
//desktop
.footer-list-wrapper {
display: flex;
gap: 121px;
@media screen and (min-width: 2500px) {
gap: 293px;
}
@media screen and (max-width: 1024px) {
display: none;
}
.footer-list {
display: flex;
flex-direction: column;
gap: 12px;
h3 {
font-weight: 500;
font-size: 14px;
line-height: 16px;
text-transform: uppercase;
color: variables.$color-black3;
@media screen and (min-width: 2500px) {
font-size: 28px;
line-height: 33px;
}
}
h4 {
font-weight: 500;
font-size: 12px;
line-height: 14px;
text-transform: capitalize;
color: variables.$color-black3;
@media screen and (min-width: 2500px) {
font-size: 24px;
line-height: 28px;
}
}
a {
font-weight: 400;
font-size: 12px;
line-height: 14px;
text-transform: capitalize;
text-decoration: none;
color: variables.$color-black3;
@media screen and (min-width: 2500px) {
font-size: 24px;
line-height: 28px;
}
}
}
}
}
.footer-social-media-container {
display: flex;
flex-direction: column;
gap: 12px;
z-index: 1;
@media screen and (max-width: 1024px) {
position: absolute;
bottom: 20px;
}
.footer-social-media-wrapper {
display: flex;
gap: 10px;
img {
@media screen and (min-width: 2500px) {
height: 70px;
}
}
}
a {
font-weight: 400;
font-size: 14px;
line-height: 16px;
text-decoration: none;
color: variables.$color-black3;
@media screen and (min-width: 2500px) {
font-size: 28px;
line-height: 33px;
}
}
}
}

View File

@ -0,0 +1,43 @@
@use "../variables.module.scss";
.header-bottom-container {
width: 100%;
background: variables.$color-black;
@media screen and (max-width: 1024px) {
display: none;
}
.header-bottom-wrapper {
width: 80.46875%;
display: flex;
align-items: center;
padding: 14px 0;
margin: 0 auto;
button {
border: 0;
background: transparent;
margin-right: 55px;
cursor: pointer;
a {
text-decoration: none;
}
}
.header-button {
font-weight: 400;
font-size: 14px;
line-height: 16px;
text-transform: uppercase;
color: variables.$color-white;
@media screen and (min-width: 2500px) {
font-weight: 500;
font-size: 28px;
line-height: 33px;
}
}
}
}

View File

@ -0,0 +1,262 @@
@use "../variables.module.scss";
.header-top-container {
width: 100%;
height: 76px;
background: variables.$color-black;
border-bottom: 1px solid variables.$color-grey;
@media screen and (max-width: 1024px) {
height: 139px;
}
@media screen and (min-width: 2500px) {
height: auto;
}
.header-top-wrapper {
width: 80.46875%;
padding: 25px 0;
display: flex;
justify-content: space-between;
align-items: center;
margin: 0 auto;
@media screen and (max-width: 1024px) {
width: 100%;
padding: 25px 16px;
display: grid;
gap: 27.14px;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr;
}
.menu-container {
display: none;
position: relative;
.menu-hamburger {
outline: 0;
background: transparent;
border: 0;
font-size: 0;
width: 0;
img {
width: auto;
}
}
.dropdown-menu {
width: 100%;
position: fixed;
left: 0;
top: 0;
z-index: 8;
}
.active {
opacity: 1;
visibility: visible;
transition: 0.5 ease;
}
.inactive {
opacity: 0;
visibility: hidden;
transition: 0.5 ease;
}
.menu-bottom,
.menu-top {
width: 96.484375%;
padding: 31px 16px;
}
.menu-top {
background: variables.$color-black;
display: flex;
align-items: center;
justify-content: space-between;
button {
outline: 0;
background: transparent;
border: 0;
color: variables.$color-white;
}
button {
img {
width: 15px;
height: 15px;
z-index: 40;
}
}
// &::after {
// content: "";
// background-image: url("../assets/svgs/close-button.svg");
// }
}
.menu-bottom {
background: variables.$color-white;
height: 585px;
display: flex;
flex-direction: column;
gap: 12px;
a {
text-decoration: none;
color: variables.$color-grey;
font-weight: 500;
font-size: 14px;
line-height: 16px;
text-transform: uppercase;
}
}
.menu-overlay {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
pointer-events: none;
background-color: rgba(69, 69, 69, 0.7);
z-index: -1;
}
@media screen and (max-width: 1024px) {
display: block;
}
}
.m3-logo-wrapper {
@media screen and (max-width: 1024px) {
grid-column: 2;
justify-content: center;
align-self: center;
display: flex;
}
}
.m3-logo {
display: block;
width: auto;
height: auto;
cursor: pointer;
@media screen and (min-width: 2500px) {
height: 50.5px;
}
}
.search {
position: relative;
@media screen and (max-width: 1024px) {
display: grid;
grid-column: 1/4;
grid-row: 2;
}
}
.search-input {
height: 32px;
min-width: 264px;
padding: 8px 16px;
border: 2px solid variables.$color-grey4;
border-radius: 5px;
outline: 0;
@media screen and (max-width: 1024px) {
min-width: 100%;
padding: 10px 16px;
height: 36px;
}
@media screen and (min-width: 2500px) {
height: 57px;
padding: 12px 16px;
min-width: 515.62px;
}
}
input::placeholder {
font-weight: 400;
font-size: 14px;
line-height: 16px;
color: variables.$color-grey5;
@media screen and (min-width: 2500px) {
font-size: 28px;
line-height: 33px;
}
}
.search-img {
position: absolute;
right: 16px;
bottom: 8px;
width: auto;
height: 18px;
cursor: pointer;
@media screen and (min-width: 2500px) {
right: 32px;
bottom: 16px;
width: 35px;
height: 35px;
}
}
.cart-container {
display: flex;
align-items: center;
@media screen and (max-width: 1024px) {
justify-content: flex-end;
grid-column: 3;
}
span {
margin-right: 55px;
font-weight: 400;
font-size: 14px;
line-height: 16px;
text-transform: uppercase;
color: variables.$color-white;
text-align: center;
cursor: pointer;
@media screen and (max-width: 1024px) {
display: none;
}
@media screen and (min-width: 2500px) {
font-size: 28px;
line-height: 33px;
text-transform: uppercase;
}
}
figure {
cursor: pointer;
img {
@media screen and (min-width: 2500px) {
height: 54.68px;
}
}
}
}
}
}

View File

@ -0,0 +1,229 @@
@use "../variables.module.scss";
.main-content-container {
width: 100%;
background: variables.$color-white;
padding: 29px 0 40px 0;
.main-content-top-container {
width: 80.46875%;
margin: 0 auto;
@media screen and (max-width: 1024px) {
width: 100%;
padding: 0 16px;
}
.main-content-bread-wrapper {
display: flex;
align-items: center;
gap: 9.73px;
a {
img {
width: 100%;
height: 16px;
@media screen and (min-width: 2500px) {
height: 31.25px;
}
}
}
figure {
img {
width: 100%;
height: 8px;
@media screen and (min-width: 2500px) {
height: 15.62px;
}
}
}
span {
font-weight: 400;
font-size: 12px;
line-height: 14px;
color: variables.$color-grey;
text-transform: uppercase;
@media screen and (min-width: 2500px) {
font-weight: 400;
font-size: 24px;
line-height: 28px;
}
}
}
.main-content-title-wrapper {
text-align: center;
padding: 80px 0;
h1 {
font-weight: 400;
font-size: 24px;
line-height: 28px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: variables.$color-black2;
@media screen and (min-width: 2500px) {
font-size: 48px;
line-height: 56px;
}
}
@media screen and (max-width: 1024px) {
padding: 80px 0 40px 0;
}
}
}
.main-content-wrapper {
width: 80.46875%;
display: flex;
margin: 0 auto;
@media screen and (max-width: 1024px) {
width: 100%;
flex-direction: column;
}
.main-content-list {
width: 29.32038%;
height: 285px;
border-right: 1px solid variables.$color-black;
@media screen and (max-width: 1024px) {
width: 100%;
border: 0;
}
.main-content-item {
padding: 5px 0 5px 16px;
@media screen and (max-width: 1024px) {
padding: 10px 16px;
}
a {
font-weight: 400;
font-size: 16px;
line-height: 19px;
color: variables.$color-grey3;
text-decoration: none;
@media screen and (min-width: 2500px) {
font-size: 32px;
line-height: 38px;
}
}
.selected {
display: flex;
padding: 10px 16px;
background: variables.$color-black;
color: variables.$color-white;
}
}
}
.main-content-text {
width: 72.62135%;
@media screen and (max-width: 1024px) {
width: 100%;
border: 0;
}
.main-content-text-wrapper {
margin-left: 30px;
@media screen and (max-width: 1024px) {
margin-left: 0;
padding: 0 16px;
}
}
h2 {
font-weight: 700;
font-size: 24px;
line-height: 28px;
color: variables.$color-black2;
margin-bottom: 12px;
@media screen and (min-width: 2500px) {
font-size: 48px;
line-height: 56px;
}
@media screen and (max-width: 1024px) {
text-align: center;
}
}
p {
font-weight: 400;
font-size: 13px;
line-height: 15px;
color: variables.$color-grey3;
margin-bottom: 12px;
@media screen and (min-width: 2500px) {
font-size: 26px;
line-height: 30px;
margin-bottom: 24px;
}
}
}
}
.main-link-topButton {
img {
width: auto;
}
.main-whatssap-link,
.main-content-backToTop {
position: fixed;
z-index: 6;
right: 16px;
}
.main-whatssap-link {
bottom: 220px;
@media screen and (min-width: 2500px) {
height: 66px;
}
@media screen and (max-width: 1024px) {
bottom: 90px;
}
}
.main-content-backToTop {
background: variables.$color-grey;
padding: 13px 10px;
border-radius: 50%;
width: 34px;
height: 34px;
bottom: 180px;
@media screen and (min-width: 2500px) {
width: 66px;
height: 66px;
padding: 25px 20px;
bottom: 150px;
}
@media screen and (max-width: 1024px) {
bottom: 50px;
}
}
}
}

View File

@ -0,0 +1,21 @@
import React from "react";
import { MainMenu } from "./MainMenu";
import { MainForm } from "./MainForm";
import style from "../../main-content.module.scss";
const Contato = () => {
return (
<section className={style["main-content-wrapper"]}>
<MainMenu />
<div className={style["main-content-text"]}>
<div className={style["main-content-text-wrapper"]}>
<h2>Preencha o formulário</h2>
<MainForm />
</div>
</div>
</section>
);
};
export { Contato };

View File

@ -0,0 +1,46 @@
import React from "react";
import { MainMenu } from "./MainMenu";
import style from "../../main-content.module.scss";
const Entrega = () => {
return (
<section className={style["main-content-wrapper"]}>
<MainMenu />
<div className={style["main-content-text"]}>
<div className={style["main-content-text-wrapper"]}>
<h2>Entrega</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
</p>
<p>
Sed ut perspiciatis unde omnis iste natus error sit voluptatem
accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
quae ab illo inventore veritatis et quasi architecto beatae vitae
dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,
qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit,
sed quia non numquam eius modi tempora incidunt ut labore et dolore
magnam aliquam quaerat voluptatem.
</p>
<p>
Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis
suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis
autem vel eum iure reprehenderit qui in ea voluptate velit esse quam
nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo
voluptas nulla pariatur?
</p>
</div>
</div>
</section>
);
};
export { Entrega };

View File

@ -0,0 +1,46 @@
import React from "react";
import { MainMenu } from "./MainMenu";
import style from "../../main-content.module.scss";
const FormasDePagamento = () => {
return (
<section className={style["main-content-wrapper"]}>
<MainMenu />
<div className={style["main-content-text"]}>
<div className={style["main-content-text-wrapper"]}>
<h2>Formas de Pagamento</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
</p>
<p>
Sed ut perspiciatis unde omnis iste natus error sit voluptatem
accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
quae ab illo inventore veritatis et quasi architecto beatae vitae
dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,
qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit,
sed quia non numquam eius modi tempora incidunt ut labore et dolore
magnam aliquam quaerat voluptatem.
</p>
<p>
Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis
suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis
autem vel eum iure reprehenderit qui in ea voluptate velit esse quam
nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo
voluptas nulla pariatur?
</p>
</div>
</div>
</section>
);
};
export { FormasDePagamento };

View File

@ -0,0 +1,136 @@
import React from "react";
import { Field, Form, Formik, ErrorMessage } from "formik";
import style from "../../main/components/main-form.module.scss";
import FormMainSchema from "../../../schema/FormMainSchema";
interface IFormMain {
name: string;
email: string;
cpf: string;
nowDate: string;
tel: string;
inst: string;
check: boolean;
}
const initialValues = {
name: "",
email: "",
cpf: "",
nowDate: "",
tel: "",
inst: "",
check: false,
};
const MainForm = () => {
return (
<section className={style["main-form-container"]}>
<Formik
onSubmit={(values: IFormMain, { resetForm }) => {
console.log(values);
resetForm();
console.log("blah");
}}
initialValues={initialValues}
validationSchema={FormMainSchema}
>
{({ errors, touched, isSubmitting }) => (
<Form className={style["main-form"]}>
<div className={style["main-form-item-wrapper"]}>
<label htmlFor="name">Nome</label>
<Field id="name" name="name" placeholder="Seu nome completo" />
<ErrorMessage
component="span"
name="name"
className={errors.name && touched ? style["form-feedback"] : ""}
/>
</div>
<div className={style["main-form-item-wrapper"]}>
<label htmlFor="email">E-mail</label>
<Field id="email" name="email" placeholder="Seu e-mail" />
<ErrorMessage
component="span"
name="email"
className={
errors.email && touched ? style["form-feedback"] : ""
}
/>
</div>
<div className={style["main-form-item-wrapper"]}>
<label htmlFor="cpf">CPF</label>
<Field id="cpf" name="cpf" placeholder="000.000.000-00" />
<ErrorMessage
component="span"
name="cpf"
className={errors.cpf && touched ? style["form-feedback"] : ""}
/>
</div>
<div className={style["main-form-item-wrapper"]}>
<label htmlFor="nowDate">Data de Nascimento:</label>
<Field
type="date"
id="nowDate"
name="nowDate"
placeholder="00.00.0000"
/>
<ErrorMessage
component="span"
name="date"
className={
errors.nowDate && touched ? style["form-feedback"] : ""
}
/>
</div>
<div className={style["main-form-item-wrapper"]}>
<label htmlFor="tel">Telefone:</label>
<Field id="tel" name="tel" placeholder="(00) 00000-0000" />
<ErrorMessage
component="span"
name="tel"
className={errors.tel && touched ? style["form-feedback"] : ""}
/>
</div>
<div className={style["main-form-item-wrapper"]}>
<label htmlFor="inst">Instagram</label>
<Field id="inst" name="inst" placeholder="@seuuser" />
<ErrorMessage
component="span"
name="inst"
className={errors.inst && touched ? style["form-feedback"] : ""}
/>
</div>
<div className={style["main-form-checkbox"]}>
<label htmlFor="check">
<span className={style["main-form-dot"]}>* </span>
<span className={style["main-form-span"]}>
Declaro que li e aceito
</span>
<Field type="checkbox" id="check" name="check" />
<ErrorMessage
component="span"
name="check"
className={
errors.check && touched ? style["form-feedback"] : ""
}
/>
</label>
</div>
<button
className={style["main-form-button"]}
type="submit"
disabled={isSubmitting}
>
CADASTRE-SE
</button>
</Form>
)}
</Formik>
</section>
);
};
export { MainForm };

View File

@ -0,0 +1,79 @@
import React from "react";
import { NavLink } from "react-router-dom";
import classnames from "classnames";
import style from "../../main-content.module.scss";
const MainMenu = () => {
const activeClassName = style["selected"];
return (
<div className={style["main-content-list"]}>
<nav>
<ul className={style["teste"]}>
<li className={classnames(style["main-content-item"])}>
<NavLink
to="/sobre"
className={({ isActive }) =>
isActive ? activeClassName : undefined
}
>
Sobre
</NavLink>
</li>
<li className={classnames(style["main-content-item"])}>
<NavLink
to="/forma-de-pagamento"
className={({ isActive }) =>
isActive ? activeClassName : undefined
}
>
Forma de Pagamento
</NavLink>
</li>
<li className={classnames(style["main-content-item"])}>
<NavLink
to="/entrega"
className={({ isActive }) =>
isActive ? activeClassName : undefined
}
>
Entrega
</NavLink>
</li>
<li className={classnames(style["main-content-item"])}>
<NavLink
to="/troca-e-devolucao"
className={({ isActive }) =>
isActive ? activeClassName : undefined
}
>
Troca e Devolução
</NavLink>
</li>
<li className={classnames(style["main-content-item"])}>
<NavLink
to="/seguranca-e-privacidade"
className={({ isActive }) =>
isActive ? activeClassName : undefined
}
>
Segurança e Privacidade
</NavLink>
</li>
<li className={classnames(style["main-content-item"])}>
<NavLink
to="/contato"
className={({ isActive }) =>
isActive ? activeClassName : undefined
}
>
Contato
</NavLink>
</li>
</ul>
</nav>
</div>
);
};
export { MainMenu };

View File

@ -0,0 +1,46 @@
import React from "react";
import { MainMenu } from "./MainMenu";
import style from "../../main-content.module.scss";
const SegurancaEPrivacidade = () => {
return (
<section className={style["main-content-wrapper"]}>
<MainMenu />
<div className={style["main-content-text"]}>
<div className={style["main-content-text-wrapper"]}>
<h2>Segurança e Privacidade</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
</p>
<p>
Sed ut perspiciatis unde omnis iste natus error sit voluptatem
accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
quae ab illo inventore veritatis et quasi architecto beatae vitae
dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,
qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit,
sed quia non numquam eius modi tempora incidunt ut labore et dolore
magnam aliquam quaerat voluptatem.
</p>
<p>
Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis
suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis
autem vel eum iure reprehenderit qui in ea voluptate velit esse quam
nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo
voluptas nulla pariatur?
</p>
</div>
</div>
</section>
);
};
export { SegurancaEPrivacidade };

View File

@ -0,0 +1,46 @@
import React from "react";
import { MainMenu } from "./MainMenu";
import style from "../../main-content.module.scss";
const Sobre = () => {
return (
<section className={style["main-content-wrapper"]}>
<MainMenu />
<div className={style["main-content-text"]}>
<div className={style["main-content-text-wrapper"]}>
<h2>Sobre</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
</p>
<p>
Sed ut perspiciatis unde omnis iste natus error sit voluptatem
accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
quae ab illo inventore veritatis et quasi architecto beatae vitae
dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,
qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit,
sed quia non numquam eius modi tempora incidunt ut labore et dolore
magnam aliquam quaerat voluptatem.
</p>
<p>
Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis
suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis
autem vel eum iure reprehenderit qui in ea voluptate velit esse quam
nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo
voluptas nulla pariatur?
</p>
</div>
</div>
</section>
);
};
export { Sobre };

View File

@ -0,0 +1,46 @@
import React from "react";
import { MainMenu } from "./MainMenu";
import style from "../../main-content.module.scss";
const TrocaEDevolucao = () => {
return (
<section className={style["main-content-wrapper"]}>
<MainMenu />
<div className={style["main-content-text"]}>
<div className={style["main-content-text-wrapper"]}>
<h2>Troca e Devolução</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
</p>
<p>
Sed ut perspiciatis unde omnis iste natus error sit voluptatem
accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
quae ab illo inventore veritatis et quasi architecto beatae vitae
dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,
qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit,
sed quia non numquam eius modi tempora incidunt ut labore et dolore
magnam aliquam quaerat voluptatem.
</p>
<p>
Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis
suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis
autem vel eum iure reprehenderit qui in ea voluptate velit esse quam
nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo
voluptas nulla pariatur?
</p>
</div>
</div>
</section>
);
};
export { TrocaEDevolucao };

View File

@ -0,0 +1,167 @@
@use "../../../variables.module.scss";
.main-form-container {
width: 100%;
height: 650px;
@media screen and (min-width: 2500px) {
height: 900px;
}
.main-form {
width: 100%;
height: 600px;
display: flex;
flex-direction: column;
.main-form-item-wrapper {
display: flex;
flex-direction: column;
position: relative;
label {
font-weight: 400;
font-size: 14px;
line-height: 16px;
color: variables.$color-black4;
margin-left: 15px;
margin-bottom: 12px;
@media screen and (min-width: 2500px) {
font-size: 28px;
line-height: 33px;
}
}
input {
padding: 15px 20px;
border: 1px solid variables.$color-black4;
border-radius: 25px;
margin-bottom: 12px;
@media screen and (min-width: 2500px) {
font-size: 28px;
line-height: 33px;
}
}
input::placeholder {
font-weight: 400;
font-size: 14px;
line-height: 16px;
color: variables.$color-grey6;
@media screen and (min-width: 2500px) {
font-size: 28px;
line-height: 33px;
}
}
.form-feedback {
position: absolute;
right: 20px;
bottom: 60px;
font-weight: 400;
font-size: 12px;
line-height: 14px;
color: variables.$color-red;
@media screen and (min-width: 2500px) {
font-size: 24px;
line-height: 28px;
bottom: 80px;
}
}
}
.main-form-checkbox {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 12px;
margin-top: 12px;
label {
display: flex;
}
input {
margin-left: 4.28px;
@media screen and (min-width: 2500px) {
width: 35.15px;
height: 35.15px;
}
}
.main-form-dot,
.main-form-span {
font-weight: 400;
font-size: 14px;
line-height: 16px;
@media screen and (min-width: 2500px) {
font-size: 28px;
line-height: 33px;
}
}
.main-form-dot {
color: variables.$color-red;
}
.main-form-span {
color: variables.$color-black4;
text-decoration: underline;
}
.form-feedback {
position: absolute;
right: 18%;
font-weight: 400;
font-size: 12px;
line-height: 14px;
color: variables.$color-red;
@media screen and (min-width: 2500px) {
font-size: 24px;
line-height: 28px;
right: 15%;
}
@media screen and (max-width: 360px) {
display: flex;
}
}
}
.main-form-button {
font-style: normal;
font-weight: 400;
font-size: 16px;
line-height: 19px;
letter-spacing: 0.05em;
color: variables.$color-white;
outline: 0;
border: 0;
padding: 17px 0;
background: variables.$color-black;
border-radius: 25px;
@media screen and (min-width: 2500px) {
font-size: 32px;
line-height: 38px;
}
@media screen and (max-width: 360px) {
margin-top: 4px;
}
}
}
}

View File

@ -0,0 +1,151 @@
@use "../variables.module.scss";
.newsletter-container {
width: 100%;
height: 104px;
border-top: 1px solid variables.$color-black;
background: variables.$color-white;
@media screen and (min-width: 2500px) {
height: 141.24px;
}
@media screen and (max-width: 1024px) {
height: auto;
}
.newsletter-form {
width: 100%;
}
.newsletter-wrapper {
width: 36.40625%;
padding: 16px 0;
display: flex;
align-items: flex-start;
justify-content: flex-start;
flex-direction: column;
margin: 0 auto;
@media screen and (max-width: 1024px) {
width: 100%;
padding: 16px;
}
.newsletter-title {
font-weight: 500;
font-size: 18px;
line-height: 21px;
letter-spacing: 0.05em;
text-transform: uppercase;
color: variables.$color-black3;
margin-bottom: 8px;
@media screen and (min-width: 2500px) {
font-size: 36px;
line-height: 42px;
}
@media screen and (max-width: 1024px) {
font-size: 14px;
line-height: 16px;
margin-bottom: 16px;
}
}
.newsletter-form-wrapper {
display: flex;
justify-content: flex-start;
gap: 8px;
@media screen and (max-width: 1024px) {
display: flex;
flex-direction: column;
gap: 16px;
}
.newsletter-input {
position: relative;
input {
width: 100%;
min-width: 340px;
height: 42px;
padding: 13px 16px;
border: 1px solid variables.$color-grey2;
border-radius: 4px;
@media screen and (min-width: 2500px) {
min-width: 668px;
font-size: 28px;
line-height: 33px;
}
@media screen and (max-width: 1024px) {
min-width: 100%;
}
}
input::placeholder {
font-weight: 400;
font-size: 14px;
line-height: 16px;
color: variables.$color-grey;
@media screen and (min-width: 2500px) {
font-size: 28px;
line-height: 33px;
}
}
.form-feedback {
position: absolute;
right: -30px;
bottom: 45px;
font-weight: 400;
font-size: 12px;
line-height: 14px;
color: variables.$color-red;
@media screen and (min-width: 2500px) {
font-size: 24px;
line-height: 28px;
right: -95px;
}
}
}
.newsletter-button {
width: 126px;
height: 42px;
padding: 14px 20px;
outline: 0;
border: 0;
background: variables.$color-black;
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
border-radius: 4px;
font-weight: 700;
font-size: 12px;
line-height: 14px;
text-align: center;
letter-spacing: 0.05em;
color: variables.$color-white;
@media screen and (min-width: 2500px) {
width: 246px;
font-size: 24px;
}
@media screen and (max-width: 1024px) {
width: 100%;
}
}
}
}
}

39
src/globals.module.scss Normal file
View File

@ -0,0 +1,39 @@
// body {
// margin: 0;
// font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
// 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
// sans-serif;
// -webkit-font-smoothing: antialiased;
// -moz-osx-font-smoothing: grayscale;
// }
// code {
// font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
// monospace;
// }
@use "variables.module.scss";
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
body {
font-family: variables.$font-primary;
}
ul {
list-style: none;
}
li {
list-style-type: none;
}
img {
display: block;
width: 100%;
object-fit: contain;
}

13
src/index.tsx Normal file
View File

@ -0,0 +1,13 @@
import React from "react";
import ReactDOM from "react-dom/client";
import "./globals.module.scss";
import { Home } from "./pages/Home";
const root = ReactDOM.createRoot(
document.getElementById("root") as HTMLElement
);
root.render(
<React.StrictMode>
<Home />
</React.StrictMode>
);

23
src/pages/Home.tsx Normal file
View File

@ -0,0 +1,23 @@
import React from "react";
import { HeaderTop } from "../components/HeaderTop";
import { HeaderBottom } from "../components/HeaderBottom";
import { FooterBottom } from "../components/FooterBottom";
import { FooterTop } from "../components/FooterTop";
import { Newsletter } from "../components/Newsletter";
import { MainContent } from "../components/MainContent";
function Home() {
return (
<div className="App">
<HeaderTop />
<HeaderBottom />
<MainContent />
<Newsletter />
<FooterTop />
<FooterBottom />
</div>
);
}
export { Home };

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

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

View File

@ -0,0 +1,37 @@
import * as Yup from "yup";
const getFormatedDate = (currentDate: string) => {
return currentDate.split("/").reverse().join("-");
};
const getFormatedCPF = (currentCPF: string) => {
return currentCPF.split(".").reverse().join("-");
};
const getFormatedTel = (currentTel: string) => {
return currentTel.split("()").reverse().join("-");
};
const getFormatedInst = (currentInst: string) => {
return currentInst.split("@").join("@");
};
export default Yup.object().shape({
name: Yup.string()
.min(2, "Nome deve conter pelo menos 2 letras!")
.required("*Campo Obrigatório"),
email: Yup.string().required("*Campo Obrigatório").email("Email inválido"),
cpf: Yup.string()
.min(11, getFormatedCPF("111.111.111-11"))
.required("*Campo Obrigatório"),
nowDate: Yup.date()
.max(8, getFormatedDate(new Date().toLocaleDateString()))
.required("*Campo Obrigatório"),
tel: Yup.string()
.required("*Campo Obrigatório")
.min(11, getFormatedTel("(22)99999-9999")),
inst: Yup.string().min(3, getFormatedInst("@seuuser")).notRequired(),
check: Yup.boolean()
.oneOf([true], "Você deve aceitar os termos!")
.required("*Campo Obrigatório"),
});

View File

@ -0,0 +1,7 @@
import * as Yup from "yup";
export default Yup.object().shape({
newsletter: Yup.string()
.required("*Campo Obrigatório")
.email("Email inválido"),
});

25
src/variables.module.scss Normal file
View File

@ -0,0 +1,25 @@
//fonts
@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap");
$font-primary: "Roboto", sans-serif;
//colors
$color-black: #000000;
$color-black2: #292929;
$color-black3: #303030;
$color-black4: #100d0e;
$color-white: #ffffff;
$color-grey: #c4c4c4;
$color-grey2: #e5e5e5;
$color-grey3: #7d7d7d;
$color-grey4: #f2f2f2;
$color-grey5: #c6c6c6;
$color-grey6: #b9b7b7;
$color-red: #ff0000;
$color-green: #008000;

26
tsconfig.json Normal file
View File

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