criação das lis[
This commit is contained in:
parent
6db58fd623
commit
ebca3ec396
@ -92,6 +92,14 @@
|
||||
|
||||
}
|
||||
|
||||
@media screen and (max-width: 375px) {
|
||||
|
||||
.submenu--absolute.is-open{
|
||||
height: 339px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1024px) {
|
||||
.submenu {
|
||||
border-top: none;
|
||||
@ -107,6 +115,7 @@
|
||||
// width: 100%;
|
||||
padding: 10px 0;
|
||||
padding: 0 0 12px 16px;
|
||||
|
||||
|
||||
// text-align: center;
|
||||
color: var(--gray-400);
|
||||
@ -140,6 +149,7 @@
|
||||
.submenu--absolute.is-open {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
height: 988px;
|
||||
}
|
||||
|
||||
.submenu-links--mobile.is-open {
|
||||
|
10
desafio-5/src/components/main/assets/arrow-icon.svg
Normal file
10
desafio-5/src/components/main/assets/arrow-icon.svg
Normal file
@ -0,0 +1,10 @@
|
||||
<svg width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1_89)">
|
||||
<path d="M6.11608 3.60396L2.6762 0.164193C2.45738 -0.0547314 2.10261 -0.0547314 1.8839 0.164193C1.66517 0.382921 1.66517 0.737679 1.8839 0.95639L4.92766 4.00006L1.88398 7.04362C1.66525 7.26244 1.66525 7.61716 1.88398 7.83589C2.10271 8.0547 2.45747 8.0547 2.67629 7.83589L6.11617 4.39607C6.22553 4.28665 6.28015 4.1434 6.28015 4.00008C6.28015 3.85668 6.22543 3.71332 6.11608 3.60396Z" fill="#C4C4C4"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1_89">
|
||||
<rect width="8" height="8" fill="white" transform="matrix(1 0 0 -1 0 8)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 667 B |
3
desafio-5/src/components/main/assets/home-icon.svg
Normal file
3
desafio-5/src/components/main/assets/home-icon.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<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"/>
|
||||
</svg>
|
After Width: | Height: | Size: 848 B |
16
desafio-5/src/components/main/components/ContentMain.tsx
Normal file
16
desafio-5/src/components/main/components/ContentMain.tsx
Normal file
@ -0,0 +1,16 @@
|
||||
import React from "react";
|
||||
import style from "../style/ContentMain.module.scss";
|
||||
import { Navigation } from "./navigation";
|
||||
|
||||
const Content = () => {
|
||||
return (
|
||||
<section className={style["mainContent"]}>
|
||||
<div className={style["container"]}>
|
||||
<h1 className={style["title"]}>INSTITUCIONAL</h1>
|
||||
<Navigation />
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export { Content };
|
21
desafio-5/src/components/main/components/Lis.tsx
Normal file
21
desafio-5/src/components/main/components/Lis.tsx
Normal file
@ -0,0 +1,21 @@
|
||||
import React, { useContext } from "react";
|
||||
import { PageContext } from "../../../contexts/PageContext";
|
||||
import style from "../style/lis.module.scss";
|
||||
|
||||
interface Itext {
|
||||
text: string;
|
||||
}
|
||||
|
||||
|
||||
const Lis = ({ text }: Itext) => {
|
||||
|
||||
const { content, aba } = useContext(PageContext);
|
||||
|
||||
return (
|
||||
<li>
|
||||
<button onClick={() => aba(text)} className={`${style["item-button"]} ${content === text ? style["is-selected"]:""}`}>{text}</button>
|
||||
</li>
|
||||
);
|
||||
};
|
||||
|
||||
export { Lis };
|
33
desafio-5/src/components/main/components/Selected.tsx
Normal file
33
desafio-5/src/components/main/components/Selected.tsx
Normal file
@ -0,0 +1,33 @@
|
||||
import React, { useContext } from "react";
|
||||
import { PageContext } from "../../../contexts/PageContext";
|
||||
import { Sobre } from "./selected/sobre";
|
||||
import { Entrega } from "./selected/entrega";
|
||||
import { Troca } from "./selected/troca";
|
||||
import { FormaPagamento } from "./selected/formadepagamento";
|
||||
import { Seguranca } from "./selected/seguranca";
|
||||
// import { CustomForm } from "./selectedContent/form/Form";
|
||||
|
||||
function renderSwitch(param: string) {
|
||||
switch (param) {
|
||||
case "Sobre":
|
||||
return <Sobre />;
|
||||
case "Forma de Pagamento":
|
||||
return <FormaPagamento />;
|
||||
case "Entrega":
|
||||
return <Entrega />;
|
||||
case "Troca e Devolução":
|
||||
return <Troca />;
|
||||
case "Segurança e Privacidade":
|
||||
return <Seguranca />;
|
||||
// default:
|
||||
// return <CustomForm />;
|
||||
}
|
||||
}
|
||||
|
||||
const SelectedContent = () => {
|
||||
const { content } = useContext(PageContext);
|
||||
|
||||
return renderSwitch(content);
|
||||
};
|
||||
|
||||
export { SelectedContent };
|
22
desafio-5/src/components/main/components/breacrumbs.tsx
Normal file
22
desafio-5/src/components/main/components/breacrumbs.tsx
Normal file
@ -0,0 +1,22 @@
|
||||
import React from "react";
|
||||
import style from "../style/breadcrumbs.module.scss";
|
||||
import {ReactComponent as HomeIcon} from "../assets/home-icon.svg";
|
||||
import {ReactComponent as ArrowIcon} from "../assets/arrow-icon.svg";
|
||||
|
||||
const Breadcrumbs = () => {
|
||||
return (
|
||||
<section className={style["container"]}>
|
||||
<div className={style["breadcrumbs"]}>
|
||||
<a className={style["breadcrumbs-link"]} href="#">
|
||||
<HomeIcon />
|
||||
</a>
|
||||
<ArrowIcon />
|
||||
<a className={style["breadcrumbs-link"]} href="#">
|
||||
INSTITUCIONAL
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export { Breadcrumbs };
|
28
desafio-5/src/components/main/components/form/FieldForm.tsx
Normal file
28
desafio-5/src/components/main/components/form/FieldForm.tsx
Normal file
@ -0,0 +1,28 @@
|
||||
import React, { ReactNode } from "react";
|
||||
import { ErrorMessage, Field, FieldProps } from "formik";
|
||||
import MaskedInput, {} from "react-input-mask";
|
||||
import style from "../../../../../styles/main/form/fieldForm.module.css";
|
||||
|
||||
interface IFieldForm {
|
||||
lab: string;
|
||||
camp: string;
|
||||
place: string;
|
||||
}
|
||||
|
||||
const FieldForm = ({ lab, camp, place }: IFieldForm) => {
|
||||
return (
|
||||
<div className={style["form-inputGroup"]}>
|
||||
<label className={style["form__label"]} htmlFor={camp}>
|
||||
{lab}
|
||||
</label>
|
||||
<Field className={style["form__input"]} id={camp} name={camp} placeholder={place} />
|
||||
<ErrorMessage
|
||||
className={style["form__error"]}
|
||||
component="span"
|
||||
name={camp}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { FieldForm };
|
64
desafio-5/src/components/main/components/form/Form.tsx
Normal file
64
desafio-5/src/components/main/components/form/Form.tsx
Normal file
@ -0,0 +1,64 @@
|
||||
import React from "react";
|
||||
import { Formik, Form as FormikForm, FormikHelpers } from "formik";
|
||||
|
||||
import FormSchema from "../../../../schema/FormSchema";
|
||||
import style from "../../../../../styles/main/form/form.module.css";
|
||||
import { FieldForm } from "./FieldForm";
|
||||
import { TermForm } from "./TermForm";
|
||||
|
||||
interface IFormikValues {
|
||||
name: string;
|
||||
email: string;
|
||||
cpf: string;
|
||||
dataNascimento: string;
|
||||
telefone: string;
|
||||
instagram: string;
|
||||
}
|
||||
const initialValues = {
|
||||
name: "",
|
||||
email: "",
|
||||
cpf: "",
|
||||
dataNascimento: "",
|
||||
telefone: "",
|
||||
instagram: "",
|
||||
};
|
||||
|
||||
const CustomForm = () => {
|
||||
const handleFormikSubmit = (
|
||||
values: IFormikValues,
|
||||
actions: FormikHelpers<IFormikValues>
|
||||
) => {
|
||||
console.log(values);
|
||||
actions.resetForm();
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={style["content-selected"]}>
|
||||
<Formik
|
||||
initialValues={initialValues}
|
||||
onSubmit={handleFormikSubmit}
|
||||
validationSchema={FormSchema}
|
||||
>
|
||||
<FormikForm className={style["form"]}>
|
||||
<h2 className={style["form__title"]}>PREENCHA O FORMULÁRIO</h2>
|
||||
<FieldForm camp="name" lab="Nome" place="Seu nome Completo" />
|
||||
<FieldForm camp="email" lab="E-mail" place="Seu e-mail" />
|
||||
<FieldForm camp="cpf" lab="CPF" place="000 000 000 00" />
|
||||
<FieldForm
|
||||
camp="dataNascimento"
|
||||
lab="Data de Nascimento"
|
||||
place="00.00.0000"
|
||||
/>
|
||||
<FieldForm camp="telefone" lab="Telefone" place="(+00) 00000 0000" />
|
||||
<FieldForm camp="instagram" lab="Instagram" place="@seuuser" />
|
||||
<TermForm />
|
||||
<button className={style["form-button"]} type="submit">
|
||||
CADASTRE-SE
|
||||
</button>
|
||||
</FormikForm>
|
||||
</Formik>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { CustomForm };
|
32
desafio-5/src/components/main/components/form/TermForm.tsx
Normal file
32
desafio-5/src/components/main/components/form/TermForm.tsx
Normal file
@ -0,0 +1,32 @@
|
||||
import { ErrorMessage, Field } from "formik";
|
||||
import React from "react";
|
||||
import style from "../../../../../styles/main/form/termForm.module.css";
|
||||
|
||||
const TermForm = () => {
|
||||
return (
|
||||
<div className={style["form-term"]}>
|
||||
<div className={style["form-term__group"]}>
|
||||
<label htmlFor="term" className={style["form-term__label"]}>
|
||||
<span className={style["form-term__span"]}>*</span> Declaro que li e
|
||||
aceito
|
||||
</label>
|
||||
<div className={style["form-term__input-group"]}>
|
||||
<Field
|
||||
type="checkbox"
|
||||
name="term"
|
||||
id="term"
|
||||
className={style["form-term__input"]}
|
||||
/>
|
||||
<div className={style["form-term__input--custom"]}></div>
|
||||
</div>
|
||||
</div>
|
||||
<ErrorMessage
|
||||
name="term"
|
||||
component="span"
|
||||
className={style["form-term__error"]}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { TermForm };
|
26
desafio-5/src/components/main/components/navigation.tsx
Normal file
26
desafio-5/src/components/main/components/navigation.tsx
Normal file
@ -0,0 +1,26 @@
|
||||
import React from "react";
|
||||
import style from "../style/navigation.module.scss";
|
||||
import { Lis } from "./Lis";
|
||||
import { SelectedContent } from "./Selected";
|
||||
|
||||
const Navigation = () => {
|
||||
return (
|
||||
<div className={style["navigationContent"]}>
|
||||
<nav className={style["navigation"]}>
|
||||
<ul className={style["navigation-list"]}>
|
||||
<Lis text="Sobre" />
|
||||
<Lis text="Forma de Pagamento" />
|
||||
<Lis text="Entrega" />
|
||||
<Lis text="Troca e Devolução" />
|
||||
<Lis text="Segurança e Privacidade" />
|
||||
<Lis text="Contato" />
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
< SelectedContent />
|
||||
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { Navigation };
|
@ -0,0 +1,34 @@
|
||||
import React from "react";
|
||||
import style from "../../style/Selected.module.scss";
|
||||
|
||||
const Entrega = () => {
|
||||
return (
|
||||
<div className={style["contentSelected"]}>
|
||||
<h2 className={style["content-title"]}>Entrega</h2>
|
||||
<div className={style["content"]}>
|
||||
<p className={style["content-paragraph"]}>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
||||
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
|
||||
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
||||
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
||||
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
||||
culpa qui officia deserunt mollit anim id est laborum.
|
||||
</p>
|
||||
<p className={style["content-paragraph"]}>
|
||||
Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae
|
||||
ab illo inventore veritatis et quasi architecto beatae vitae dicta
|
||||
sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos
|
||||
qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui
|
||||
dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed
|
||||
quia non numquam eius modi tempora incidunt ut labore et dolore magnam
|
||||
aliquam quaerat voluptatem.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { Entrega };
|
@ -0,0 +1,23 @@
|
||||
import React from "react";
|
||||
import style from "../../style/Selected.module.scss";
|
||||
|
||||
const FormaPagamento = () => {
|
||||
return (
|
||||
<div className={style["contentSelected"]}>
|
||||
<h2 className={style["content-title"]}>Forma de Pagamento</h2>
|
||||
<div className={style["content"]}>
|
||||
<p className={style["content-paragraph"]}>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
||||
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
|
||||
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
||||
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
||||
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
||||
culpa qui officia deserunt mollit anim id est laborum.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { FormaPagamento };
|
@ -0,0 +1,23 @@
|
||||
import React from "react";
|
||||
import style from "../../style/Selected.module.scss";
|
||||
|
||||
const Seguranca = () => {
|
||||
return (
|
||||
<div className={style["contentSelected"]}>
|
||||
<h2 className={style["content-title"]}>Segurança e Privacidade</h2>
|
||||
<div className={style["content"]}>
|
||||
<p className={style["content-paragraph"]}>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
||||
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
|
||||
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
||||
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
||||
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
||||
culpa qui officia deserunt mollit anim id est laborum.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { Seguranca };
|
41
desafio-5/src/components/main/components/selected/sobre.tsx
Normal file
41
desafio-5/src/components/main/components/selected/sobre.tsx
Normal file
@ -0,0 +1,41 @@
|
||||
import React from "react";
|
||||
import style from "../../style/Selected.module.scss";
|
||||
|
||||
const Sobre = () => {
|
||||
return (
|
||||
<div className={style["contentSelected"]}>
|
||||
<h2 className={style["content-title"]}>Sobre</h2>
|
||||
<div className={style["content"]}>
|
||||
<p className={style["content-paragraph"]}>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
||||
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
|
||||
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
||||
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
||||
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
||||
culpa qui officia deserunt mollit anim id est laborum.
|
||||
</p>
|
||||
<p className={style["content-paragraph"]}>
|
||||
Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae
|
||||
ab illo inventore veritatis et quasi architecto beatae vitae dicta
|
||||
sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos
|
||||
qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui
|
||||
dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed
|
||||
quia non numquam eius modi tempora incidunt ut labore et dolore magnam
|
||||
aliquam quaerat voluptatem.
|
||||
</p>
|
||||
<p className={style["content-paragraph"]}>
|
||||
Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis
|
||||
suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis
|
||||
autem vel eum iure reprehenderit qui in ea voluptate velit esse quam
|
||||
nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo
|
||||
voluptas nulla pariatur?
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { Sobre };
|
41
desafio-5/src/components/main/components/selected/troca.tsx
Normal file
41
desafio-5/src/components/main/components/selected/troca.tsx
Normal file
@ -0,0 +1,41 @@
|
||||
import React from "react";
|
||||
import style from "../../style/Selected.module.scss";
|
||||
|
||||
const Troca = () => {
|
||||
return (
|
||||
<div className={style["contentSelected"]}>
|
||||
<h2 className={style["content-title"]}>Troca e Devolução</h2>
|
||||
<div className={style["content"]}>
|
||||
<p className={style["content-paragraph"]}>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
||||
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
|
||||
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
|
||||
aliquip ex ea commodo consequat. Duis aute irure dolor in
|
||||
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
||||
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
|
||||
culpa qui officia deserunt mollit anim id est laborum.
|
||||
</p>
|
||||
<p className={style["content-paragraph"]}>
|
||||
Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae
|
||||
ab illo inventore veritatis et quasi architecto beatae vitae dicta
|
||||
sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos
|
||||
qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui
|
||||
dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed
|
||||
quia non numquam eius modi tempora incidunt ut labore et dolore magnam
|
||||
aliquam quaerat voluptatem.
|
||||
</p>
|
||||
<p className={style["content-paragraph"]}>
|
||||
Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis
|
||||
suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis
|
||||
autem vel eum iure reprehenderit qui in ea voluptate velit esse quam
|
||||
nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo
|
||||
voluptas nulla pariatur?
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export { Troca };
|
14
desafio-5/src/components/main/main.tsx
Normal file
14
desafio-5/src/components/main/main.tsx
Normal file
@ -0,0 +1,14 @@
|
||||
import React from "react";
|
||||
import { Breadcrumbs } from "./components/breacrumbs";
|
||||
import { Content } from "./components/ContentMain";
|
||||
|
||||
const Main = () => {
|
||||
return (
|
||||
<main>
|
||||
<Breadcrumbs />
|
||||
<Content/>
|
||||
</main>
|
||||
);
|
||||
};
|
||||
|
||||
export { Main };
|
23
desafio-5/src/components/main/style/ContentMain.module.scss
Normal file
23
desafio-5/src/components/main/style/ContentMain.module.scss
Normal file
@ -0,0 +1,23 @@
|
||||
.container {
|
||||
padding: 0 40px 0 128px;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-family: var(--roboto);
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-size: 24px;
|
||||
line-height: 28px;
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
text-align: center;
|
||||
|
||||
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.container {
|
||||
padding: 0 16px;
|
||||
}
|
||||
}
|
42
desafio-5/src/components/main/style/Selected.module.scss
Normal file
42
desafio-5/src/components/main/style/Selected.module.scss
Normal file
@ -0,0 +1,42 @@
|
||||
.contentSelected {
|
||||
max-width: 715px;
|
||||
width: 100%;
|
||||
padding-left: 32px;
|
||||
}
|
||||
.content-title {
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
line-height: 28px;
|
||||
color: var(--black-300);
|
||||
}
|
||||
.content {
|
||||
padding-top: 12px;
|
||||
}
|
||||
.content-paragraph {
|
||||
font-weight: 400;
|
||||
font-size: 13px;
|
||||
line-height: 15px;
|
||||
color: var(--gray-600);
|
||||
|
||||
padding-bottom: 24px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.contentSelected {
|
||||
max-width: 100%;
|
||||
padding-left: 0;
|
||||
}
|
||||
.content {
|
||||
padding-top: 16px;
|
||||
}
|
||||
.content-title {
|
||||
text-align: center;
|
||||
}
|
||||
.content-paragraph {
|
||||
padding-bottom: 30px;
|
||||
|
||||
text-align: justify;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
}
|
||||
}
|
41
desafio-5/src/components/main/style/breadcrumbs.module.scss
Normal file
41
desafio-5/src/components/main/style/breadcrumbs.module.scss
Normal file
@ -0,0 +1,41 @@
|
||||
.container{
|
||||
padding: 0 40px 0 100px;
|
||||
}
|
||||
.breadcrumbs {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
|
||||
margin: 30px 0 80px;
|
||||
}
|
||||
.breadcrumbs-link {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
color: var( --gray-400);
|
||||
text-decoration: none;
|
||||
|
||||
margin: 0 8px;
|
||||
|
||||
transition: color .2s linear;
|
||||
}
|
||||
.breadcrumbs-link svg{
|
||||
transition: fill .2s linear;
|
||||
}
|
||||
.breadcrumbs-link svg:hover{
|
||||
fill: var(--black-300)
|
||||
}
|
||||
.breadcrumbs-link:hover{
|
||||
color: var(--black-300);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.container{
|
||||
padding: 0 16px 0 8px;
|
||||
}
|
||||
.breadcrumbs {
|
||||
margin: 16px 0 32px;
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
.form-inputGroup {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
}
|
||||
.form__label {
|
||||
margin-left: 14px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
line-height: 23px;
|
||||
color: var(--black-400);
|
||||
padding: 12px 0 4px;
|
||||
}
|
||||
.form__input {
|
||||
border: 1px solid var(--black-400);
|
||||
border-radius: 25px;
|
||||
padding: 12px 28px;
|
||||
}
|
||||
.form__input::placeholder {
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
line-height: 23px;
|
||||
color: var(--gray-500);
|
||||
}
|
||||
.form__error{
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
right: 0;
|
||||
color: #dc143c;
|
||||
font-size: 12px;
|
||||
}
|
54
desafio-5/src/components/main/style/form/form.module.css
Normal file
54
desafio-5/src/components/main/style/form/form.module.css
Normal file
@ -0,0 +1,54 @@
|
||||
.content-selected {
|
||||
max-width: 715px;
|
||||
width: 100%;
|
||||
}
|
||||
.form{
|
||||
max-width: 390px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.form__title {
|
||||
font-size: 24px;
|
||||
line-height: 23px;
|
||||
font-weight: 400;
|
||||
color: var(--black-500);
|
||||
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
.form-button {
|
||||
width: 100%;
|
||||
padding: 8px 0;
|
||||
background: var(--blue-400);
|
||||
|
||||
border-radius: 25px;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
|
||||
font-family: "Montserrat", sans-serif;
|
||||
font-size: 16px;
|
||||
line-height: 34px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.05em;
|
||||
color: white;
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
@media screen and (max-width: 1024px) {
|
||||
.content-selected{
|
||||
margin-left: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.form{
|
||||
max-width: 100%;
|
||||
}
|
||||
.form__title {
|
||||
font-size: 18px;
|
||||
line-height: 18px;
|
||||
text-align: center;
|
||||
}
|
||||
.content-selected{
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
70
desafio-5/src/components/main/style/form/termForm.module.css
Normal file
70
desafio-5/src/components/main/style/form/termForm.module.css
Normal file
@ -0,0 +1,70 @@
|
||||
.form-term {
|
||||
padding: 20px 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
-webkit-touch-callout: none;
|
||||
user-select: none;
|
||||
}
|
||||
.form-term__group {
|
||||
display: flex;
|
||||
}
|
||||
.form-term__label {
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
line-height: 23px;
|
||||
text-decoration: underline;
|
||||
color: var(--black-400);
|
||||
cursor: pointer;
|
||||
}
|
||||
.form-term__span {
|
||||
color: var(--blue-500);
|
||||
cursor: help;
|
||||
}
|
||||
.form-term__input-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
margin-left: 12px;
|
||||
}
|
||||
.form-term__input {
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
cursor: pointer;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
}
|
||||
.form-term__input--custom {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
border: 1px solid #000000;
|
||||
border-radius: 3px;
|
||||
position: relative;
|
||||
pointer-events: none;
|
||||
}
|
||||
.form-term__input--custom::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
display: none;
|
||||
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border-radius: 3px;
|
||||
background-color: var(--blue-500);
|
||||
}
|
||||
|
||||
.form-term__input:checked ~ .form-term__input--custom::after {
|
||||
display: block;
|
||||
}
|
||||
.form-term__error {
|
||||
color: #dc143c;
|
||||
font-size: 12px;
|
||||
margin-top: 5px;
|
||||
}
|
32
desafio-5/src/components/main/style/lis.module.scss
Normal file
32
desafio-5/src/components/main/style/lis.module.scss
Normal file
@ -0,0 +1,32 @@
|
||||
.item-button {
|
||||
width: 100%;
|
||||
outline: 0;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
cursor: pointer;
|
||||
|
||||
font-family: var(--roboto);
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-size: 16px;
|
||||
line-height: 19px;
|
||||
color: var(--gray-600);
|
||||
text-align: left;
|
||||
|
||||
padding: 10px 16px;
|
||||
transition: all .2s ease-in-out;
|
||||
}
|
||||
|
||||
.item-button:hover:not(.is-selected) {
|
||||
background-color: var(--gray-200);
|
||||
color: var(--black-500);
|
||||
}
|
||||
|
||||
.is-selected {
|
||||
font-weight: 700;
|
||||
font-size: 16px;
|
||||
line-height: 19px;
|
||||
|
||||
background-color: var(--blue-500);
|
||||
color: #fff;
|
||||
}
|
29
desafio-5/src/components/main/style/navigation.module.scss
Normal file
29
desafio-5/src/components/main/style/navigation.module.scss
Normal file
@ -0,0 +1,29 @@
|
||||
.navigationContent {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
width: 100%;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.navigation {
|
||||
max-width: 270px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.navigation-list {
|
||||
border-right: 1px solid var(--gray-300);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.navigationContent{
|
||||
flex-direction: column;
|
||||
margin-top: 22px;
|
||||
}
|
||||
.navigation{
|
||||
max-width: 100%;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.navigation-list{
|
||||
border: none;
|
||||
}
|
||||
}
|
@ -44,11 +44,7 @@ import {
|
||||
ENVIAR
|
||||
</button>
|
||||
</div>
|
||||
<ErrorMessage
|
||||
className={style["form__error"]}
|
||||
component="span"
|
||||
name="email"
|
||||
/>
|
||||
|
||||
</FormikForm>
|
||||
</Formik>
|
||||
</div>
|
||||
|
@ -87,10 +87,7 @@
|
||||
// background-color: var(--blue-500);
|
||||
// }
|
||||
|
||||
.form__error {
|
||||
color: #dc143c;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width: 1024px) {
|
||||
|
||||
|
@ -4,6 +4,7 @@ import { Header } from "../components/Header/header"
|
||||
import { Footer } from "../components/Footer/footer"
|
||||
import { Informacoes } from "../components/informacoes/informacoes"
|
||||
import { Newsletter } from "../components/news/news"
|
||||
import { Main } from "../components/main/main";
|
||||
|
||||
|
||||
const Home = () => {
|
||||
@ -11,6 +12,7 @@ const Home = () => {
|
||||
<>
|
||||
|
||||
< Header />
|
||||
< Main/>
|
||||
< Newsletter/>
|
||||
|
||||
|
||||
|
25
desafio-5/src/schema/FormSchema.ts
Normal file
25
desafio-5/src/schema/FormSchema.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import * as Yup from "yup";
|
||||
import "yup-phone";
|
||||
import { parse } from "date-fns";
|
||||
import CPF from "cpf";
|
||||
|
||||
export default Yup.object().shape({
|
||||
name: Yup.string().min(3, "Nome inválido").required("Campo obrigatório"),
|
||||
email: Yup.string().email("Email inválido").required("Campo obrigatório"),
|
||||
telefone: Yup.string()
|
||||
.required("Campo obrigatório")
|
||||
.phone("BR", true, "Telefone Inválido"),
|
||||
instagram: Yup.string().min(3, "Instagram inválido").required("Campo Obrigatório"),
|
||||
dataNascimento: Yup.date()
|
||||
.transform((value, originalValue, context) => {
|
||||
if (context.isType(value)) return value;
|
||||
return parse(originalValue, "dd.MM.yyyy", new Date());
|
||||
})
|
||||
.typeError("Data Inválida")
|
||||
.max(new Date(), "Data Inválida")
|
||||
.required("Campo Obrigatório"),
|
||||
cpf: Yup.string()
|
||||
.required("Campo Obrigatório")
|
||||
.test("test-cpf", "Cpf inválido", (cpf) => CPF.isValid(cpf!)),
|
||||
term: Yup.bool().oneOf([true], 'Termo Obrigatório')
|
||||
});
|
Loading…
Reference in New Issue
Block a user