Compare commits

..

No commits in common. "main" and "feature/router" have entirely different histories.

51 changed files with 397 additions and 1167 deletions

View File

@ -10,14 +10,11 @@
"@types/node": "^16.7.13",
"@types/react": "^18.0.0",
"@types/react-dom": "^18.0.0",
"@types/react-input-mask": "^3.0.2",
"@types/react-maskedinput": "^4.0.6",
"formik": "^2.2.9",
"node-sass": "^8.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-headless-accordion": "^1.0.2",
"react-input-mask": "^2.0.4",
"react-router-dom": "^6.6.2",
"react-scripts": "5.0.1",
"typescript": "^4.4.2",

View File

@ -1,33 +1,45 @@
// /* fonts */
@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;500;700;900&display=swap");
// @import url("https://fonts.googleapis.com/css2?family=Tenor+Sans&display=swap");
// @import url("https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;500;600;700;800&display=swap");
$font-family: "Roboto", sans-serif;
// $font-family-secundary: "Tenor Sans", sans-serif;
/* Colors */
$color-black: #000000;
$color-black1: #292929;
$color-black2: #100D0E;
$color-black: #292929;
$color-black2: #000000;
$color-white: #fff;
$color-gray: #B9B7B7;
$color-gray: #6c6c6c;
$color-gray2: #7d7d7d;
$color-gray3: #f0f0f0;
$color-gray4: #8d8d8d;
$color-gray5: #e5e5e5;
$color-gray6: #C4C4C4;
$color-gray7: #e0e0e0;
$color-gray8: #303030;
$color-green: #008000;
$color-blue: #4267b2;
$color-blue2: #00C8FF;
;
$color-green: #4caf50;
$color-black: #000;
$color-black-800: #100d0e;
$color-white: #fff;
$color-white-100: #f0f0f0;
$color-white-500: #e5e5e5;
$color-gray: #c4c4c4;
$color-gray-300: #b9b7b7;
$color-gray-500: #7d7d7d;
$color-gray-700: #303030;
$color-gray-800: #292929;
$color-red: #ff0000;
/* Grid breakpoints */
// Mains breakpoints
$full: 2500px;
$tablets: 1024px;
$phone: 490px;
/* Grid breakpoints */
$grid-breakpoints: (
xs: 0,
@ -35,8 +47,7 @@ $grid-breakpoints: (
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px,
xxl:2500px) !default;
xl: 1200px) !default;
$z-index: (
level1: 5,

View File

@ -1,4 +1,6 @@
import React from "react";
import { IconLink } from "../utils/IconLink";
import { ListItem } from "../utils/ListItem";
import homeIcon from "./assets/svgs/home.svg"
import arrowRight from "./assets/svgs/arrow-right.svg"
@ -10,20 +12,21 @@ export const BreadCrumb = () => {
const routeName = pathname.split("/")[1]
return (
<nav >
{pathname !== "/" && (
<ul className={styles["breadNav"]}>
<li className={styles["navItem"]}>
<Link to="/institucional/sobre">
<ul className={styles.breadNav}>
<li>
<Link to="/">
<img src={homeIcon} alt="Icone de home" />
</Link>
</li>
<li className={styles["navItem"]}>
<li className={styles.navItem}>
<img src={arrowRight} alt="Icone de seta para a direita" />
<span className={styles["routeName"]}>
<span className={styles.routeName}>
{routeName}
</span>
</li>

View File

@ -1,24 +1,9 @@
@import "../../variaveis";
.breadNav {
display: flex;
gap: 12px;
align-items: center;
margin: 0 100px;
margin: 0 7.8125%;
padding: 30px 16px;
@media (max-width:$tablets) {
margin: 0 16px;
}
a {
img {
@media (min-width:$full) {
min-width: 31.25px;
min-height: 31.25px;
}
}
}
}
.navItem {
@ -26,37 +11,17 @@
gap: 12px;
align-items: center;
img {
@media (min-width:$full) {
width: 100%;
height: 100%;
min-width: 8.9px;
min-height: 15.62px;
}
}
@media (max-width:1025px) {
z-index: -99;
}
}
.routeName {
font-family: $font-family;
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-size: 12px;
line-height: 14px;
color: $color-gray6;
color: #C4C4C4;
text-transform: uppercase;
@media (min-width:$full) {
font-size: 24px;
line-height: 28px;
}
}

View File

@ -4,6 +4,7 @@ interface AccordionProps {
children: ReactNode
}
{/* Recebe List Items como filho */ }
export const AccordionElement = ({ children }: AccordionProps) => {
return (
<>

View File

@ -1,7 +1,8 @@
import React, { useState } from "react";
import styleAccordion from "./Accordion.module.scss";
import styleAccordion from "./styles/Accordion.module.scss";
import { ListItem } from "../../utils/ListItem";
import { AccordionElement } from "./AccordionElement";
import {
Accordion,
@ -26,13 +27,13 @@ export const AccordionFooter = () => {
</AccordionItem>
<AccordionItem title="Fale Conosco">
<span className={styleAccordion["contact__us"]}>
<ListItem link="tel:+551141599505" title={"Atendimento ao Consumidor"} />
<ListItem title={"Atendimento ao Consumidor"} />
</span>
<ListItem link="tel:+551141599505" title={"(11) 4159-9504"} />
<ListItem title={"(11) 4159-9504"} />
<span className={styleAccordion["contact__us"]}>
<ListItem link="tel:+5511994338825" title={"Atendimento Online"} />
<ListItem title={"Atendimento Online"} />
</span>
<ListItem link="tel:+5511994338825" title={"(11) 99433-8825"} />
<ListItem title={"(11) 99433-8825"} />
</AccordionItem>
</Accordion>

View File

@ -6,7 +6,7 @@ import {
AccordionHeader,
AccordionItem as HAccordionItem,
} from "react-headless-accordion";
import styleAccordion from "./Accordion.module.scss";
import styleAccordion from "./styles/Accordion.module.scss";
interface AccordionItemFooterProps {

View File

@ -1,8 +1,6 @@
@import "../../../variaveis";
h5 {
margin: 0;
font-family: $font-family;
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-size: 14px;
@ -10,9 +8,9 @@ h5 {
text-transform: uppercase;
color: $color-gray8;
color: #303030;
@media (min-width: $full) {
@media (min-width:2500px) {
font-size: 28px;
line-height: 33px;
}
@ -24,29 +22,21 @@ h5 {
justify-content: space-between;
width: 100%;
max-width: 707px;
height: 139px;
height: 100%;
@media (min-width:$full) {
@media (min-width:2500px) {
max-width: 1531px;
}
@media (max-width:$tablets) {
@media (max-width:1024px) {
flex-direction: column;
width: 99.875%;
width: 96.875%;
max-width: 992px;
justify-content: initial;
height: auto;
}
@media (max-width:$phone) {
width: 96.875%;
}
}
.toggle__accordion {
@ -94,7 +84,7 @@ h5 {
.accordion__body {
display: flex;
flex-direction: column;
// max-height: 140px;
max-height: 140px;
margin-top: 12px;
gap: 6px;
height: 125px;
@ -105,16 +95,16 @@ h5 {
li {
a {
font-family: $font-family;
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-size: 12px;
line-height: 14px;
text-transform: capitalize;
color: $color-gray8;
color: #303030;
@media (min-width:$full) {
@media (min-width:2500px) {
font-size: 24px;
line-height: 28px;
}
@ -130,8 +120,8 @@ h5 {
font-size: 12px;
line-height: 14px;
@media (min-width:$full),
(max-width:$tablets) {
@media (min-width:2500px),
(max-width:1024px) {
max-width: none;
}
@ -139,7 +129,7 @@ h5 {
a {
font-weight: 500;
@media (min-width:$full) {
@media (min-width:2500px) {
font-size: 24px;
line-height: 28px;
}

View File

@ -1,42 +0,0 @@
import React, { useEffect, useState } from "react";
import buttons from "./Buttons.module.scss";
import arrowTop from "./assets/arrowTop.svg";
export const ButtonTop = () => {
const [showTopBtn, setShowTopBtn] = useState(false);
useEffect(() => {
window.addEventListener("scroll", () => {
if (window.scrollY > 400) {
setShowTopBtn(true);
} else {
setShowTopBtn(false);
}
});
}, []);
const goToTop = () => {
window.scrollTo({
top: 0,
behavior: "smooth",
});
};
return (
<div className={buttons["btn__scroll"]}
onClick={goToTop} >
<img src={arrowTop}
alt="Icone de seta para cima"
className={buttons["icone"]}
/>
</div>
);
}

View File

@ -1,24 +0,0 @@
import React from "react";
import whatsapp from "./assets/whatsapp.svg";
import buttons from "./Buttons.module.scss";
export const ButtonWhatsapp = () => {
return (
<a
href="https://wa.me/11994338825"
target="_blank"
className={buttons["link"]}
>
<img src={whatsapp} alt="Icone do whats" />
</a>
);
}

View File

@ -1,57 +0,0 @@
@import "../../../variaveis";
.wrapper__buttons {
display: flex;
flex-direction: column;
height: 137px;
position: fixed;
bottom: 255px;
right: 16px;
@media (max-width:2499px) {
height: 73px;
position: fixed;
bottom: 225px;
right: 16px;
}
@media (max-width:$tablets) {
height: 73px;
bottom: 60px;
right: 22px;
}
}
.link {
img {
width: 66px;
max-height: 66px;
@media (max-width:2499px) {
width: 34px;
height: 34px;
}
}
}
.btn__scroll {
width: 66px;
height: 66px;
background-color: $color-gray6;
border-radius: 100%;
display: flex;
align-items: center;
justify-content: center;
@media (max-width:2499px) {
width: 34px;
height: 34px;
.icone {
width: 13px;
}
}
}

View File

@ -1,14 +0,0 @@
import React from "react";
import { ButtonTop } from "./ButtonTop";
import { ButtonWhatsapp } from "./ButtonWhatsapp";
import buttons from "./Buttons.module.scss";
export const Buttons = () => {
return (
<div className={buttons["wrapper__buttons"]}>
<ButtonWhatsapp />
<ButtonTop />
</div >
);
}

View File

@ -1,13 +0,0 @@
<svg width="66" height="137" viewBox="0 0 66 137" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M66 104C66 122.225 51.2254 137 33 137C14.7746 137 0 122.225 0 104C0 85.7746 14.7746 71 33 71C51.2254 71 66 85.7746 66 104Z" fill="#C4C4C4"/>
<path d="M44.7428 107.396C44.741 107.696 44.6177 107.995 44.373 108.226L44.3728 108.226C43.8668 108.704 43.037 108.703 42.5311 108.226L42.5232 108.235L42.5311 108.226L33.3457 99.5599L33.0712 99.3009L32.7967 99.5599L23.6118 108.226C23.1055 108.703 22.2757 108.703 21.7698 108.226L21.7697 108.226C21.5257 107.996 21.4025 107.697 21.4 107.398C21.4019 107.098 21.5251 106.799 21.7698 106.568L21.7698 106.568L32.1506 96.7738C32.4013 96.5373 32.7333 96.4158 33.0712 96.4158C33.4093 96.4158 33.7415 96.5376 33.9922 96.774L44.3728 106.568L44.3729 106.568C44.6171 106.798 44.7403 107.097 44.7428 107.396Z" fill="white" stroke="white" stroke-width="0.8"/>
<g clip-path="url(#clip0_3751_655)">
<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.21 46.6001C51.4139 48.8483 48.2542 50.7128 45.7338 51.2573C44.0095 51.6244 41.7573 51.9173 34.1755 48.774C24.4777 44.7563 18.2324 34.9016 17.7457 34.2623C17.2795 33.6229 13.8269 29.0441 13.8269 24.3086C13.8269 19.5731 16.2318 17.2673 17.2012 16.2773C17.9973 15.4646 19.3132 15.0934 20.5754 15.0934C20.9838 15.0934 21.3509 15.114 21.6809 15.1305C22.6503 15.1718 23.137 15.2295 23.7764 16.7599C24.5725 18.678 26.5113 23.4135 26.7423 23.9003C26.9774 24.387 27.2125 25.047 26.8825 25.6864C26.5732 26.3464 26.3009 26.6393 25.8142 27.2003C25.3274 27.7613 24.8654 28.1903 24.3787 28.7925C23.9332 29.3164 23.4299 29.8774 23.9909 30.8468C24.5519 31.7955 26.4907 34.9594 29.3452 37.5004C33.0288 40.7798 36.0153 41.8275 37.0837 42.273C37.8798 42.603 38.8285 42.5246 39.4102 41.9059C40.1485 41.1098 41.0602 39.7898 41.9883 38.4904C42.6483 37.5581 43.4815 37.4426 44.356 37.7726C45.247 38.082 49.9619 40.4126 50.9313 40.8953C51.9007 41.382 52.54 41.613 52.7752 42.0214C53.0062 42.4298 53.0062 44.3479 52.21 46.6001Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_3751_655">
<rect width="66" height="66" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -1,3 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 764 B

View File

@ -1,11 +0,0 @@
<svg width="66" height="66" viewBox="0 0 66 66" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4136_1027)">
<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_4136_1027">
<rect width="66" height="66" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -4,20 +4,17 @@ import { AccordionFooter } from "./Accordion/AccordionFooter";
import { Rodape } from "./Rodape/Rodape";
import { SocialMedia } from "./SocialMedia/SocialMedia";
import styleFooter from "./styles/Footer.module.scss";
import { Buttons } from "./ButtonsFixeds/Buttons";
export const Footer = () => {
return (
<footer className={styleFooter["footer"]}>
<div className={styleFooter["footer"]}>
<NewsLetter />
<div className={styleFooter["footer__middle"]}>
<AccordionFooter />
<SocialMedia />
<Buttons />
</div>
<Rodape />
</footer >
</div >
);
}

View File

@ -1,5 +1,3 @@
@import "../../../variaveis";
.newsLetter {
width: 100%;
padding: 16px 0;
@ -12,9 +10,9 @@
width: 37.03125%;
margin: 0 auto;
@media (max-width:$tablets) {
@media (max-width:1024px) {
row-gap: 16px;
// margin: 0 16px;
margin: 0 16px;
width: 96.875%;
}
@ -23,7 +21,7 @@
width: 94%;
}
@media (max-width:$phone) {
@media (max-width:490px) {
width: 91.42%;
}
@ -31,7 +29,7 @@
.newsLetter__title {
font-family: $font-family;
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-size: 18px;
@ -40,18 +38,18 @@
font-variant: small-caps;
text-transform: uppercase;
color: $color-gray8;
color: #303030;
margin: 0;
margin-bottom: 8px;
@media (min-width:$full) {
@media (min-width:2500px) {
font-size: 36px;
line-height: 42px;
}
@media (max-width:$tablets) {
@media (max-width:1024px) {
font-size: 14px;
line-height: 16px;
}
@ -64,7 +62,7 @@
justify-content: space-between;
column-gap: 10px;
@media (max-width:$tablets) {
@media (max-width:1024px) {
row-gap: 16px;
flex-direction: column;
}
@ -72,10 +70,10 @@
&__input {
width: 100%;
// max-width: 340px;
max-width: 340px;
height: 42px;
border-radius: 4px;
border: 1px solid $color-gray5;
border: 1px solid #E5E5E5;
outline: none;
padding: 0 16px;
@ -83,20 +81,20 @@
font-size: 14px;
line-height: 16px;
color: $color-gray6;
color: #C4C4C4;
&::placeholder {
color: $color-gray6;
color: #C4C4C4;
}
@media (min-width:$full) {
@media (min-width:2500px) {
height: 59px;
min-width: 668px;
font-size: 28px;
line-height: 33px;
}
@media (max-width:$tablets) {
@media (max-width:1024px) {
max-width: 96.875%;
}
@ -111,14 +109,14 @@
width: 91.875%;
}
@media (max-width:$phone) {
@media (max-width:490px) {
width: 90.4%;
}
}
&__submit {
font-family: $font-family;
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
font-size: 12px;
@ -131,7 +129,7 @@
color: $color-white;
color: #FFFFFF;
width: 100%;
max-width: 126px;
@ -140,18 +138,18 @@
outline: none;
border: none;
background: $color-black;
background: #000000;
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
border-radius: 4px;
@media (min-width:$full) {
@media (min-width:2500px) {
min-width: 246px;
height: 59px;
font-size: 24px;
line-height: 28px;
}
@media (max-width:$tablets) {
@media (max-width:1024px) {
max-width: none;
}

View File

@ -6,7 +6,7 @@
color: $color-gray2;
bottom: 0;
width: 100%;
background-color: $color-black;
background-color: #000;
&__wrapper {
@ -14,9 +14,9 @@
display: flex;
justify-content: space-between;
align-items: center;
margin: 0 100px;
margin: 0 7.8125%;
@media (max-width: $tablets) {
@media (max-width: 1024px) {
flex-direction: column;
align-items: flex-start;
margin: 0 16px;
@ -25,7 +25,7 @@
}
&__address {
color: $color-white;
color: #fff;
font-family: $font-family;
font-style: normal;
font-weight: 400;
@ -35,7 +35,7 @@
width: 100%;
max-width: 269px;
@media(min-width:$full) {
@media(min-width:2500px) {
font-size: 20px;
line-height: 27px;
max-width: none;
@ -43,7 +43,7 @@
min-width: 537px;
}
@media(max-width:$tablets) {
@media(max-width:1024px) {
margin-bottom: 16px;
order: 2;
}
@ -62,13 +62,13 @@
column-gap: 11px;
@media (min-width: $full) {
@media (min-width: 2500px) {
min-width: 690px;
}
@media (max-width: $tablets) {
@media (max-width: 1024px) {
justify-content: flex-start;
margin: 0;
margin-bottom: 23px;
@ -82,17 +82,17 @@
width: 36px;
height: 20.2px;
@media(min-width:$full) {
@media(min-width:2500px) {
width: 70px;
height: 39.27px;
}
@media (max-width: $tablets) {
@media (max-width: 1024px) {
width: 35px;
height: 20.13px;
}
@media (max-width: $phone) {
@media (max-width: 490px) {
width: 30px;
height: 17px;
@ -126,7 +126,7 @@
width: 53px;
height: 33px;
@media(min-width:$full) {
@media(min-width:2500px) {
width: 103.52px;
height: 64.44px;
}
@ -144,11 +144,11 @@
margin: 0;
@media(min-width:$full) {
@media(min-width:2500px) {
min-width: 388.98px;
}
@media(max-width:$tablets) {
@media(max-width:1024px) {
order: 3;
padding: 0;
}
@ -157,7 +157,7 @@
width: 100%;
min-width: 108.5px;
@media(min-width:$full) {
@media(min-width:2500px) {
min-width: 189PX;
}
}
@ -175,7 +175,7 @@
line-height: 12px;
@media(min-width:$full) {
@media(min-width:2500px) {
font-size: 18px;
line-height: 25px;
}
@ -186,7 +186,7 @@
width: 28.66px;
height: 15.65px;
@media(min-width:$full) {
@media(min-width:2500px) {
width: 55.98px;
height: 30.55px;
}
@ -206,10 +206,10 @@
font-size: 10px;
line-height: 12px;
text-decoration: none;
color: $color-white;
color: #fff;
text-transform: capitalize;
@media(min-width:$full) {
@media(min-width:2500px) {
font-size: 18px;
line-height: 25px;
}
@ -218,7 +218,7 @@
margin-right: 8px;
width: 100%;
@media(min-width:$full) {
@media(min-width:2500px) {
margin-right: 10px;
min-width: 100px;
}
@ -231,7 +231,7 @@
width: 44.92px;
height: 16px;
@media(min-width:$full) {
@media(min-width:2500px) {
width: 87.73px;
height: 31.24px;
}

View File

@ -17,10 +17,7 @@ import { DevelopedBy } from './DevelopedBy';
export const Rodape = () => {
return (
<div className={styleRodape["footer"]}>
{/*
<Rodape />
*/}
<footer className={styleRodape["footer"]}>
<div className={styleRodape["footer__wrapper"]}>
<div className={styleRodape["footer__address"]}>
<span>Lorem ipsum dolor sit amet, consectetur adipiscing
@ -75,7 +72,7 @@ export const Rodape = () => {
/>
</ul>
</div>
</div>
</footer>
);
}

View File

@ -1,5 +1,3 @@
@import "../../../variaveis";
.wrapper {
@media (max-width:1025px) {
padding: 0 16px;
@ -12,7 +10,7 @@
max-width: 215px;
padding: 0;
@media (min-width: $full) {
@media (min-width: 2500px) {
max-width: 390px;
}
@ -24,7 +22,7 @@
width: 35px;
height: 35px;
@media (min-width: $full) {
@media (min-width: 2500px) {
width: 70px;
height: 70px;
}
@ -45,7 +43,7 @@
text-transform: lowercase;
@media (min-width:$full) {
@media (min-width:2500px) {
font-size: 28x;
line-height: 33px;
}

View File

@ -15,23 +15,23 @@ export const SocialMedia = () => {
<div className={styleSocialMedia["wrapper"]}>
<div className={styleSocialMedia["wrapper__social__media"]}>
<IconLink link={"https://web.facebook.com/digitalm3"}
<IconLink link={""}
sourceImg={facebook}
altText="Logo da rede social "
/>
<IconLink link={"https://www.instagram.com/m3.ecommerce/"}
<IconLink link={""}
sourceImg={instagram}
altText="Logo da rede social "
/>
<IconLink link={"https://twitter.com/eCommerce_Br/status/1443210495784366089"}
<IconLink link={""}
sourceImg={twitter}
altText="Logo da rede social "
/>
<IconLink link={"https://www.youtube.com/@m3e-commerce796"}
<IconLink link={""}
sourceImg={youtube}
altText="Logo da rede social "
/>
<IconLink link={"https://www.linkedin.com/company/m3ecommerce/"}
<IconLink link={""}
sourceImg={linkedin}
altText="Logo da rede social "
/>

View File

@ -1,22 +1,18 @@
@import "../../../variaveis";
.footer {
width: 100%;
&__middle {
display: flex;
justify-content: space-evenly;
height: 139px;
padding: 50px 0;
position: relative;
@media (min-width:$full) {
@media (min-width:2500px) {
height: 239px;
}
@media (max-width: $tablets) {
@media (max-width: 1024px) {
flex-direction: column;
width: 96.875%;
max-width: 992px;

View File

@ -3,7 +3,7 @@ import { HeaderTop } from "./HeaderDesk/HeaderTop";
import { HeaderBottom } from "./HeaderDesk/HeaderBottom";
import { HeaderMobile } from "./HeaderMobile/HeaderMobile";
import styleHeader from './Header.module.scss';
import styleHeader from './styles/Header.module.scss';
export const Header = () => {
return (

View File

@ -1,5 +1,5 @@
import React from "react";
import styleHeader from '../Header.module.scss';
import styleHeader from '../styles/Header.module.scss';
import { Link } from "react-router-dom"
export const HeaderBottom = () => {
@ -7,13 +7,13 @@ export const HeaderBottom = () => {
<div className={styleHeader["header__bottom"]}>
<nav className={styleHeader["navBar__items"]}>
<Link className={styleHeader["list__items__link"]} to="/institucional/sobre">
<Link className={styleHeader["list__items__link"]} to="/cursos">
Cursos
</Link>
<Link className={styleHeader["list__items__link"]} to="/institucional/sobre">
<Link className={styleHeader["list__items__link"]} to="/saiba-mais">
Saiba Mais
</Link>
<Link className={styleHeader["list__items__link"]} to="/institucional/sobre">
<Link className={styleHeader["list__items__link"]} to="/institucional">
Institucional
</Link>
</nav>

View File

@ -3,30 +3,29 @@ import logo from "../assets/svgs/logo.svg";
import search from "../assets/svgs/search.svg";
import cart from "../assets/svgs/cart.svg";
import styleHeader from '../Header.module.scss';
import { Link } from "react-router-dom";
import styleHeader from '../styles/Header.module.scss';
export const HeaderTop = () => {
return (
<div className={styleHeader["header__top"]}>
<div className={styleHeader["container__header__top"]}>
<Link to="/institucional/sobre" className={styleHeader["container__logo"]}>
<div className={styleHeader["container__logo"]}>
< img src={logo} alt="Logo M3" className={styleHeader["container__logo__img"]} />
</Link>
</div>
<form className={styleHeader["container__search"]}>
<input className={styleHeader["container__search__input"]} type="text" placeholder="Buscar..." />
<Link className={styleHeader["container__search__link"]} to="/institucional/sobre">
<a className={styleHeader["container__search__link"]} href="/">
<img className={styleHeader["container__search__link__img"]} src={search} alt="Icone de busca" />
</Link>
</a>
</form>
<div className={styleHeader["container__menu"]} >
<span className={styleHeader["container__menu__enter"]}>
<Link to="/institucional/sobre">Entrar</Link>
<a href="/">Entrar</a>
</span>
<span className={styleHeader["container__menu__cart"]}>
<Link to="/institucional/sobre" >
<a href="/" >
<img src={cart} alt="icone de cart" />
</Link>
</a>
</span>
</div>
</div>

View File

@ -1,8 +1,7 @@
import React from "react";
import { Link } from "react-router-dom";
import closeIcon from "../assets/svgs/icon-close.svg";
import styleHeader from '../Header.module.scss';
import styleHeader from '../styles/Header.module.scss';
interface MenuMobile {
isOpenMenu: boolean;
@ -29,16 +28,18 @@ export const BurguerMenu = ({ isOpenMenu, setisOpenMenu }: MenuMobile) => {
</span>
</div>
</div>
{/* Esse nav vai viraar um componente */}
<nav className={styleHeader["navBar__items"]}>
<Link className={styleHeader["list__items__link"]} to="/institucional/sobre">
{/* esse "a" vai virar um componente */}
<a className={styleHeader["list__items__link"]} href="/cursos">
Cursos
</Link>
<Link className={styleHeader["list__items__link"]} to="/institucional/sobre">
</a>
<a className={styleHeader["list__items__link"]} href="/saiba-mais">
Saiba Mais
</Link>
<Link className={styleHeader["list__items__link"]} to="/institucional/sobre">
Institucional
</Link>
</a>
<a className={styleHeader["list__items__link"]} href="/institucionais">
Institucionais
</a>
</nav>
</div>

View File

@ -4,7 +4,7 @@ import search from "../assets/svgs/search.svg";
import cart from "../assets/svgs/cart.svg";
import burguerIcon from "../assets/svgs/burger-icon.svg";
import styleHeader from '../Header.module.scss';
import styleHeader from '../styles/Header.module.scss';
import { BurguerMenu } from "./BurguerMenu";
@ -23,13 +23,13 @@ export const HeaderMobile = () => {
</div>
<div className={styleHeader["container__menu"]} >
<span className={styleHeader["container__menu_cart"]}>
<a href="/institucional/sobre" ><img src={cart} alt="icone de cart" /></a>
<a href="/" ><img src={cart} alt="icone de cart" /></a>
</span>
</div>
</div>
<form className={styleHeader["container__search__mobile"]}>
<input className={styleHeader["container__search__input"]} type="text" placeholder="Buscar..." />
<a className={styleHeader["container__search__link"]} href="/institucional/sobre">
<a className={styleHeader["container__search__link"]} href="/">
<img src={search} alt="Icone de busca" />
</a>
</form>

View File

@ -1,22 +1,19 @@
@import "../../variaveis";
li {
list-style: none;
}
a {
text-decoration: none;
font-family: $font-family;
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-size: 14px;
line-height: 16px;
text-transform: uppercase;
color: $color-white;
color: #FFFFFF;
position: relative;
@media (min-width:$full) {
@media (min-width:2500px) {
font-size: 28px;
line-height: 33px;
}
@ -37,12 +34,12 @@ a {
// AREA HEADER TOP
&__top {
background-color: $color-black;
background-color: #000;
display: flex;
height: 75px;
border-bottom: 1px solid $color-gray6;
border-bottom: 1px solid #C4C4C4;
@media (min-width:$full) {
@media (min-width:2500px) {
height: 100px;
}
@ -54,7 +51,7 @@ a {
.container__header__top {
display: flex;
align-items: center;
margin: 0 100px;
margin: 0 7.8125%;
width: 100%;
@ -63,7 +60,7 @@ a {
width: 100%;
max-width: 162px;
@media (min-width:$full) {
@media (min-width:2500px) {
max-width: 265.62px;
}
@ -72,7 +69,7 @@ a {
width: 100%;
height: 25.86px;
@media (min-width:$full) {
@media (min-width:2500px) {
height: 50.5px;
}
}
@ -86,7 +83,7 @@ a {
justify-content: center;
max-width: 264px;
@media (min-width:$full) {
@media (min-width:2500px) {
max-width: none;
width: 24.44444%;
height: 57px;
@ -100,14 +97,14 @@ a {
padding-left: 16px;
border-radius: 5px;
color: $color-gray6;
font-family: $font-family;
color: #C4C4C4;
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-size: 14px;
line-height: 16px;
@media (min-width:$full) {
@media (min-width:2500px) {
width: 100%;
height: 57px;
font-size: 28px;
@ -115,14 +112,14 @@ a {
}
&::placeholder {
color: $color-gray6;
font-family: $font-family;
color: #C4C4C4;
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-size: 14px;
line-height: 16px;
@media (min-width:$full) {
@media (min-width:2500px) {
font-size: 28px;
line-height: 33px;
}
@ -130,7 +127,7 @@ a {
&:focus {
transition: 0.35s ease;
color: $color-black;
color: #000;
&::-webkit-input-placeholder {
transition: opacity 0.45s ease;
@ -150,7 +147,7 @@ a {
&:focus {
transition: 0.35s ease;
color: $color-black;
color: #000;
&::-webkit-input-placeholder {
transition: opacity 0.45s ease;
@ -177,7 +174,7 @@ a {
top: 7px;
right: 32px;
@media (min-width:$full) {
@media (min-width:2500px) {
top: 14px;
right: 64px;
@ -196,7 +193,7 @@ a {
max-width: 136px;
justify-content: space-between;
@media (min-width:$full) {
@media (min-width:2500px) {
max-width: 214.68px;
@ -205,16 +202,15 @@ a {
&__enter {
a {
font-family: $font-family;
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-size: 14px;
line-height: 16px;
text-transform: uppercase;
color: #FFFFFF;
color: $color-white;
@media (min-width:$full) {
@media (min-width:2500px) {
font-size: 28px;
line-height: 33px;
}
@ -224,7 +220,7 @@ a {
&__cart {
a {
img {
@media (min-width:$full) {
@media (min-width:2500px) {
width: 54.68px;
height: 54.68px;
}
@ -235,7 +231,7 @@ a {
}
.search-container {
width: $phone;
width: 490px;
display: block;
margin: 0 auto;
}
@ -255,11 +251,11 @@ a {
width: 100%;
height: 44px;
@media (min-width:$full) {
@media (min-width:2500px) {
height: 61px;
}
background-color: $color-black;
background-color: #000;
display: flex;
align-items: center;
@ -280,7 +276,7 @@ a {
.navBar__items {
width: 100%;
max-width: 349px;
margin: 0 100px;
margin: 0 7.8125%;
display: flex;
@ -290,13 +286,13 @@ a {
align-items: center;
padding: 0;
@media (min-width:$full) {
@media (min-width:2500px) {
max-width: 588.62px;
justify-content: space-between;
}
@media (max-width:$tablets) {
@media (max-width:1024px) {
display: flex;
align-items: initial;
flex-direction: column;
@ -315,14 +311,14 @@ a {
bottom: 0;
width: 0;
height: 2px;
background: $color-white;
background: #FFFFFF;
transition: all .45s;
}
@media (max-width:$tablets) {
color: $color-gray6;
@media (max-width:1024px) {
color: #C4C4C4;
}
&:hover::before {
@ -334,7 +330,7 @@ a {
// AREA HEADER MOBILE
&__mobile {
background-color: $color-black;
background-color: #000;
display: flex;
flex-direction: column;
height: auto;
@ -357,13 +353,13 @@ a {
width: 94%;
}
@media (max-width:$phone) {
@media (max-width:490px) {
width: 91.466666666666666666666666666667%;
}
.container__hamburguer {
background-color: $color-white;
background-color: lightgray;
width: 30px;
height: 30px;
}
@ -376,7 +372,7 @@ a {
justify-content: center;
margin: 0 16px;
max-width: 992px;
background-color: $color-white;
background-color: #FFFFFF;
border-radius: 5px;
@media (max-width:768px) {
@ -384,7 +380,7 @@ a {
width: 94%;
}
@media (max-width:$phone) {
@media (max-width:490px) {
width: 91.466666666666666666666666666667%;
}
@ -399,8 +395,8 @@ a {
&::placeholder {
color: $color-gray6;
font-family: $font-family;
color: #C4C4C4;
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-size: 14px;
@ -409,7 +405,7 @@ a {
&:focus {
transition: 0.35s ease;
color: $color-black;
color: #000;
&::-webkit-input-placeholder {
transition: opacity 0.45s ease;
@ -457,7 +453,6 @@ a {
opacity: 0;
pointer-events: none;
transition: all .45s;
z-index: 9;
}
.wrapper.aberto {
@ -470,10 +465,10 @@ a {
top: 0;
width: 96.484375%;
height: 585px;
background-color: $color-white;
background-color: #FFFFFF;
z-index: 8;
@media (max-width:$phone) {
@media (max-width:490px) {
width: 90.4%;
}
@ -492,7 +487,7 @@ a {
}
.header__menu {
background-color: $color-black;
background-color: #000;
height: 78px;
display: flex;
align-items: center;

View File

@ -10,12 +10,11 @@ import styles from "./styles.module.scss"
export const Layout = () => {
return (
<div className={styles["container"]}>
<div className={styles.container}>
<Header />
<BreadCrumb />
<main className={styles["main"]}>
<main className={styles.main}>
<Outlet />
</main>

View File

@ -1,57 +1,19 @@
@import "../../variaveis";
.container {
display: flex;
flex-direction: column;
height: 100%;
height: 100vh;
overflow: hidden;
@media (min-width:3000px) {
height: 100vh;
flex: 1;
}
}
.main {
display: flex;
height: auto;
margin: 0 100px;
margin: 0 7.8125%;
flex-direction: column;
@media (min-width: 3000px) {
min-height: 897px;
flex: 1;
height: 100vh;
}
@media (max-width:$tablets) {
margin: 0 16px;
// z-index: -9;
}
h1 {
text-align: center;
font-family: $font-family;
font-style: normal;
font-weight: 400;
font-size: 24px;
line-height: 28px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: $color-black1;
@media (min-width:$full) {
font-size: 48px;
line-height: 56px;
}
}
}

View File

@ -0,0 +1,108 @@
import { Formik, Form, Field, ErrorMessage } from "formik";
import contactFormSchema from "../../../schema/ContactFormSchema";
import styleForm from "./ContactForm.module.scss";
interface IFormikValues {
name: string;
email: string;
cpf: string;
dateBirth: string;
phone: string;
instagram?: string;
checkbox: boolean;
}
const initialValues = {
name: "",
email: "",
cpf: "",
dateBirth: "",
phone: "",
instagram: "",
checkbox: false,
};
const formSubmit = (values: IFormikValues) => {
console.log(values);
};
export const ContactForm = () => {
return (
<Formik
onSubmit={formSubmit}
initialValues={initialValues}
validationSchema={contactFormSchema}
>
{({ errors, touched }) => (
<Form className="formulario">
<label htmlFor="name">Nome</label>
<Field
id="name"
name="name"
placeholder="Seu nome completo"
className={errors.name && touched.name && "invalid"}
/>
<ErrorMessage name="name" className="form-ivalid-feedback" />
<label htmlFor="email">E-mail</label>
<Field
id="email"
name="email"
placeholder="Seu e-mail"
className={errors.email && touched.email && "invalid"}
/>
<ErrorMessage name="email" className="form-ivalid-feedback" />
<label htmlFor="cpf">CPF</label>
<Field
id="cpf"
name="cpf"
placeholder="000.000.000-00"
className={errors.cpf && touched.cpf && "invalid"}
/>
<ErrorMessage name="cpf" className="form-ivalid-feedback" />
<label htmlFor="data">Data de Nascimento:</label>
<Field
id="dateBirth"
name="dateBirth"
placeholder="00.00.0000"
className={errors.dateBirth && touched.dateBirth && "invalid"}
/>
<ErrorMessage name="dateBirth" className="form-ivalid-feedback" />
<label htmlFor="phone">Telefone:</label>
<Field
id="phone"
name="phone"
type="tel"
placeholder="(00) 00000-0000"
className={errors.phone && touched.phone && "invalid"}
/>
<ErrorMessage name="phone" className="form-ivalid-feedback" />
<label htmlFor="instagram">Instagram</label>
<Field id="instagram" name="instagram" placeholder="@seuuser" />
<ErrorMessage name="instagram" className="form-ivalid-feedback" />
<div>
<label htmlFor="checkbox">Declaro que li e aceito</label>
<Field
type="checkbox"
id="checkbox"
name="checkbox"
className={errors.checkbox && touched.checkbox && "invalid"}
/>
<ErrorMessage name="checkbox" className="form-ivalid-feedback" />
</div>
<button type="submit">CADASTRE-SE</button>
</Form>
)}
</Formik>
);
};

View File

@ -9,7 +9,7 @@ interface IconLink {
export const IconLink = ({ link, sourceImg, altText }: IconLink) => {
return (
<li>
<a href={link} target="_blank">
<a href={link}>
<img src={sourceImg} alt={altText} />
</a>
</li>

View File

@ -1,5 +1,4 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
@ -8,7 +7,6 @@ body {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
/* background-color: gray; */
}
code {

View File

@ -1,18 +0,0 @@
import styles from "./styles.module.scss"
export const Home = () => {
return (
<div className={styles["container"]}>
<h1>HOME</h1>
</div >
)
}

View File

@ -1,21 +0,0 @@
import React from 'react';
import { Article } from './Article';
export const About = () => {
return (
<Article title='Sobre'>
<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>
</Article>
)
}

View File

@ -1,20 +0,0 @@
import React, { ReactNode } from 'react';
interface ArticleProps {
title: string;
className?: string;
children: ReactNode;
}
export const Article = ({ children, title, className }: ArticleProps) => {
return (
<>
<h2 >{title}</h2>
{children}
</>
)
}

View File

@ -1,157 +0,0 @@
@import "../../variaveis";
.formulario {
display: flex;
flex-direction: column;
padding: 16px;
font-family: $font-family;
font-style: normal;
font-weight: 400;
font-size: 14px;
line-height: 16px;
@media (min-width: $full) {
font-size: 28px;
line-height: 32px;
}
@media (min-width: 1025px) {
width: 100%;
padding: 0px;
}
.label__form {
margin: 12px 0;
}
input {
padding: 14px 20px;
border: 1px solid $color-black2;
border-radius: 25px;
font-family: $font-family;
font-style: normal;
font-weight: 400;
font-size: 14px;
line-height: 16px;
color: $color-black;
outline: none;
@media (min-width: $full) {
font-size: 28px;
line-height: 33px;
}
}
&::placeholder {
color: $color-gray;
@media (min-width: $full) {
font-size: 28px;
line-height: 33px;
}
}
.invalid {
border: 1px solid $color-red;
}
.error {
display: flex;
justify-content: end;
font-family: $font-family;
font-style: normal;
font-weight: 400;
font-size: 12px;
line-height: 14px;
color: $color-red;
@media (min-width: $full) {
font-size: 24px;
line-height: 28px;
}
}
.success {
font-family: $font-family;
font-style: normal;
font-weight: 400;
font-size: 12px;
line-height: 14px;
/* identical to box height */
color: $color-green;
margin-top: 12.56px;
@media (min-width: $full) {
font-size: 24px;
line-height: 28px;
}
}
button {
padding: 17px;
background: $color-black;
border-radius: 25px;
color: $color-white;
@media (min-width: $full) {
padding: 14.5px;
font-size: 32px;
line-height: 38px;
}
}
.checkbox_wrapper {
display: flex;
justify-content: center;
align-items: center;
.obrigatorio__form {
color: $color-red;
}
label {
order: 2;
text-decoration: underline;
}
input {
order: 3;
width: 18px;
height: 18px;
border: 1px solid $color-black;
border-radius: 3px;
margin: 0 4px;
@media (min-width: $full) {
width: 36.4px;
height: 35.15px;
}
}
}
@media (max-width: $tablets) {
h2 {
text-align: center;
}
}
}

View File

@ -1,136 +0,0 @@
import { Formik, Form, Field, ErrorMessage } from "formik";
import ContactFormSchema from "../../schema/ContactFormSchema";
import { Article } from "./Article";
import style from "./Contact.module.scss";
import InputMask from 'react-input-mask';
import React, { useState } from "react";
interface IFormikValues {
name: string;
email: string;
cpf: string;
data: string;
telefone: string;
instagram?: string;
checkbox: boolean;
}
const initialValues = {
name: "",
email: "",
cpf: "",
data: "",
telefone: "",
instagram: "",
checkbox: false,
};
let listContact: Array<IFormikValues> = []
export const Contact = () => {
const [isValidateForm, setisValidateForm] = useState(false);
return (
<Article title="Preencha o formulario" className={style["title-contact"]}>
<Formik
initialValues={initialValues}
onSubmit={(values: IFormikValues, actions) => {
listContact.push(values);
actions.resetForm();
console.log(values);
({ ...values }) && setisValidateForm(true);
}}
validationSchema={ContactFormSchema}
>
{({ errors, touched }) => (
<Form className={style["formulario"]}>
<label className={style["label__form"]} htmlFor="name">Nome</label>
<span className={style["error"]}>
<ErrorMessage name="name" className={style["form-ivalid-feedback"]} />
</span>
<Field
id="name"
name="name"
placeholder="Seu nome completo"
className={errors.name && touched.name && style["invalid"]}
/>
<label className={style["label__form"]} htmlFor="email">E-mail</label>
<span className={style["error"]}>
<ErrorMessage name="email" className={style["form-ivalid-feedback"]} />
</span>
<Field
id="email"
name="email"
placeholder="Seu e-mail"
className={errors.email && touched.email && style["invalid"]}
/>
<label className={style["label__form"]} htmlFor="cpf">CPF</label>
<span className={style["error"]}>
<ErrorMessage name="cpf" className={style["form-ivalid-feedback"]} />
</span>
<Field
id="cpf"
name="cpf" as={InputMask} mask="999.999.999-99"
type="tel"
placeholder="000.000.000-00"
className={errors.cpf && touched.cpf && style["invalid"]}
/>
<label className={style["label__form"]} htmlFor="data">Data de Nascimento:</label>
<span className={style["error"]}>
<ErrorMessage name="data" className={style["form-ivalid-feedback"]} />
</span>
<Field
id="data"
name="data" as={InputMask} mask="99.99.9999"
type="string"
placeholder="00.00.0000"
className={errors.data && touched.data && style["invalid"]}
/>
<label className={style["label__form"]} htmlFor="telefone">Telefone:</label>
<span className={style["error"]}>
<ErrorMessage name="telefone" className={style["form-ivalid-feedback"]} />
</span>
<Field
id="telefone"
name="telefone" as={InputMask} mask="(99) 99999-9999"
type="tel"
placeholder="(00) 00000-0000"
className={errors.telefone && touched.telefone && [style["invalid"]]}
/>
<label className={style["label__form"]} htmlFor="instagram">Instagram</label>
<span>
<ErrorMessage name="instagram" className={style["form-ivalid-feedback"]} />
</span>
<Field id="instagram" name="instagram" placeholder="@seuuser" />
<div className={style["checkbox_wrapper"]}>
<span className={style["obrigatorio__form"]}>*</span>
<label className={style["label__form"]} htmlFor="checkbox">Declaro que li e aceito</label>
<span className={style["error"]}>
<ErrorMessage name="checkbox" className={style["form-ivalid-feedback"]} />
</span>
<Field
type="checkbox"
id="checkbox"
name="checkbox"
className={errors.checkbox && touched.checkbox && style["invalid"]}
/>
</div>
<button type="submit">CADASTRE-SE</button>
{isValidateForm && (
<span className={style["success"]}>*Formulario enviado com sucesso!</span>
)}
</Form>
)}
</Formik>
</Article >
);
};

View File

@ -1,21 +0,0 @@
import React from 'react';
import { Article } from './Article';
export const Delivery = () => {
return (
<Article title='Entrega'>
<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>
</Article>
)
}

View File

@ -1,21 +0,0 @@
import React from 'react';
import { Article } from './Article';
export const ExchangeAndEvolution = () => {
return (
<Article title='Troca e Devolucao'>
<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>
</Article>
)
}

View File

@ -1,21 +0,0 @@
import React from 'react';
import { Article } from './Article';
export const FormOfPayment = () => {
return (
<Article title='Forma de Pagamento'>
<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>
</Article>
)
}

View File

@ -0,0 +1,46 @@
.batata {
display: flex;
gap: 30px;
.sideBar {
display: flex;
flex-direction: column;
border-right: 1px solid #000;
width: 100%;
min-width: 302px;
padding: 0;
@media (min-width:2500px) {}
@media (max-width:1024px) {
min-width: none;
}
&__item {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
text-transform: inherit;
padding: 10px 16px;
color: #7D7D7D;
&.ativo {
background-color: #000;
color: #fff;
font-weight: 700;
font-size: 16px;
line-height: 19px;
}
}
}
.content-right {
background-color: aquamarine;
width: 100%;
}
}

View File

@ -1,14 +1,14 @@
import React from "react";
import { NavLink, Outlet } from "react-router-dom";
import styleInstitucional from "./Instituitional.module.scss"
export const Institucional = () => {
import styleInstitucional from "./Institucional.module.scss"
export const Instituicional = () => {
return (
<>
<h1>Institucional</h1>
<div className={styleInstitucional["wrapper__sideBar"]}>
<div className={styleInstitucional["batata"]}>
<nav>
<ul className={styleInstitucional["sideBar"]}>
<NavLink

View File

@ -1,142 +0,0 @@
@import "../../variaveis";
.wrapper__sideBar {
display: flex;
gap: 30px;
height: 100%;
// max-height: 465px;
margin: 80px 0 70px;
@media (max-width:$tablets) {
flex-direction: column;
margin: 40px 0 80px;
max-height: none;
}
h2 {
margin: 0;
font-family: $font-family;
font-style: normal;
font-weight: 700;
font-size: 24px;
line-height: 28px;
@media (min-width:$full) {
font-size: 48px;
line-height: 56px;
}
}
nav {
@media (min-width:$full) {
max-width: 590px;
width: 100%;
}
}
.sideBar {
display: flex;
flex-direction: column;
border-right: 1px solid $color-black;
width: 100%;
min-width: 302px;
height: 100%;
max-height: 285px;
padding: 0;
margin: 0;
@media (min-width:$full) {
min-width: 590px;
max-height: 465px;
}
@media (max-width:$tablets) {
min-width: none;
border-right: none;
}
@media (max-width:$phone) {
min-width: 0;
}
&__item {
display: flex;
align-items: center;
font-family: $font-family;
font-style: normal;
font-weight: 400;
text-transform: inherit;
padding: 10px 16px;
color: $color-gray2;
@media (min-width:$full) {
height: 58px;
padding: 0 16px;
}
&.ativo {
background-color: $color-black;
color: $color-white;
font-weight: 700;
font-size: 16px;
line-height: 19px;
@media (min-width:$full) {
font-size: 28px;
line-height: 33px;
}
}
}
}
.content-right {
width: 100%;
height: 100%;
h2 {
@media (max-width:$tablets) {
text-align: center;
}
}
p {
font-family: $font-family;
font-style: normal;
font-weight: 400;
font-size: 13px;
line-height: 15px;
margin-bottom: 0;
color: $color-gray2;
@media (min-width:$full) {
font-size: 26px;
line-height: 30px;
}
@media (max-width:$tablets) {
text-align: justify;
}
}
}
}

View File

@ -1,21 +0,0 @@
import React from 'react';
import { Article } from './Article';
export const SecurityAndPrivacy = () => {
return (
<Article title='Seguranca e Privacidade'>
<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>
</Article>
)
}

View File

@ -1,60 +0,0 @@
@import "../variaveis";
.container {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
@media (min-width:3000px) {
height: 100vh;
flex: 1;
}
}
.main {
display: flex;
height: auto;
margin: 0 100px;
flex-direction: column;
@media (min-width: 3000px) {
min-height: 897px;
height: 100vh;
flex: 1;
border: 1px solid blue;
}
@media (max-width:$tablets) {
margin: 0 16px;
// z-index: -9;
}
h1 {
text-align: center;
font-family: $font-family;
font-style: normal;
font-weight: 400;
font-size: 24px;
line-height: 28px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: $color-black1;
@media (min-width:$full) {
font-size: 48px;
line-height: 56px;
}
}
}

View File

@ -1,35 +1,23 @@
import { Routes as ReactRouterRoutes, Route, Navigate } from "react-router-dom"
import { Home } from "./pages/Home"
import { Contact } from "./pages/Intitucional/Contact"
import { Delivery } from "./pages/Intitucional/Delivery"
import { FormOfPayment } from "./pages/Intitucional/FormOfPayment"
import { Institucional } from "./pages/Intitucional"
import { SecurityAndPrivacy } from "./pages/Intitucional/SecurityAndPrivacy"
import { About } from "./pages/Intitucional/About"
import { ExchangeAndEvolution } from "./pages/Intitucional/ExchangeAndEvolution"
import { Routes as ReactRouterRoutes, Route } from "react-router-dom"
import { Layout } from "./components/Layout"
import { Instituicional } from "./pages/Intitucional/Instituicional"
export const Routes = () => {
return (
<ReactRouterRoutes>
<Route path="/" element={<Layout />}>
<Route index element={<Navigate to="/institucional/sobre" replace />} />
<Route path="institucional" element={<Institucional />}>
<Route path="sobre" element={<About />} />
<Route path="forma-de-pagamento" element={<FormOfPayment />} />
<Route path="entrega" element={<Delivery />} />
<Route path="troca-e-devolucao" element={<ExchangeAndEvolution />} />
<Route path="seguranca-e-privacidade" element={<SecurityAndPrivacy />} />
<Route path="contato" element={<Contact />} />
<Route path="institucional" element={<Instituicional />}>
<Route path="sobre" element={<div>Red</div>} />
<Route path="forma-de-pagamento" element={<div>batata2</div>} />
<Route path="entrega" element={<div>batata3</div>} />
<Route path="troca-e-devolucao" element={<div>batata4</div>} />
<Route path="seguranca-e-privacidade" element={<div>batata5</div>} />
<Route path="contato" element={<div>batata6</div>} />
</Route>
</Route>
</ReactRouterRoutes >
</ReactRouterRoutes>
)
}

View File

@ -1,29 +1,20 @@
import * as Yup from "yup";
import {
cpfRegex,
instaRegex,
phoneRegex
} from "./ContactValidations";
import { cpfRegex, phoneRegex, instaRegex } from "./ContactValidations";
export default Yup.object().shape({
name: Yup.string()
.min(3, "O campo deve ter no mínimo 3 caracteres")
.required("*Campo Obrigatório"),
name: Yup.string().required("*Campo Obrigatório"),
email: Yup.string()
.email()
.required("*Campo Obrigatório")
.email("E-mail inválido"),
cpf: Yup.string()
.required("*Campo Obrigatório")
.matches(cpfRegex, 'CPF inválido'),
.matches(cpfRegex, "CPF inválido")
.required("*Campo Obrigatório"),
telefone: Yup.string()
.required("*Campo Obrigatório")
.matches(phoneRegex, 'Número de telefone inválido'),
.matches(phoneRegex, "numero inválido")
.required("*Campo Obrigatório"),
instagram: Yup.string().matches(instaRegex, "conta inválida"),
data: Yup.date()
.required("*Campo Obrigatório")
.max(new Date(),'Data de nascimento inválida'),
checkbox: Yup.boolean().oneOf([true], ""),
data: Yup.date().required("*Campo Obrigatório"),
checkbox: Yup.boolean().oneOf([true], "*"),
});

View File

@ -1,4 +1,3 @@
export const phoneRegex =/^\([1-9]{2}\) [2-9][0-9]{3,4}\-[0-9]{4}$/;
export const cpfRegex = /^[0-9]{3}\.?[0-9]{3}\.?[0-9]{3}\-?[0-9]{2}$/
export const phoneRegex = /\([1-9]{2}\) [1-9]{2}\d{3}-\d{4}/;
export const cpfRegex = /\d{3}.\d{3}.\d{3}-\d{2}/;
export const instaRegex = /(?:^|[^\w])(?:@)([\w-](?:(?:[\w-]|(?:\.(?!\.))){0,28}(?:[\w-]))?)/;
export const dateRegex = /^[0-9]{1,2}.[0-9]{1,2}.[0-9]{4}$/;

28
variables.scss Normal file
View File

@ -0,0 +1,28 @@
/* fonts */
@import url("https://fonts.googleapis.com/css2?family=Tenor+Sans&display=swap");
@import url("https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;500;600;700;800&display=swap");
$font-family: "Open Sans", sans-serif;
$font-family-secundary: "Tenor Sans", sans-serif;
/* Colors */
$color-black: #000000;
$color-black2: #292929;
$color-black3: #58595B;
$color-white: #fff;
$color-gray: #6c6c6c;
$color-gray2: #7D7D7D;
$color-gray3: #f0f0f0;
$color-gray4: #8d8d8d;
$color-gray5: #e5e5e5;
$color-gray6: #C4C4C4;
$color-gray7: #e0e0e0;
$color-blue: #4267b2;
$color-blue2: #00C8FF;
$color-green: #4caf50;
$color-orange: #f15a31;

View File

@ -2100,20 +2100,6 @@
dependencies:
"@types/react" "*"
"@types/react-input-mask@^3.0.2":
version "3.0.2"
resolved "https://registry.yarnpkg.com/@types/react-input-mask/-/react-input-mask-3.0.2.tgz#60df645cdb2415c97a8f97316011eb3ede78dc1e"
integrity sha512-WTli3kUyvUqqaOLYG/so2pLqUvRb+n4qnx2He5klfqZDiQmRyD07jVIt/bco/1BrcErkPMtpOm+bHii4Oed6cQ==
dependencies:
"@types/react" "*"
"@types/react-maskedinput@^4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@types/react-maskedinput/-/react-maskedinput-4.0.6.tgz#cbb3a689d81b594b9d3bb2d359e86d1e628cb41b"
integrity sha512-rLm0t4CcCE0smsOVgZTzwT/amDDBh1sL46V+V22JIeyChibCM7Oe3TNSk66oJK0fHishDyzRg7pd+sH4sozGqg==
dependencies:
"@types/react" "*"
"@types/react@*", "@types/react@^18.0.0":
version "18.0.26"
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917"
@ -5371,13 +5357,6 @@ internal-slot@^1.0.3:
has "^1.0.3"
side-channel "^1.0.4"
invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
dependencies:
loose-envify "^1.0.0"
ip@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
@ -6490,7 +6469,7 @@ lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@ -8142,14 +8121,6 @@ react-headless-accordion@^1.0.2:
resolved "https://registry.yarnpkg.com/react-headless-accordion/-/react-headless-accordion-1.0.2.tgz#df45168fc379a9014bd7becc2f4be100af456b6e"
integrity sha512-wKBTB/+aAr9MGX5RYi3sdmKOSzevKdmbGRw9JTe7XONiHlTo+pC1OiggL9NUxp5QeQcTnX0rryhuySeGsqBfBg==
react-input-mask@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/react-input-mask/-/react-input-mask-2.0.4.tgz#9ade5cf8196f4a856dbf010820fe75a795f3eb14"
integrity sha512-1hwzMr/aO9tXfiroiVCx5EtKohKwLk/NT8QlJXHQ4N+yJJFyUuMT+zfTpLBwX/lK3PkuMlievIffncpMZ3HGRQ==
dependencies:
invariant "^2.2.4"
warning "^4.0.2"
react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
@ -9655,13 +9626,6 @@ walker@^1.0.7:
dependencies:
makeerror "1.0.12"
warning@^4.0.2:
version "4.0.3"
resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
dependencies:
loose-envify "^1.0.0"
watchpack@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"