Compare commits

...

37 Commits

Author SHA1 Message Date
498f753aed Merge pull request 'development' (#23) from development into main
Reviewed-on: #23
2023-01-19 17:30:56 +00:00
8741c594da Merge pull request 'feature/ajuste4k' (#22) from feature/ajuste4k into development
Reviewed-on: #22
2023-01-19 17:30:05 +00:00
4940f388ca fix: ajuste de tamanho em telas 4k e links redirecionando redes sociais 2023-01-19 14:28:49 -03:00
52120f48d3 Merge pull request 'development' (#21) from development into main
Reviewed-on: #21
2023-01-19 02:44:28 +00:00
29768e017b Merge pull request 'fix: corrige rota no breadcrumb' (#20) from feature/ajustBreadcrumb into development
Reviewed-on: #20
2023-01-19 02:40:34 +00:00
e0452d65e4 fix: corrige rota no breadcrumb 2023-01-18 23:39:26 -03:00
a214d04e1d Merge pull request 'fix: corrige erro inicial das rotas do projeto' (#19) from feature/ajusteDeRotas into development
Reviewed-on: #19
2023-01-19 02:29:23 +00:00
0d1b3d715f Merge pull request 'style: organização e padronizacao de arquivos scss, para utilizar variaveis de cor e de tamanho' (#18) from feature/padronizacaoSASS into development
Reviewed-on: #18
2023-01-19 02:27:23 +00:00
f3e844d4df fix: corrige erro inicial das rotas do projeto 2023-01-18 23:14:35 -03:00
b07ad66065 style: organização e padronizacao de arquivos scss, para utilizar variaveis de cor e de tamanho 2023-01-18 22:13:54 -03:00
6374c3c05b Merge pull request 'feature/ajustesFinos' (#17) from feature/ajustesFinos into development
Reviewed-on: #17
2023-01-18 06:13:25 +00:00
ff0a880329 Merge pull request 'feat: cria botão de scroll para o topo e botao de redirecionar ao whatsapp' (#16) from feature/whatsESeta into development
Reviewed-on: #16
2023-01-18 06:13:11 +00:00
1391d1a151 Merge pull request 'fix: ajusta tamanho de espaçamento em telas 4k' (#15) from feature/ajusteFooter into development
Reviewed-on: #15
2023-01-18 06:12:25 +00:00
8846de48db Merge pull request 'fix: ajusta responsividade em telas acima de 2500' (#14) from feature/organizationContactFormResponsive into development
Reviewed-on: #14
2023-01-18 06:11:20 +00:00
2465e22cf6 fix: ajuste de rotas da spa 2023-01-18 03:08:18 -03:00
722e701fb5 feat: cria botão de scroll para o topo e botao de redirecionar ao whatsapp 2023-01-18 01:00:26 -03:00
19854a0f24 fix: ajusta tamanho de espaçamento em telas 4k 2023-01-17 23:05:21 -03:00
576b376c71 fix: ajusta responsividade em telas acima de 2500 2023-01-17 22:40:59 -03:00
1bd92c572b Merge pull request 'fix: ajuste de formulario de contato' (#13) from feature/organizationContactForm into development
Reviewed-on: #13
2023-01-18 01:08:19 +00:00
d910b1efba fix: ajuste de formulario de contato 2023-01-17 22:04:40 -03:00
78a6ea6b5d Merge pull request 'fix: Corrige alinha mente e responsividade dos conteudos dentro do main' (#12) from feature/responsiveArticle into development
Reviewed-on: #12
2023-01-16 19:26:31 +00:00
665c8e72e1 fix: Corrige alinha mente e responsividade dos conteudos dentro do main 2023-01-16 16:24:31 -03:00
70428932e3 Merge pull request 'feat: criar componente de paginas q serao renderizadas na rotas' (#11) from feature/contentArticle into development
Reviewed-on: #11
2023-01-16 15:17:58 +00:00
a116dea3f6 Merge pull request 'feat: cria rotas para subpastas de institucional' (#10) from feature/router into development
Reviewed-on: #10
2023-01-16 15:16:57 +00:00
5fca2d2bcc Merge pull request 'feat: cria formulario, validação e regex do formulario' (#9) from feature/createForm into development
Reviewed-on: #9
2023-01-16 15:15:40 +00:00
fe2296af78 Merge pull request 'feat: cria organizacao base das pastas e arquivos da parte centrar da SPA' (#8) from feature/mainAreaOrganizationFiles into development
Reviewed-on: #8
2023-01-16 15:14:09 +00:00
48c523599a feat: criar componente de paginas q serao renderizadas na rotas 2023-01-16 12:10:48 -03:00
a2f0995df5 feat: cria rotas para subpastas de institucional 2023-01-15 23:27:54 -03:00
4e339aac77 feat: cria formulario, validação e regex do formulario 2023-01-15 10:48:09 -03:00
58c0040a67 feat: cria organizacao base das pastas e arquivos da parte centrar da SPA 2023-01-14 11:06:03 -03:00
65f02271cd Merge pull request 'fix: corrige organização das pastas do footer e componente do Accordion' (#7) from feature/organizationComponentFooter into development
Reviewed-on: #7
2023-01-13 16:23:43 +00:00
d842468f5a Merge pull request 'feat: cria componente accordion do footer' (#6) from feature/footerAccordion into development
Reviewed-on: #6
2023-01-13 16:23:11 +00:00
aec42122f0 Merge pull request 'feat: cria componente das midias sociais do footer' (#5) from feature/footerSocialMedias into development
Reviewed-on: #5
2023-01-13 16:22:18 +00:00
eea65b1334 Merge pull request 'feat: cria area da newsletter da pagina, com responsividade' (#4) from feature/NewsLetter into development
Reviewed-on: #4
2023-01-12 02:30:01 +00:00
2b6a155e32 Merge pull request 'feat: cria estrutura base do footer da pagina e todo o rodape da pagina responsivo' (#3) from feature/footer into development
Reviewed-on: #3
2023-01-12 02:29:17 +00:00
586dddb142 Merge pull request 'feat: cria componentes para o header, menu hamburguer e header totalmente responsivo' (#2) from feature/header into development
Reviewed-on: #2
2023-01-12 02:28:24 +00:00
da2e066140 Merge pull request 'feat: cria organizacao de pastas e arquivos base do projeto' (#1) from feature/filesOrganization into development
Reviewed-on: #1
2023-01-12 02:27:19 +00:00
52 changed files with 1490 additions and 229 deletions

View File

@ -10,13 +10,19 @@
"@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",
"web-vitals": "^2.1.0"
"web-vitals": "^2.1.0",
"yup": "^0.32.11"
},
"scripts": {
"start": "react-scripts start",

View File

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

View File

@ -0,0 +1,36 @@
import React from "react";
import homeIcon from "./assets/svgs/home.svg"
import arrowRight from "./assets/svgs/arrow-right.svg"
import { useLocation, Link } from "react-router-dom"
import styles from "./BreadCrumb.module.scss"
export const BreadCrumb = () => {
const { pathname } = useLocation()
const routeName = pathname.split("/")[1]
return (
<nav >
{pathname !== "/" && (
<ul className={styles["breadNav"]}>
<li className={styles["navItem"]}>
<Link to="/institucional/sobre">
<img src={homeIcon} alt="Icone de home" />
</Link>
</li>
<li className={styles["navItem"]}>
<img src={arrowRight} alt="Icone de seta para a direita" />
<span className={styles["routeName"]}>
{routeName}
</span>
</li>
</ul>
)}
</nav>
);
}

View File

@ -0,0 +1,62 @@
@import "../../variaveis";
.breadNav {
display: flex;
gap: 12px;
align-items: center;
margin: 0 100px;
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 {
display: flex;
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-style: normal;
font-weight: 400;
font-size: 12px;
line-height: 14px;
color: $color-gray6;
text-transform: uppercase;
@media (min-width:$full) {
font-size: 24px;
line-height: 28px;
}
}

View File

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

After

Width:  |  Height:  |  Size: 669 B

View File

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

After

Width:  |  Height:  |  Size: 986 B

View File

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

View File

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

View File

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

View File

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

View File

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

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

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

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

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

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

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

After

Width:  |  Height:  |  Size: 764 B

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_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>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -4,17 +4,20 @@ 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 (
<div className={styleFooter["footer"]}>
<footer className={styleFooter["footer"]}>
<NewsLetter />
<div className={styleFooter["footer__middle"]}>
<AccordionFooter />
<SocialMedia />
<Buttons />
</div>
<Rodape />
</div >
</footer >
);
}

View File

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

View File

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

View File

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

View File

@ -1,3 +1,5 @@
@import "../../../variaveis";
.wrapper {
@media (max-width:1025px) {
padding: 0 16px;
@ -10,7 +12,7 @@
max-width: 215px;
padding: 0;
@media (min-width: 2500px) {
@media (min-width: $full) {
max-width: 390px;
}
@ -22,7 +24,7 @@
width: 35px;
height: 35px;
@media (min-width: 2500px) {
@media (min-width: $full) {
width: 70px;
height: 70px;
}
@ -43,7 +45,7 @@
text-transform: lowercase;
@media (min-width:2500px) {
@media (min-width:$full) {
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={""}
<IconLink link={"https://web.facebook.com/digitalm3"}
sourceImg={facebook}
altText="Logo da rede social "
/>
<IconLink link={""}
<IconLink link={"https://www.instagram.com/m3.ecommerce/"}
sourceImg={instagram}
altText="Logo da rede social "
/>
<IconLink link={""}
<IconLink link={"https://twitter.com/eCommerce_Br/status/1443210495784366089"}
sourceImg={twitter}
altText="Logo da rede social "
/>
<IconLink link={""}
<IconLink link={"https://www.youtube.com/@m3e-commerce796"}
sourceImg={youtube}
altText="Logo da rede social "
/>
<IconLink link={""}
<IconLink link={"https://www.linkedin.com/company/m3ecommerce/"}
sourceImg={linkedin}
altText="Logo da rede social "
/>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,25 @@
import { Outlet } from "react-router-dom"
import { Footer } from "../Footer/Footer"
import { Header } from "../Header/Header"
import { BreadCrumb } from "../BreadCrumb/BreadCreumb"
import styles from "./styles.module.scss"
export const Layout = () => {
return (
<div className={styles["container"]}>
<Header />
<BreadCrumb />
<main className={styles["main"]}>
<Outlet />
</main>
<Footer />
</div >
)
}

View File

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

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

View File

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

View File

@ -1,12 +1,16 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import { Home } from './pages/Home';
import './index.css';
import { BrowserRouter } from "react-router-dom"
import { Routes } from './routes';
function App() {
return (
<Home />
<BrowserRouter>
<Routes />
</BrowserRouter>
);
}

View File

@ -1,16 +1,18 @@
import React from "react";
import { Footer } from "../components/Footer/Footer";
import { Rodape } from "../components/Footer/Rodape/Rodape";
import { Header } from "../components/Header/Header";
import styles from "./styles.module.scss"
export const Home = () => {
return (
<>
<Header />
<Footer />
</>
<div className={styles["container"]}>
<h1>HOME</h1>
</div >
)
}

View File

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

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

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

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

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

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

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

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

@ -0,0 +1,71 @@
import { NavLink, Outlet } from "react-router-dom";
import styleInstitucional from "./Instituitional.module.scss"
export const Institucional = () => {
return (
<>
<h1>Institucional</h1>
<div className={styleInstitucional["wrapper__sideBar"]}>
<nav>
<ul className={styleInstitucional["sideBar"]}>
<NavLink
to="sobre"
className={({ isActive }) =>
isActive ? `${styleInstitucional["sideBar__item"]} ${styleInstitucional["ativo"]}` : styleInstitucional["sideBar__item"]
}>
Sobre
</NavLink>
<NavLink
to="forma-de-pagamento"
className={({ isActive }) =>
isActive ? `${styleInstitucional["sideBar__item"]} ${styleInstitucional["ativo"]}` : styleInstitucional["sideBar__item"]
}>
Forma de Pagamento
</NavLink>
<NavLink
to="entrega"
className={({ isActive }) =>
isActive ? `${styleInstitucional["sideBar__item"]} ${styleInstitucional["ativo"]}` : styleInstitucional["sideBar__item"]
}>
Entrega
</NavLink>
<NavLink
to="troca-e-devolucao"
className={({ isActive }) =>
isActive ? `${styleInstitucional["sideBar__item"]} ${styleInstitucional["ativo"]}` : styleInstitucional["sideBar__item"]
}>
Troca e Devolução
</NavLink>
<NavLink
to="seguranca-e-privacidade"
className={({ isActive }) =>
isActive ? `${styleInstitucional["sideBar__item"]} ${styleInstitucional["ativo"]}` : styleInstitucional["sideBar__item"]
}>
Segurança e Privacidade
</NavLink>
<NavLink
to="contato"
className={({ isActive }) =>
isActive ? `${styleInstitucional["sideBar__item"]} ${styleInstitucional["ativo"]}` : styleInstitucional["sideBar__item"]
}>
Contato
</NavLink>
</ul>
</nav>
<div className={styleInstitucional["content-right"]} >
<Outlet />
</div>
</div>
</>
)
}

View File

@ -0,0 +1,60 @@
@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;
}
}
}

35
src/routes.tsx Normal file
View File

@ -0,0 +1,35 @@
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 { Layout } from "./components/Layout"
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>
</Route>
</ReactRouterRoutes >
)
}

View File

@ -0,0 +1,29 @@
import * as Yup from "yup";
import {
cpfRegex,
instaRegex,
phoneRegex
} 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"),
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'),
telefone: Yup.string()
.required("*Campo Obrigatório")
.matches(phoneRegex, 'Número de telefone inválido'),
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], ""),
});

View File

@ -0,0 +1,4 @@
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 instaRegex = /(?:^|[^\w])(?:@)([\w-](?:(?:[\w-]|(?:\.(?!\.))){0,28}(?:[\w-]))?)/;
export const dateRegex = /^[0-9]{1,2}.[0-9]{1,2}.[0-9]{4}$/;

View File

@ -1,28 +0,0 @@
/* 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;

137
yarn.lock
View File

@ -1036,7 +1036,7 @@
core-js-pure "^3.25.1"
regenerator-runtime "^0.13.11"
"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd"
integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==
@ -1612,6 +1612,11 @@
schema-utils "^3.0.0"
source-map "^0.7.3"
"@remix-run/router@1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.2.1.tgz#812edd4104a15a493dda1ccac0b352270d7a188c"
integrity sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==
"@rollup/plugin-babel@^5.2.0":
version "5.3.1"
resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
@ -2028,6 +2033,11 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
"@types/lodash@^4.14.175":
version "4.14.191"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa"
integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==
"@types/mime@*":
version "3.0.1"
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
@ -2090,6 +2100,20 @@
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"
@ -3752,6 +3776,11 @@ deep-is@^0.1.3, deep-is@~0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
deepmerge@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170"
integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==
deepmerge@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
@ -4709,6 +4738,19 @@ form-data@^3.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
formik@^2.2.9:
version "2.2.9"
resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0"
integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==
dependencies:
deepmerge "^2.1.1"
hoist-non-react-statics "^3.3.0"
lodash "^4.17.21"
lodash-es "^4.17.21"
react-fast-compare "^2.0.1"
tiny-warning "^1.0.2"
tslib "^1.10.0"
forwarded@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
@ -5046,6 +5088,13 @@ he@^1.2.0:
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
hoist-non-react-statics@^3.3.0:
version "3.3.2"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
dependencies:
react-is "^16.7.0"
hoopy@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
@ -5322,6 +5371,13 @@ 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"
@ -6399,6 +6455,11 @@ locate-path@^6.0.0:
dependencies:
p-locate "^5.0.0"
lodash-es@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
@ -6429,7 +6490,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.1.0, loose-envify@^1.4.0:
loose-envify@^1.0.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==
@ -6796,6 +6857,11 @@ nan@^2.17.0:
resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb"
integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==
nanoclone@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4"
integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==
nanoid@^3.3.4:
version "3.3.4"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
@ -7927,6 +7993,11 @@ prop-types@^15.8.1:
object-assign "^4.1.1"
react-is "^16.13.1"
property-expr@^2.0.4:
version "2.0.5"
resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.5.tgz#278bdb15308ae16af3e3b9640024524f4dc02cb4"
integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==
proxy-addr@~2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
@ -8061,12 +8132,25 @@ react-error-overlay@^6.0.11:
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==
react-fast-compare@^2.0.1:
version "2.0.4"
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
react-headless-accordion@^1.0.2:
version "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-is@^16.13.1:
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"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@ -8086,6 +8170,21 @@ react-refresh@^0.11.0:
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046"
integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==
react-router-dom@^6.6.2:
version "6.6.2"
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.6.2.tgz#bbf1f9b45855b218d22fc2d294b79408a084740a"
integrity sha512-6SCDXxRQqW5af8ImOqKza7icmQ47/EMbz572uFjzvcArg3lZ+04PxSPp8qGs+p2Y+q+b+S/AjXv8m8dyLndIIA==
dependencies:
"@remix-run/router" "1.2.1"
react-router "6.6.2"
react-router@6.6.2:
version "6.6.2"
resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.6.2.tgz#556f7b56cff7fe32c5c02429fef3fcb2ecd08111"
integrity sha512-uJPG55Pek3orClbURDvfljhqFvMgJRo59Pktywkk8hUUkTY2aRfza8Yhl/vZQXs+TNQyr6tu+uqz/fLxPICOGQ==
dependencies:
"@remix-run/router" "1.2.1"
react-scripts@5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003"
@ -9200,6 +9299,11 @@ thunky@^1.0.2:
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
tiny-warning@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
tmpl@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
@ -9222,6 +9326,11 @@ toidentifier@1.0.1:
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
toposort@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==
tough-cookie@^4.0.0:
version "4.1.2"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874"
@ -9271,7 +9380,7 @@ tsconfig-paths@^3.14.1:
minimist "^1.2.6"
strip-bom "^3.0.0"
tslib@^1.8.1:
tslib@^1.10.0, tslib@^1.8.1:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
@ -9546,6 +9655,13 @@ 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"
@ -10072,3 +10188,16 @@ yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
yup@^0.32.11:
version "0.32.11"
resolved "https://registry.yarnpkg.com/yup/-/yup-0.32.11.tgz#d67fb83eefa4698607982e63f7ca4c5ed3cf18c5"
integrity sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==
dependencies:
"@babel/runtime" "^7.15.4"
"@types/lodash" "^4.14.175"
lodash "^4.17.21"
lodash-es "^4.17.21"
nanoclone "^0.2.1"
property-expr "^2.0.4"
toposort "^2.0.2"