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

Reviewed-on: #1
This commit is contained in:
Marcello Rodrigues Martins 2023-01-21 01:29:23 +00:00
commit a4e234434f
60 changed files with 11503 additions and 73 deletions

23
.gitignore vendored Normal file
View File

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

View File

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

93
README.old.md Normal file
View File

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

49
package.json Normal file
View File

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

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

46
public/index.html Normal file
View File

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
<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>

BIN
public/logo192.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
public/logo512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

25
public/manifest.json Normal file
View File

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

3
public/robots.txt Normal file
View File

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

5
src/App.css Normal file
View File

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

9
src/App.test.tsx Normal file
View File

@ -0,0 +1,9 @@
import React from 'react';
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});

45
src/App.tsx Normal file
View File

@ -0,0 +1,45 @@
import "./App.css";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import Header from "./components/Header";
import NewsLetter from "./components/newsLetter";
import Institutional from "./pages/Institutional";
import Footer from "./components/Footer";
import FixedIcons from "./components/FixedIcon";
import Up from "./assets/svg/Up.svg";
import Wpp from "./assets/svg/Wpp.svg";
const router = createBrowserRouter([
{
path: "/",
element: <Institutional />,
},
]);
function App() {
return (
<div className="App">
<Header />
<RouterProvider router={router} />
<NewsLetter />
<FixedIcons
icons={[
{
action: () => {
window.scrollTo({ top: 0, behavior: "smooth" });
},
imgUrl: Up,
},
{
action: () => {
window.open("https://api.whatsapp.com/send?phone=552225215720");
},
imgUrl: Wpp,
},
]}
/>
<Footer />
</div>
);
}
export default App;

BIN
src/assets/img/Amex.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
src/assets/img/Boleto.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
src/assets/img/Elo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/assets/img/Hiper.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/assets/img/Master.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/assets/img/Paypal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
src/assets/img/Visa.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
src/assets/img/Vtexpci.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
src/assets/img/logoM3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

3
src/assets/svg/Arrow.svg Normal file
View File

@ -0,0 +1,3 @@
<svg width="10" height="16" viewBox="0 0 10 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.9418 7.03685L2.22543 0.320703C1.79819 -0.106746 1.10549 -0.106746 0.678456 0.320703C0.251387 0.747771 0.251387 1.44043 0.678456 1.86747L6.6214 7.81023L0.678629 13.7528C0.25156 14.18 0.25156 14.8726 0.678629 15.2997C1.1057 15.7269 1.79836 15.7269 2.2256 15.2997L8.94197 8.58344C9.1555 8.3698 9.26215 8.0901 9.26215 7.81026C9.26215 7.53029 9.1553 7.25038 8.9418 7.03685Z" fill="#C4C4C4"/>
</svg>

After

Width:  |  Height:  |  Size: 502 B

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

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

After

Width:  |  Height:  |  Size: 638 B

View File

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

After

Width:  |  Height:  |  Size: 647 B

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

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M30.9231 14.8352L28.692 12.6041L16.4148 0.326808C15.9789 -0.108936 15.2724 -0.108936 14.8366 0.326808L2.55921 12.6041L0.326997 14.8364C-0.101226 15.2798 -0.088997 15.9863 0.354399 16.4146C0.786939 16.8323 1.47263 16.8323 1.90517 16.4146L2.23105 16.0864V30.1339C2.23105 30.7503 2.73075 31.25 3.34719 31.25H27.9018C28.5183 31.25 29.018 30.7503 29.018 30.1339V16.0864L29.345 16.4134C29.7884 16.8417 30.4949 16.8294 30.9231 16.386C31.3409 15.9535 31.3409 15.2677 30.9231 14.8352ZM18.9729 29.0178H12.2762V20.0888H18.9729V29.0178ZM26.7857 29.0178H21.2051V18.9727C21.2051 18.3563 20.7054 17.8566 20.089 17.8566H11.1601C10.5436 17.8566 10.0439 18.3563 10.0439 18.9727V29.0178H4.46333V13.8542L15.6245 2.69296L26.7857 13.8542V29.0178Z" fill="#C4C4C4"/>
</svg>

After

Width:  |  Height:  |  Size: 855 B

View File

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

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

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

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,4 @@
<svg width="55" height="30" viewBox="0 0 55 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M32.0512 10.2627C31.1932 9.1249 30.1157 8.17871 28.8851 7.48256C27.6545 6.78641 26.297 6.35511 24.8966 6.21531C23.4961 6.07551 22.0824 6.23018 20.7429 6.66976C19.4033 7.10934 18.1664 7.82449 17.1085 8.77102L16.1946 8.06248C9.91595 3.55022 1.12401 7.38191 0.301479 15.1106C0.0512614 18.834 -0.0127963 22.5679 0.109555 26.298C0.0893703 26.7766 0.165844 27.2544 0.33423 27.7017C0.502615 28.1489 0.759319 28.5561 1.08841 28.8979C1.41749 29.2397 1.81194 29.5089 2.24727 29.6887C2.68259 29.8685 3.1495 29.9552 3.61902 29.9432C4.07853 29.9412 4.53289 29.8444 4.9548 29.6587C5.37671 29.473 5.75747 29.2022 6.07418 28.8626C6.39089 28.523 6.63702 28.1215 6.79779 27.6824C6.95855 27.2433 7.03062 26.7756 7.00967 26.3073C7.00967 23.6223 7.00967 20.9373 7.00967 18.243C7.00228 17.4443 7.05729 16.6462 7.17418 15.8564C7.3216 15.048 7.76359 14.3265 8.41128 13.837C9.05897 13.3476 9.86432 13.1264 10.6654 13.218C11.4484 13.2782 12.183 13.6277 12.7315 14.201C13.28 14.7742 13.6047 15.5319 13.6448 16.3319C13.6905 17.3201 13.6448 18.3083 13.6448 19.2965C13.6448 21.7018 13.6448 24.1071 13.6448 26.5124C13.6354 27.2101 13.8388 27.8934 14.2268 28.468C14.6149 29.0425 15.1684 29.4799 15.8108 29.7195C18.1413 30.7077 20.5175 28.9736 20.5632 26.242C20.5632 23.063 20.5632 19.8839 20.6545 16.7048C20.6853 15.9363 20.9156 15.1899 21.3217 14.5419C21.7084 13.9705 22.2689 13.5449 22.9164 13.3309C23.564 13.1169 24.2626 13.1264 24.9043 13.3579C25.6282 13.5648 26.261 14.0177 26.6981 14.6416C27.1352 15.2656 27.3504 16.023 27.3079 16.7887C27.3079 20.0051 27.3079 23.2214 27.3079 26.4378C27.3079 26.8994 27.397 27.3564 27.5702 27.7829C27.7433 28.2093 27.9971 28.5967 28.3171 28.9231C28.637 29.2495 29.0168 29.5084 29.4349 29.685C29.8529 29.8616 30.3009 29.9525 30.7534 29.9525C31.2059 29.9525 31.6539 29.8616 32.0719 29.685C32.49 29.5084 32.8698 29.2495 33.1897 28.9231C33.5097 28.5967 33.7635 28.2093 33.9366 27.7829C34.1098 27.3564 34.1989 26.8994 34.1989 26.4378C34.1989 23.1469 34.1989 19.9118 34.1989 16.5742C34.2051 14.2829 33.4478 12.0573 32.0512 10.2627Z" fill="white"/>
<path d="M49.3155 12.1271L48.228 11.6703C49.3064 10.8126 50.33 10.0761 51.2439 9.23706C52.0559 8.58492 52.7568 7.80059 53.3185 6.91567C54.9636 3.78319 52.6422 0.137951 48.9591 0.0540455C45.5593 0.00743122 42.1686 0.00743122 38.7689 0.00743122C38.3524 -0.0219252 37.9346 0.0388675 37.5428 0.185821C37.151 0.332775 36.7941 0.562568 36.4955 0.860126C36.1969 1.15768 35.9634 1.51628 35.8102 1.91239C35.657 2.30851 35.5877 2.73318 35.6067 3.15856C35.566 3.59182 35.6181 4.02893 35.7595 4.4396C35.9009 4.85026 36.1281 5.22465 36.4254 5.53682C36.7228 5.84899 37.0831 6.09148 37.4814 6.24747C37.8797 6.40346 38.3066 6.46922 38.7323 6.4402C40.3956 6.4402 42.059 6.4402 43.7223 6.4402C44.0056 6.53343 44.2981 6.53343 44.8464 6.53343C42.5891 8.398 40.5053 10.1693 38.449 11.922C37.1238 13.0408 36.7217 14.2621 37.1878 15.6512C37.4353 16.3368 37.8967 16.9207 38.5009 17.3131C39.1052 17.7055 39.819 17.8848 40.5327 17.8234C42.2966 17.8234 44.0696 17.8234 45.8335 17.8234C46.2291 17.7488 46.6359 17.7639 47.0251 17.8676C47.4143 17.9714 47.7764 18.1612 48.0856 18.4237C48.3948 18.6862 48.6437 19.0148 48.8144 19.3864C48.9852 19.7579 49.0737 20.1633 49.0737 20.5736C49.0737 20.984 48.9852 21.3894 48.8144 21.7609C48.6437 22.1325 48.3948 22.4611 48.0856 22.7236C47.7764 22.9861 47.4143 23.1759 47.0251 23.2797C46.6359 23.3834 46.2291 23.3985 45.8335 23.3239C43.5487 23.3239 41.2639 23.3239 38.9791 23.3239C38.1781 23.3681 37.4243 23.7237 36.8726 24.3177C36.321 24.9117 36.0135 25.6988 36.0135 26.517C36.0135 27.3352 36.321 28.1223 36.8726 28.7162C37.4243 29.3102 38.1781 29.6659 38.9791 29.71C41.3644 29.71 43.7589 29.71 46.1442 29.71C48.2396 29.6558 50.253 28.8685 51.847 27.4801C53.4411 26.0917 54.5188 24.1865 54.8996 22.084C55.2032 20.0254 54.817 17.9226 53.8037 16.1157C52.7903 14.3088 51.209 12.9035 49.3155 12.1271Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

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

After

Width:  |  Height:  |  Size: 1.2 KiB

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

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

After

Width:  |  Height:  |  Size: 887 B

View File

@ -0,0 +1,7 @@
<svg width="86" height="30" viewBox="0 0 86 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M61.6881 11.2328H58.6747V21.4794C58.6747 21.6712 58.5088 21.8355 58.3153 21.8355H55.993C55.7995 21.8355 55.6336 21.6712 55.6336 21.4794V11.2328H52.5926C52.5096 11.2328 52.399 11.2054 52.3437 11.1506C52.2884 11.0958 52.2332 11.0136 52.2332 10.904V9.09582C52.2332 9.01363 52.2608 8.90404 52.3437 8.84924C52.399 8.79445 52.5096 8.73966 52.5926 8.76705H61.6881C61.8817 8.76705 62.0475 8.90404 62.0475 9.09582V10.904C62.0475 11.0958 61.8817 11.2328 61.6881 11.2328Z" fill="white"/>
<path d="M71.3916 21.7535C70.2029 21.9179 68.9864 22.0001 67.7977 21.9727C65.503 21.9727 63.4849 21.3974 63.4849 18.1919V12.3563C63.4849 9.15079 65.5307 8.60285 67.8253 8.60285C69.0141 8.57545 70.2029 8.65764 71.3916 8.82203C71.6405 8.84942 71.751 8.95901 71.751 9.17819V10.822C71.751 11.0138 71.5852 11.1782 71.3916 11.1782H67.6594C66.83 11.1782 66.5259 11.4522 66.5259 12.3837V13.9727H71.2534C71.4469 13.9727 71.6128 14.1371 71.6128 14.3289V16.0001C71.6128 16.1919 71.4469 16.3563 71.2534 16.3563H66.5259V18.2193C66.5259 19.1234 66.83 19.4248 67.6594 19.4248H71.3916C71.5852 19.4248 71.751 19.5892 71.751 19.7809V21.4248C71.751 21.6166 71.6405 21.7261 71.3916 21.7535Z" fill="white"/>
<path d="M84.7727 21.8352H81.9528C81.7593 21.8626 81.5658 21.753 81.4828 21.5612L79.0223 17.7256L76.8106 21.479C76.7 21.6982 76.5618 21.8352 76.3683 21.8352H73.7419C73.6866 21.8352 73.6037 21.8352 73.5484 21.7804C73.4931 21.7256 73.4654 21.6708 73.4654 21.5886C73.4654 21.5338 73.4931 21.5064 73.4931 21.479L77.3359 15.1228L73.4378 9.09544C73.4102 9.06805 73.4102 9.01325 73.4102 8.98586C73.4102 8.84887 73.5484 8.73928 73.6866 8.76668H76.5895C76.783 8.76668 76.9212 8.93106 77.0318 9.09544L79.2988 12.6571L81.5105 9.09544C81.5934 8.90366 81.7593 8.79407 81.9528 8.76668H84.5792C84.7174 8.76668 84.8557 8.84887 84.8557 8.98586C84.8557 9.01325 84.828 9.06805 84.828 9.09544L80.9576 15.1776L84.9939 21.479C85.0215 21.5338 85.0492 21.5886 85.0492 21.6434C85.0215 21.753 84.911 21.8352 84.7727 21.8352Z" fill="white"/>
<path d="M48.0032 8.79443C47.865 8.79443 47.7544 8.87663 47.7268 9.01361L45.1557 18.4657C45.128 18.6574 45.0727 18.7396 44.9069 18.7396C44.741 18.7396 44.6857 18.6574 44.658 18.4657L42.0869 9.01361C42.0593 8.87663 41.9487 8.79443 41.8105 8.79443H39.267C39.1841 8.79443 39.1012 8.82183 39.0459 8.90402C38.9906 8.95882 38.9629 9.04101 38.9906 9.1232C38.9906 9.1232 42.1422 19.9725 42.1699 20.0821C42.5846 21.3698 43.6075 21.9999 44.9069 21.9999C46.1509 22.0547 47.2844 21.2602 47.6438 20.0821C47.6991 19.9451 50.7678 9.1232 50.7678 9.1232C50.7955 9.04101 50.7678 8.95882 50.7125 8.90402C50.6572 8.84923 50.5743 8.79443 50.4914 8.79443H48.0032Z" fill="white"/>
<path d="M33.6272 0H7.16989C6.20227 0 5.3176 0.520548 4.84761 1.31507C4.34998 2.13699 4.32234 3.15068 4.76468 3.9726L7.4187 8.9589H2.60828C2.00006 8.9589 1.41949 9.26027 1.08774 9.78082C0.755988 10.3014 0.755988 10.9589 1.03245 11.5068L9.54745 27.4521C9.85156 28.0274 10.4598 28.3836 11.0956 28.3836C11.7315 28.3836 12.3397 28.0274 12.6438 27.4521L14.9661 23.1233L17.8689 28.5753C18.3389 29.4521 19.2789 30 20.2741 30C21.2694 30 22.2094 29.4521 22.6794 28.5753L35.9495 3.83562C36.3918 3.0137 36.3642 2.0274 35.8666 1.26027C35.4242 0.465753 34.5395 0 33.6272 0ZM21.7947 10.4384L15.989 21.2329C15.7955 21.6164 15.4084 21.8356 14.9661 21.8356C14.5238 21.8356 14.1367 21.589 13.9432 21.2329L8.22044 10.5479C8.05456 10.2192 8.05456 9.83562 8.24809 9.50685C8.44161 9.17808 8.80101 8.9863 9.16041 8.9863H20.8824C21.2418 8.9863 21.5735 9.15069 21.7394 9.45205C21.9606 9.75342 21.9606 10.137 21.7947 10.4384Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

11
src/assets/svg/Wpp.svg Normal file
View File

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

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

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

After

Width:  |  Height:  |  Size: 846 B

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

@ -0,0 +1,12 @@
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_5537_970)">
<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.8462 21.5385C10.2132 21.5385 8.88464 22.867 8.88464 24.5C8.88464 26.133 10.2132 27.4615 11.8462 27.4615C13.4792 27.4615 14.8077 26.133 14.8077 24.5C14.8077 22.867 13.4792 21.5385 11.8462 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_5537_970">
<rect width="28" height="28" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

3
src/assets/svg/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

3
src/assets/svg/mais.svg Normal file
View File

@ -0,0 +1,3 @@
<svg width="8" height="9" viewBox="0 0 8 9" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.625 3.32031H7.79688V4.6875H4.625V8.28125H3.17188V4.6875H0V3.32031H3.17188V0H4.625V3.32031Z" fill="#303030"/>
</svg>

After

Width:  |  Height:  |  Size: 220 B

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

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

After

Width:  |  Height:  |  Size: 688 B

View File

@ -0,0 +1,39 @@
import styles from "./styles.module.scss";
import Exit from "../../assets/svg/Exit.svg";
import React, { useState } from "react";
export default function AsideMenu({
isMenuOpen,
setMenuOpen,
}: {
isMenuOpen: boolean;
setMenuOpen: React.Dispatch<React.SetStateAction<boolean>>;
}) {
return (
<div
className={`${styles.blackout} ${!isMenuOpen ? styles.invisible : ""}`}
onClick={() => {
setMenuOpen(!isMenuOpen);
}}
>
<div className={`${styles.container} ${!isMenuOpen ? styles.aside : ""}`}>
<div className={styles.buttonsTop}>
<button className={styles.buttonEntrar}>Entrar</button>
<button
onClick={() => {
setMenuOpen(false);
}}
className={styles.buttonExit}
>
<img src={Exit} alt="sair" />
</button>
</div>
<div className={styles.buttonsBottom}>
<button className={styles.secondButton}>CURSOS</button>
<button className={styles.secondButton}>SAIBA MAIS</button>
<button className={styles.secondButton}>INSTITUCIONAIS</button>
</div>
</div>
</div>
);
}

View File

@ -0,0 +1,70 @@
.blackout {
position: fixed;
inset: 0;
z-index: 1000;
background: rgba(69, 69, 69, 0.7);
.container {
position: absolute;
transition: 0.2s;
left: 0%;
right: 3.52%;
top: 0%;
bottom: 57.02%;
background: white;
.buttonsTop {
display: flex;
background: black;
height: 78px;
align-items: center;
justify-content: space-between;
.buttonEntrar {
border: 0;
background: black;
color: white;
font-family: "Roboto";
font-weight: 400;
font-size: 14px;
margin-left: 16px;
text-transform: uppercase;
}
.buttonExit {
background: black;
border: 0;
width: 15px;
float: right;
margin-right: 16px;
}
}
.buttonsBottom {
display: flex;
flex-direction: column;
margin-top: 31px;
gap: 12px;
.secondButton {
border: 0;
background: white;
font-family: "Roboto";
font-weight: 500;
font-size: 14px;
color: #c4c4c4;
text-align: start;
padding-left: 16px;
}
}
}
.aside {
transform: translateX(-100%);
}
}
.invisible {
visibility: hidden;
pointer-events: none;
}

View File

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

View File

@ -0,0 +1,38 @@
.fixedContainer {
position: fixed;
right: 16px;
bottom: 189px;
z-index: 10000;
display: flex;
flex-direction: column-reverse;
gap: 5px;
button {
border: 0;
width: 34px;
height: 34px;
background: none;
cursor: pointer;
img {
height: 100%;
}
}
}
@media screen and (min-width: 2500px) {
.fixedContainer {
bottom: 229px;
button {
width: 66px;
height: 66px;
}
}
}
@media screen and (max-width: 1024px) {
.fixedContainer {
bottom: 29px;
}
}

View File

@ -0,0 +1,103 @@
import styles from "./styles.module.scss";
import masterCardImg from "../../assets/img/Master.png";
import visaImg from "../../assets/img/Visa.png";
import amexImg from "../../assets/img/Amex.png";
import eloImg from "../../assets/img/Elo.png";
import hiperCardImg from "../../assets/img/Hiper.png";
import payPalImg from "../../assets/img/Paypal.png";
import boletoImg from "../../assets/img/Boleto.png";
import vtexPCI from "../../assets/img/Vtexpci.png";
import vtexSvg from "../../assets/svg/Vtexlogo.svg";
import M3Svg from "../../assets/svg/M3logo.svg";
import facebookSvg from "../../assets/svg/Facebooklogo.svg";
import instagramSvg from "../../assets/svg/Instagramlogo.svg";
import twitterSvg from "../../assets/svg/Twitterlogo.svg";
import youtubeSvg from "../../assets/svg/Youtubelogo.svg";
import linkedinSvg from "../../assets/svg/Linkedinlogo.svg";
import mais from "../../assets/svg/mais.svg";
export default function Footer() {
return (
<footer>
<div className={styles.footerTop}>
<div className={styles.menuList}>
<div>
<div className={styles.menuH2}>
<h2>INSTITUCIONAL</h2>
<button className={styles.buttonPlus}>
<img src={mais} alt="mais" />
</button>
</div>
<a>Quem Somos</a>
<a>Política de Privacidade</a>
<a>Segurança</a>
<a>Seja um Revendedor</a>
</div>
<div>
<div className={styles.menuH2}>
<h2>DÚVIDAS</h2>
<button className={styles.buttonPlus}>
<img src={mais} alt="mais" />
</button>
</div>
<a>Entrega</a>
<a>Pagamento</a>
<a>Troca e Devoluções</a>
<a>Dúvidas Frequentes</a>
</div>
<div>
<div className={styles.menuH2}>
<h2>FALE CONOSCO</h2>
<button className={styles.buttonPlus}>
<img src={mais} alt="mais" />
</button>
</div>
<a>Atendimento Ao Consumidor</a>
<a>(11) 4159 9504</a>
<a>Atendimento Online</a>
<a>(11) 99433-8825</a>
</div>
</div>
<div className={styles.redesSociais}>
<div className={styles.redesSociaisSvg}>
<img src={facebookSvg} alt="logo do facebook" />
<img src={instagramSvg} alt="logo do instagram" />
<img src={twitterSvg} alt="logo do twitter" />
<img src={youtubeSvg} alt="logo do youtube" />
<img src={linkedinSvg} alt="logo do linkedin" />
</div>
<div>
<p>www.loremipsum.com</p>
</div>
</div>
</div>
<div className={styles.footerBottom}>
<p>
Lorem Ipsum Dolor Sit Amet, Consectetur Adipiscing <br /> Elit, Sed Do
Eiusmod Tempor
</p>
<div className={styles.pagamentos}>
<div className={styles.bandeiras}>
<img src={masterCardImg} alt="Bandeira MasterCard" />
<img src={visaImg} alt="Bandeira Visa" />
<img src={amexImg} alt="Bandeira AmericanExpress" />
<img src={eloImg} alt="Bandeira Elo" />
<img src={hiperCardImg} alt="Bandeira HiperCard" />
<img src={payPalImg} alt="Bandeira PayPal" />
<img src={boletoImg} alt="Bandeira Boleto" />
</div>
<span className={styles.linha}></span>
<div className={styles.certificado}>
<img src={vtexPCI} alt="Certificado Vtex" />
</div>
</div>
<div className={styles.logos}>
<p>Powered By</p>
<img src={vtexSvg} alt="vtex logo" />
<p>Developed By</p>
<img src={M3Svg} alt="M3 logo" />
</div>
</div>
</footer>
);
}

View File

@ -0,0 +1,197 @@
.footerTop {
display: flex;
justify-content: space-between;
margin: 50px 7.81vw;
gap: 12.34vw;
.menuList {
display: flex;
gap: 121px;
h2 {
font-weight: 500;
font-weight: bold;
font-size: 14px;
line-height: 16px;
display: flex;
justify-content: flex-start;
}
.buttonPlus {
display: none;
border: 0;
background: white;
}
a {
font-size: 12px;
white-space: nowrap;
display: flex;
justify-content: flex-start;
}
> div {
display: flex;
flex-direction: column;
gap: 12px;
}
}
.redesSociais {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 12px;
p {
font-weight: 400;
font-size: 14px;
line-height: 16px;
}
}
.redesSociaisSvg {
display: flex;
gap: 0.78vw;
img {
width: 2.73vw;
}
}
}
.footerBottom {
justify-content: space-between;
background-color: #000000;
display: flex;
align-items: center;
min-height: 64px;
padding: 0 7.81%;
p {
white-space: nowrap;
color: #ffffff;
font-weight: 400;
font-size: 0.78vw;
line-height: 0.93vw;
width: 18.28vw;
text-align: left;
}
.pagamentos {
display: flex;
align-items: center;
gap: 0.93vw;
.bandeiras {
display: flex;
justify-content: center;
align-items: center;
gap: 0.93vw;
margin-left: 8.63vw;
img {
width: 2.81vw;
}
}
.linha {
border-left: solid 1px #c4c4c4;
height: 24px;
}
.certificado {
display: flex;
justify-content: center;
align-items: center;
img {
width: 4.27vw;
}
}
}
.logos {
margin-left: 8.63vw;
gap: 1.02vw;
display: flex;
margin-right: 7.81vw;
p {
white-space: nowrap;
width: unset;
display: flex;
justify-content: flex-end;
align-items: center;
}
}
}
@media screen and (max-width: 1024px) {
.footerTop {
display: flex;
flex-direction: column;
gap: 12px;
margin: 24px 16px 24px 16px;
.menuList {
display: flex;
flex-direction: column;
gap: 12px;
.menuH2 {
display: flex;
flex-direction: row;
justify-content: space-between;
.buttonPlus {
display: flex;
}
}
a {
display: none;
}
}
}
.footerBottom {
flex-direction: column;
align-items: flex-start;
padding-left: 16px;
gap: 15px;
.pagamentos {
margin-top: 15px;
order: -1;
.bandeiras {
margin-left: unset;
}
}
.logos {
margin-left: unset;
}
}
}
@media screen and (max-width: 375px) {
.footerBottom {
padding: 0;
.pagamentos {
.bandeiras {
gap: 11px;
img {
max-width: 30px;
width: 100%;
height: auto;
}
}
.certificado {
gap: 11px;
img {
max-width: 45px;
width: 100%;
height: auto;
}
}
}
}
}

View File

@ -0,0 +1,44 @@
import styles from "./styles.module.scss";
import Logo from "../../assets/svg/logoM3.svg";
import Lupa from "../../assets/svg/lupa.svg";
import Cart from "../../assets/svg/cart.svg";
import Menu from "../../assets/svg/menu.svg";
import AsideMenu from "../AsideMenu";
import { useState } from "react";
export default function Header() {
const [isMenuOpen, setMenuOpen] = useState(false);
return (
<>
<AsideMenu isMenuOpen={isMenuOpen} setMenuOpen={setMenuOpen} />
<header className={styles.Header}>
<div className={styles.firstDiv}>
<button
className={styles.menuHamburguer}
onClick={() => {
setMenuOpen(true);
}}
>
<img src={Menu} alt="menu" />
</button>
<img className={styles.logo} src={Logo} alt="logo m3" />
<div className={styles.searchDiv}>
<input type="text" placeholder="Buscar..."></input>
<img src={Lupa} alt="lupa" />
</div>
<div className={styles.headerButton}>
<button className={styles.buttonEntrar}>Entrar</button>
<button className={styles.cartButton}>
<img src={Cart} alt="carrinho de compra" />
</button>
</div>
</div>
</header>
<div className={styles.secondDiv}>
<button className={styles.secondHeaderButton}>cursos</button>
<button className={styles.secondHeaderButton}>saiba mais</button>
<button className={styles.secondHeaderButton}>institucionais</button>
</div>
</>
);
}

View File

@ -0,0 +1,180 @@
.Header {
background: black;
padding: 22px 0;
color: white;
.firstDiv {
display: flex;
justify-content: space-between;
.searchDiv {
width: 20.63vw;
background: white;
border-radius: 5px;
border: 2px solid #f2f2f2;
position: relative;
display: flex;
align-items: center;
justify-content: center;
gap: 3.79%;
input {
display: flex;
font-size: 14px;
height: 32px;
border: 0;
width: 100%;
padding: 8px 44px 8px 16px;
&::placeholder {
color: #c6c6c6;
}
}
img {
cursor: pointer;
display: flex;
// width: 1.41vw;
position: absolute;
right: 20px;
}
}
.headerButton {
display: flex;
gap: 55px;
margin-right: 100px;
height: 28px;
.buttonEntrar {
cursor: pointer;
justify-content: center;
text-transform: uppercase;
align-items: center;
display: flex;
font-weight: 400;
font-size: 14px;
color: white;
background: black;
height: 28px;
border: 0;
}
.cartButton {
cursor: pointer;
background: black;
height: 28px;
border: 0;
img {
display: flex;
height: 28px;
}
}
}
.logo {
display: flex;
margin-left: 100px;
width: 10.63vw;
}
.menuHamburguer {
border: 0;
background: black;
padding-left: 16px;
display: none;
}
}
}
.secondDiv {
background: black;
margin-top: 1px;
display: flex;
flex-direction: row;
padding: 14px 0 14px 7.81vw;
gap: 55px;
.secondHeaderButton {
background: black;
color: white;
border: 0;
text-transform: uppercase;
font-weight: 500;
font-size: 14px;
cursor: pointer;
}
}
@media screen and (max-width: 1024px) {
.Header {
height: 139px;
.menuHamburguer {
display: flex !important;
}
.logo {
width: 13.28vw !important;
margin-left: 0 !important;
}
.buttonEntrar {
display: none !important;
}
.searchDiv {
width: 96.88% !important;
position: absolute !important;
top: 78px !important;
left: 16px !important;
right: 16px !important;
}
.headerButton {
margin-right: 16px !important;
}
}
.secondDiv {
display: none !important;
}
}
@media screen and (min-width: 2500px) {
.searchDiv {
height: 57px !important;
input {
font-size: 28px !important;
height: 57px !important;
}
img {
width: 1.41vw !important;
}
}
.headerButton {
height: 54px !important;
.buttonEntrar {
font-size: 28px !important;
height: 54px !important;
}
.cartButton {
img {
height: 54px !important;
}
}
}
.secondDiv {
padding-left: 100px !important;
.secondHeaderButton {
font-size: 28px !important;
}
}
}

View File

@ -0,0 +1,23 @@
import styles from "./styles.module.scss";
export default function newsLetter() {
return (
<>
<footer className={styles.newsLetter}>
<div className={styles.firstDivNews}>
{/* <div className={styles.containerNews}> */}
<h2 className={styles.firstH2}>assine nossa newsletter</h2>
<div className={styles.secondDivNews}>
<input
type="email"
placeholder="E-mail"
className={styles.newsInput}
/>
<button className={styles.newsButton}>enviar</button>
</div>
{/* </div> */}
</div>
</footer>
</>
);
}

View File

@ -0,0 +1,103 @@
.newsLetter {
// background-color: black;
border-width: 1px 0px;
border-style: solid;
border-color: #000000;
width: 100%;
display: flex;
justify-content: center;
.firstDivNews {
width: 37.03%;
display: flex;
flex-direction: column;
.firstH2 {
padding: 16px 0 8px;
display: flex;
justify-content: center;
margin: auto;
text-transform: uppercase;
font-weight: 500;
font-size: 18px;
letter-spacing: 0.05em;
color: #303030;
margin-left: 0;
}
.secondDivNews {
display: flex;
justify-content: center;
gap: 8px;
padding-bottom: 16px;
.newsInput {
width: 71.73%;
font-weight: 400;
font-size: 14px;
padding: 11px 16px;
max-height: 42px;
border: 1px solid #e5e5e5;
border-radius: 4px;
&::placeholder {
color: #c4c4c4;
}
}
.newsButton {
width: 26.58%;
min-height: 42px;
background: #000000;
text-transform: uppercase;
color: white;
font-weight: 700;
font-size: 12px;
border: 0;
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
border-radius: 4px;
cursor: pointer;
}
}
}
}
@media screen and (max-width: 1024px) {
.firstDivNews {
width: 96.88% !important;
.firstH2 {
font-size: 14px;
}
.secondDivNews {
flex-direction: column;
width: 100%;
.newsInput {
width: 100% !important;
}
.newsButton {
width: 100% !important;
}
}
}
}
@media screen and (min-width: 2500px) {
.firstH2 {
font-size: 36px !important;
}
.newsInput {
max-height: unset !important;
height: 59px;
font-size: 28px !important;
}
.newsButton {
height: 59px;
font-size: 24px !important;
}
}

11
src/index.css Normal file
View File

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

19
src/index.tsx Normal file
View File

@ -0,0 +1,19 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
const root = ReactDOM.createRoot(
document.getElementById('root') as HTMLElement
);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

1
src/logo.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

3
src/pages/Home/index.tsx Normal file
View File

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

View File

@ -0,0 +1,275 @@
import styles from "./styles.module.scss";
import Home from "../../assets/svg/Home.svg";
import Arrow from "../../assets/svg/Arrow.svg";
import { useState } from "react";
import { Formik, Form, Field } from "formik";
import * as yup from "yup";
import "yup-phone";
import { cpf } from "cpf-cnpj-validator";
export default function Institutional() {
const [currTab, setCurrTab] = useState(0);
const [hasSubmited, setSubmited] = useState(false);
const validationSchema = yup.object().shape({
name: yup
.string()
.min(3, "*Nome muito curto")
.required("*Campo Obrigatório"),
email: yup.string().email("*Email inválido").required("*Campo Obrigatório"),
CPF: yup
.string()
.required("*Campo Obrigatório")
.test("Válida CPF", "*CPF inválido", (CPF = "") =>
cpf.isValid(CPF, true)
),
birthDate: yup.string().required("*Campo Obrigatório"),
phone: yup
.string()
.required("*Campo Obrigatório")
.phone("BR", false, "*Telefone inválido"),
instagram: yup.string(),
check: yup.boolean().oneOf([true]).required(),
});
return (
<>
<div className={styles.homeDiv}>
<img className={styles.home} src={Home} alt="casinha" />
<img className={styles.arrow} src={Arrow} alt="seta para direita" />
<p className={styles.textHome}>INSTITUCIONAL</p>
</div>
<h1 className={styles.h1Institucional}>INSTITUCIONAL</h1>
<div className={styles.layoutPage}>
<div className={styles.buttonDiv}>
<button
className={`${styles.buttonLayout} ${
currTab === 0 ? styles.buttonActive : ""
}`}
onClick={() => {
setCurrTab(0);
}}
>
Sobre
</button>
<button
className={`${styles.buttonLayout} ${
currTab === 1 ? styles.buttonActive : ""
}`}
onClick={() => {
setCurrTab(1);
}}
>
Forma de Pagamento
</button>
<button
className={`${styles.buttonLayout} ${
currTab === 2 ? styles.buttonActive : ""
}`}
onClick={() => {
setCurrTab(2);
}}
>
Entrega
</button>
<button
className={`${styles.buttonLayout} ${
currTab === 3 ? styles.buttonActive : ""
}`}
onClick={() => {
setCurrTab(3);
}}
>
Troca e Devolução
</button>
<button
className={`${styles.buttonLayout} ${
currTab === 4 ? styles.buttonActive : ""
}`}
onClick={() => {
setCurrTab(4);
}}
>
Segurança e Privacidade
</button>
<button
className={`${styles.buttonLayout} ${
currTab === 5 ? styles.buttonActive : ""
}`}
onClick={() => {
setCurrTab(5);
}}
>
Contato
</button>
</div>
{currTab !== 5 && (
<>
<div className={styles.layoutText}>
<h2 className={styles.layoutH2}>Sobre</h2>
<p className={styles.layoutP}>
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.{" "}
<br /> <br />
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. <br /> <br />
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>
</>
)}
{currTab === 5 && (
<>
<div className={styles.formDiv}>
<h2 className={styles.formH2}>Preencha o formulário</h2>
<Formik
validationSchema={validationSchema}
onSubmit={() => {
setSubmited(true);
}}
initialValues={{
name: "",
email: "",
CPF: "",
birthDate: "",
phone: "",
instagram: "",
check: false,
}}
>
{({ errors, touched }) => (
<div className={styles.formContact}>
<Form>
<div className={styles.inputContainer}>
<label className={styles.formLabel} htmlFor="name">
Nome:
</label>
{errors.name && touched.name && (
<span className={styles.formSpan}>{errors.name}</span>
)}
<Field
type="text"
name="name"
placeholder="Seu nome completo"
className={styles.formField}
/>
</div>
<div className={styles.inputContainer}>
<label className={styles.formLabel} htmlFor="email">
E-mail:
</label>
{errors.email && touched.email && (
<span className={styles.formSpan}>
{errors.email}
</span>
)}
<Field
type="email"
name="email"
placeholder="Seu e-mail"
className={styles.formField}
/>
</div>
<div className={styles.inputContainer}>
<label className={styles.formLabel} htmlFor="CPF">
CPF:
</label>
{errors.CPF && touched.CPF && (
<span className={styles.formSpan}>{errors.CPF}</span>
)}
<Field
type="text"
name="CPF"
placeholder="000.000.000-00"
className={styles.formField}
/>
</div>
<div className={styles.inputContainer}>
<label className={styles.formLabel} htmlFor="birthDate">
Data de Nascimento:
</label>
{errors.birthDate && touched.birthDate && (
<span className={styles.formSpan}>
{errors.birthDate}
</span>
)}
<Field
type="text"
name="birthDate"
placeholder="00.00.0000"
className={styles.formField}
/>
</div>
<div className={styles.inputContainer}>
<label className={styles.formLabel} htmlFor="phone">
Telefone:
</label>
{errors.phone && touched.phone && (
<span className={styles.formSpan}>
{errors.phone}
</span>
)}
<Field
type="tel"
name="phone"
placeholder="(00) 0000-0000"
className={styles.formField}
/>
</div>
<div className={styles.inputContainer}>
<label
className={styles.formLabelInstagram}
htmlFor="instagram"
>
Instagram:
</label>
<Field
type="text"
name="instagram"
placeholder="@seuuser"
className={styles.formField}
/>
</div>
<div className={styles.formConfirm}>
<span>*</span>
<label htmlFor="check">Declaro que li e aceito</label>
<Field
type="checkbox"
name="check"
className={styles.confirmField}
/>
</div>
<button className={styles.buttonConfirm}>
CADASTRE-SE
</button>
{hasSubmited && (
<span className={styles.spanConfirm}>
*Formulário enviado com sucesso!
</span>
)}
</Form>
</div>
)}
</Formik>
</div>
</>
)}
</div>
</>
);
}

View File

@ -0,0 +1,321 @@
.homeDiv {
display: flex;
margin-top: 29px;
margin-left: 100px;
gap: 10px;
align-items: center;
margin-bottom: 81px;
.home {
width: 16px;
}
.arrow {
width: 5px;
}
.textHome {
font-family: "Roboto";
font-weight: 400;
font-size: 12px;
color: #c4c4c4;
}
}
.h1Institucional {
display: flex;
justify-content: center;
font-family: "Roboto";
font-weight: 400;
font-size: 24px;
letter-spacing: 0.1em;
}
.layoutPage {
display: flex;
margin-left: 100px;
margin-right: 100px;
margin-top: 80px;
margin-bottom: 70px;
.layoutText {
max-width: 58.44vw;
margin-left: 30px;
.layoutH2 {
font-family: "Roboto";
font-weight: 700;
font-size: 24px;
margin-bottom: 12px;
margin-top: 10px;
}
.layoutP {
font-family: "Roboto";
font-weight: 400;
font-size: 13px;
color: #7d7d7d;
}
}
.buttonDiv {
display: flex;
flex-direction: column;
width: 23.59vw;
border-right: 1px solid #000000;
.buttonActive {
background: black !important;
color: white !important;
}
.buttonLayout {
border: 0;
background: white;
font-family: "Roboto";
font-weight: 400;
font-size: 16px;
cursor: pointer;
color: #7d7d7d;
text-align: start;
height: 39px;
padding-left: 16px;
}
}
.formDiv {
width: 58.44vw;
margin-left: 30px;
.formH2 {
font-family: "Roboto";
font-weight: 700;
font-size: 24px;
margin-bottom: 12px;
}
.formContact {
width: 100%;
.inputContainer {
position: relative;
}
.formLabel {
display: flex;
margin-top: 12px;
margin-bottom: 12px;
font-family: "Roboto";
font-weight: 400;
font-size: 14px;
padding-left: 15px;
}
.formLabelInstagram {
display: flex;
margin-top: 12px;
font-family: "Roboto";
font-weight: 400;
font-size: 14px;
padding-left: 15px;
padding-bottom: 12px;
}
.formSpan {
position: absolute;
right: 20px;
font-family: "Roboto";
font-weight: 400;
font-size: 12px;
top: 17px;
color: #ff0000;
}
.formField {
display: flex;
width: 100%;
border: 1px solid #100d0e;
border-radius: 25px;
height: 46px;
padding-left: 20px;
&::placeholder {
display: flex;
align-items: center;
padding: 15px 0 15px;
font-family: "Roboto";
font-weight: 400;
font-size: 14px;
color: #b9b7b7;
}
}
.formConfirm {
display: flex;
margin: 13px 0 13px;
font-family: "Roboto";
font-weight: 400;
font-size: 14px;
justify-content: center;
gap: 4px;
label {
text-decoration: underline;
}
span {
color: #ff0000;
}
.confirmField {
min-width: 1.41vw;
border-radius: 3px;
}
}
.buttonConfirm {
background: black;
cursor: pointer;
color: white;
font-family: "Roboto";
font-weight: 400;
font-size: 16px;
width: 100%;
height: 52px;
border-radius: 25px;
letter-spacing: 0.05em;
}
.spanConfirm {
display: flex;
margin-top: 12px;
color: #008000;
font-family: "Roboto";
font-weight: 400;
font-size: 12px;
}
}
}
}
@media screen and (max-width: 1024px) {
.layoutPage {
display: flex !important;
flex-direction: column !important;
margin-left: 0 !important;
margin-bottom: 82px !important;
width: 96.88%;
.layoutText {
max-width: 96.88% !important;
margin: 30px 16px !important;
.layoutH2 {
display: flex;
justify-content: center !important;
margin-top: 0px !important;
}
}
}
.buttonDiv {
width: 96.88% !important;
border-right: 0 !important;
margin: 0 16px !important;
}
.formDiv {
width: 100% !important;
margin: 0 16px !important;
.formH2 {
display: flex;
justify-content: center !important;
margin-top: 30px !important;
}
}
}
@media screen and (min-width: 2500px) {
.home {
width: 32px !important;
}
.arrow {
width: 10px !important;
}
.textHome {
font-size: 24px !important;
}
.h1Institucional {
font-size: 48px !important;
}
.buttonLayout {
font-size: 32px !important;
height: 58px !important;
}
.layoutPage {
margin-bottom: 84px !important;
.layoutText {
max-width: 67.2vw !important;
.layoutH2 {
font-size: 48px !important;
}
.layoutP {
font-size: 26px !important;
}
}
.formDiv {
width: 67.2vw !important;
.formH2 {
font-size: 48px !important;
}
.formLabel {
font-size: 28px !important;
}
.formLabelInstagram {
font-size: 28px !important;
}
.formSpan {
font-size: 24px !important;
}
.formField {
height: 63px !important;
&::placeholder {
font-size: 28px !important;
}
}
.formConfirm {
font-size: 28px !important;
.confirmField {
min-width: 1.44vw !important;
}
}
.buttonConfirm {
font-size: 32px !important;
height: 71px !important;
}
.spanConfirm {
font-size: 24px !important;
}
}
}
}

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

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

15
src/reportWebVitals.ts Normal file
View File

@ -0,0 +1,15 @@
import { ReportHandler } from 'web-vitals';
const reportWebVitals = (onPerfEntry?: ReportHandler) => {
if (onPerfEntry && onPerfEntry instanceof Function) {
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry);
getFID(onPerfEntry);
getFCP(onPerfEntry);
getLCP(onPerfEntry);
getTTFB(onPerfEntry);
});
}
};
export default reportWebVitals;

5
src/setupTests.ts Normal file
View File

@ -0,0 +1,5 @@
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom';

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"
]
}

9571
yarn.lock Normal file

File diff suppressed because it is too large Load Diff