diff --git a/package-lock.json b/package-lock.json index ed7cc4b..03fc9ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-modal": "^3.16.1", + "react-router-dom": "^6.6.1", "react-scripts": "5.0.1", "typescript": "^4.9.4", "web-vitals": "^2.1.4", @@ -3119,6 +3120,14 @@ } } }, + "node_modules/@remix-run/router": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", + "integrity": "sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==", + "engines": { + "node": ">=14" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -15126,6 +15135,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.6.1.tgz", + "integrity": "sha512-YkvlYRusnI/IN0kDtosUCgxqHeulN5je+ew8W+iA1VvFhf86kA+JEI/X/8NqYcr11hCDDp906S+SGMpBheNeYQ==", + "dependencies": { + "@remix-run/router": "1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.1.tgz", + "integrity": "sha512-u+8BKUtelStKbZD5UcY0NY90WOzktrkJJhyhNg7L0APn9t1qJNLowzrM9CHdpB6+rcPt6qQrlkIXsTvhuXP68g==", + "dependencies": { + "@remix-run/router": "1.2.1", + "react-router": "6.6.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -20602,6 +20641,11 @@ "source-map": "^0.7.3" } }, + "@remix-run/router": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", + "integrity": "sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==" + }, "@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -29245,6 +29289,23 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" }, + "react-router": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.6.1.tgz", + "integrity": "sha512-YkvlYRusnI/IN0kDtosUCgxqHeulN5je+ew8W+iA1VvFhf86kA+JEI/X/8NqYcr11hCDDp906S+SGMpBheNeYQ==", + "requires": { + "@remix-run/router": "1.2.1" + } + }, + "react-router-dom": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.1.tgz", + "integrity": "sha512-u+8BKUtelStKbZD5UcY0NY90WOzktrkJJhyhNg7L0APn9t1qJNLowzrM9CHdpB6+rcPt6qQrlkIXsTvhuXP68g==", + "requires": { + "@remix-run/router": "1.2.1", + "react-router": "6.6.1" + } + }, "react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", diff --git a/package.json b/package.json index d132605..b108498 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-modal": "^3.16.1", + "react-router-dom": "^6.6.1", "react-scripts": "5.0.1", "typescript": "^4.9.4", "web-vitals": "^2.1.4", diff --git a/src/components/Footer/ButtonFloat/ButtonFloat.module.scss b/src/components/Footer/ButtonFloat/ButtonFloat.module.scss new file mode 100644 index 0000000..6d40543 --- /dev/null +++ b/src/components/Footer/ButtonFloat/ButtonFloat.module.scss @@ -0,0 +1,45 @@ +.wrapper { + position: fixed; + bottom: 170px; + right: 16px; + width: 34px; + height: 34px; + background: var(--gray-100); + border-radius: 50%; + -webkit-animation: wrapper 0.6s cubic-bezier(0.39, 0.575, 0.565, 1) both; + animation: wrapper 0.6s cubic-bezier(0.39, 0.575, 0.565, 1) both; + @media (max-width: 1024px) { + bottom: 32px; + } + + &__iconArrow { + position: fixed; + left: 11px; + top: 12px; + } +} + +@-webkit-keyframes wrapper { + 0% { + -webkit-transform: translateY(-50px); + transform: translateY(-50px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@keyframes wrapper { + 0% { + -webkit-transform: translateY(-50px); + transform: translateY(-50px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} diff --git a/src/components/Footer/ButtonFloat/ButtonFloat.tsx b/src/components/Footer/ButtonFloat/ButtonFloat.tsx new file mode 100644 index 0000000..931ffdd --- /dev/null +++ b/src/components/Footer/ButtonFloat/ButtonFloat.tsx @@ -0,0 +1,32 @@ +import React, { useEffect, useState } from "react" +import styleButton from "./ButtonFloat.module.scss" +import { ReactComponent as IconArrowTop } from "../assets/arrowTop.svg" + + + +const ButtonFloat = () => { + + const [scrollPage, setScrollPage] = useState(0); + + useEffect(() => { + window.addEventListener("scroll", scrollTop) + }, [scrollPage]); + + const scrollTop = () => { + setScrollPage(window.scrollY); + } + + const subirTop = () => { + setScrollPage(0) + window.scrollTo(0, 0); + } + + return ( +
+ +
+ ) + +} + +export { ButtonFloat } \ No newline at end of file diff --git a/src/components/Footer/Footer.module.scss b/src/components/Footer/Footer.module.scss deleted file mode 100644 index 8b13789..0000000 --- a/src/components/Footer/Footer.module.scss +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/components/Footer/FooterSelosDev/FooterSelosDev.module.scss b/src/components/Footer/FooterSelosDev/FooterSelosDev.module.scss index 65e8a61..14ef7f9 100644 --- a/src/components/Footer/FooterSelosDev/FooterSelosDev.module.scss +++ b/src/components/Footer/FooterSelosDev/FooterSelosDev.module.scss @@ -15,6 +15,8 @@ &__text { width: 21.667%; min-height: 24px; + display: flex; + align-items: center; @media (max-width: 1024px) { margin: 15px 0; @@ -63,10 +65,18 @@ height: 34px; align-items: center; + @media (max-width: 1024px) { + height: 28px; + } + @media (min-width: 2500px) { height: 66px; } + .vtexCertified { + margin: 0; + } + li { margin-right: 12px; @@ -74,17 +84,30 @@ margin-right: 11px; } + @media (min-width: 2500px) { + height: 39.27px; + } + figure { height: 34px; display: flex; align-items: center; + @media (max-width: 1024px) { + height: 28px; + } + + @media (min-width: 2500px) { + height: 39.27px; + } + img { width: 35px; height: 20px; @media (max-width: 1024px) { width: 100%; + width: 30px; height: 17px; } @@ -97,6 +120,7 @@ .img-vtexCertified { width: 54.61px; height: 34px; + margin: 0 !important; @media (max-width: 1024px) { width: 45px; @@ -134,6 +158,10 @@ width: 100%; } + @media (min-width: 2500px) { + width: 404.17px; + } + div:nth-child(1) { margin-right: 13px; } @@ -144,7 +172,6 @@ p { margin-right: 13px; - font-weight: 400; font-size: 10px; line-height: 12px; @@ -155,6 +182,7 @@ @media (min-width: 2500px) { font-size: 20px; line-height: 23px; + text-transform: none; } } diff --git a/src/components/Footer/FooterSelosDev/FooterSelosDev.tsx b/src/components/Footer/FooterSelosDev/FooterSelosDev.tsx index 60647f6..b0a9a5a 100644 --- a/src/components/Footer/FooterSelosDev/FooterSelosDev.tsx +++ b/src/components/Footer/FooterSelosDev/FooterSelosDev.tsx @@ -12,6 +12,8 @@ import vtexCertifiedCard from "./assets/vtex.svg" import vtexDev from "./assets/vtex-dev.svg" import m3 from "./assets/m3.svg" +import { ButtonFloat } from "../ButtonFloat/ButtonFloat" +import { PhoneFloat } from "../PhoneFloat/PhoneFloat" export const FooterSelosDev = () => { @@ -68,7 +70,7 @@ export const FooterSelosDev = () => { -
  • +
  • Imagem Vetex Certified
    @@ -85,13 +87,15 @@ export const FooterSelosDev = () => {
    -

    Developed By

    +

    Developed by

    Imagem M3
    + + ) } diff --git a/src/components/Footer/LinksFooter/Links/Link.tsx b/src/components/Footer/LinksFooter/Links/Link.tsx deleted file mode 100644 index d57b0d6..0000000 --- a/src/components/Footer/LinksFooter/Links/Link.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from "react"; - -interface linkProps { - children?: React.ReactNode; - text?: string; - href: string; -} - -export const Link = (props: linkProps) => { - - const { href, text, children } = props; - - return
  • {text}{children}
  • -} - -export default Link; \ No newline at end of file diff --git a/src/components/Footer/LinksFooter/LinksComponent/Link.tsx b/src/components/Footer/LinksFooter/LinksComponent/Link.tsx new file mode 100644 index 0000000..40516c7 --- /dev/null +++ b/src/components/Footer/LinksFooter/LinksComponent/Link.tsx @@ -0,0 +1,17 @@ +import React from "react"; + +interface linkProps { + children?: React.ReactNode; + text?: string; + href: string; + className?: string; +} + +const Link = (props: linkProps) => { + + const { href, text, children, className } = props; + + return
  • {text}{children}
  • +} + +export { Link }; \ No newline at end of file diff --git a/src/components/Footer/LinksFooter/LinksFooter.module.scss b/src/components/Footer/LinksFooter/LinksFooter.module.scss index 15f330e..1ee1979 100644 --- a/src/components/Footer/LinksFooter/LinksFooter.module.scss +++ b/src/components/Footer/LinksFooter/LinksFooter.module.scss @@ -30,6 +30,8 @@ @media (max-width: 1024px) { display: flex; justify-content: space-between; + height: 17px; + width: 100%; } button { @@ -57,6 +59,7 @@ &__institucional { width: 155px; list-style: none; + animation: scale-up-tl 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) both; @media (max-width: 1024px) { width: 100%; @@ -98,6 +101,7 @@ &__duvidas { list-style: none; + animation: scale-up-tl 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) both; @media (max-width: 1024px) { margin: 12px 0; @@ -141,6 +145,7 @@ &__fale-conosco { width: 155px; list-style: none; + animation: scale-up-tl 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) both; @media (max-width: 1024px) { width: 100%; @@ -228,7 +233,7 @@ @media (max-width: 1024px) { width: 100%; - display: flex; + display: block; justify-content: flex-start; } @@ -237,6 +242,11 @@ justify-content: flex-end; list-style: none; + @media (max-width: 1024px) { + width: 100%; + justify-content: flex-start; + } + li:last-child { margin-right: 0; } @@ -335,10 +345,15 @@ &__lorem { margin-top: 12px; display: flex; - justify-content: flex-end; + justify-content: center; + @media (min-width: 1025px) { + width: 140px; + position: fixed; + right: 175px; + } @media (max-width: 1024px) { - display: none; + display: block; } p { font-weight: 400; @@ -355,3 +370,14 @@ } } } + +@keyframes scale-up-tl { + 0% { + transform: scale(0.5); + transform-origin: 0 0; + } + 100% { + transform: scale(1); + transform-origin: 0 0; + } +} diff --git a/src/components/Footer/LinksFooter/LinksFooter.tsx b/src/components/Footer/LinksFooter/LinksFooter.tsx index acf4acb..3da1e0a 100644 --- a/src/components/Footer/LinksFooter/LinksFooter.tsx +++ b/src/components/Footer/LinksFooter/LinksFooter.tsx @@ -1,13 +1,13 @@ import React, { useState, useEffect } from "react" import styleLink from "./LinksFooter.module.scss" -import { Title } from "./Titles/Title" +import Title from "./TitlesComponent/Title" import { ReactComponent as Facebook } from "./assets/facebook.svg" import { ReactComponent as Instagram } from "./assets/instagram.svg" import { ReactComponent as Twitter } from "./assets/twitter.svg" import { ReactComponent as Youtube } from "./assets/youtube.svg" import { ReactComponent as Linkedlin } from "./assets/linkedlin.svg" import titleLinks from "./assets/titleLinks.svg" -import { Link } from "./Links/Link" +import { Link } from "./LinksComponent/Link" const LinksFooter = () => { @@ -15,26 +15,25 @@ const LinksFooter = () => { const [openDuvidas, setOpenDuvidas] = useState(false); const [openFaleConosco, setOpenFaleConosco] = useState(false); - - const handleListInstitucional = (state: boolean) => { + const handleListInstitucional = () => { if (window.innerWidth < 1024) { - setOpenInstitucional(!state); + setOpenInstitucional(!openInstitucional); } }; - const handleListDuvidas = (state: boolean) => { + const handleListDuvidas = () => { if (window.innerWidth < 1024) { - setOpenDuvidas(!state) + setOpenDuvidas(!openDuvidas) } } - const handleFaleConosco = (state: boolean) => { + const handleFaleConosco = () => { if (window.innerWidth < 1024) { - setOpenFaleConosco(!state) + setOpenFaleConosco(!openFaleConosco) } } - const handleResize = () => { + const handleLoadResize = () => { if (window.innerWidth > 1024) { setOpenInstitucional(true) setOpenDuvidas(true) @@ -47,22 +46,23 @@ const LinksFooter = () => { } useEffect(() => { - window.addEventListener("load", handleResize) - window.addEventListener("resize", handleResize) + window.addEventListener("load", handleLoadResize) + window.addEventListener("resize", handleLoadResize) },) return (
    - < Title - onClick={() => handleListInstitucional(openInstitucional)} + + < Title onClick={handleListInstitucional} text="Institucional" className={styleLink["container__links__rodape__title"]} src={titleLinks} alt="Imagem expandir lista" type="button" - ariaLabel="Exibir lista" /> + ariaLabel="Exibir lista" + /> {openInstitucional &&
      @@ -76,7 +76,7 @@ const LinksFooter = () => {
      < Title - onClick={() => handleListDuvidas(openDuvidas)} + onClick={handleListDuvidas} text="Dúvidas" className={styleLink["container__links__rodape__title"]} src={titleLinks} @@ -96,7 +96,7 @@ const LinksFooter = () => {
      < Title - onClick={() => handleFaleConosco(openFaleConosco)} + onClick={handleFaleConosco} text="Fale Conosco" className={styleLink["container__links__rodape__title"]} src={titleLinks} @@ -106,7 +106,7 @@ const LinksFooter = () => { {openFaleConosco &&
        - + diff --git a/src/components/Footer/LinksFooter/NetWorks/NetWork.tsx b/src/components/Footer/LinksFooter/NetWorks/NetWork.tsx deleted file mode 100644 index 70743bb..0000000 --- a/src/components/Footer/LinksFooter/NetWorks/NetWork.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from "react" - -interface netWorkProps { - style: string; - src: string; - alt: string; - href: string; -} - -const NetWork = (props: netWorkProps) => { - - const { style, src, alt, href } = props; - - return ( -
      • - -
        - {alt} -
        -
        -
      • - ) -} - -export default NetWork; \ No newline at end of file diff --git a/src/components/Footer/LinksFooter/Titles/Title.tsx b/src/components/Footer/LinksFooter/Titles/Title.tsx deleted file mode 100644 index a9664ab..0000000 --- a/src/components/Footer/LinksFooter/Titles/Title.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React, { MouseEventHandler } from "react"; - -interface tituloProps { - className: string; - src: string; - alt: string; - text: string; - ariaLabel: string; - onClick: MouseEventHandler; - type: "button"; -} - -export const Title = (props: tituloProps) => { - const { text, className, src, alt, onClick, ariaLabel, type } = props; - - return ( - <> -

        - {text} - -

        - - ) -} - -export default Title; \ No newline at end of file diff --git a/src/components/Footer/LinksFooter/TitlesComponent/Title.tsx b/src/components/Footer/LinksFooter/TitlesComponent/Title.tsx new file mode 100644 index 0000000..5c8b4e5 --- /dev/null +++ b/src/components/Footer/LinksFooter/TitlesComponent/Title.tsx @@ -0,0 +1,33 @@ +import React, { MouseEventHandler, useState } from "react"; + +interface tituloProps { + className: string; + src: string; + alt: string; + text: string; + ariaLabel: string; + onClick: MouseEventHandler; + type: "button"; +} + +const Title = (props: tituloProps) => { + const { text, className, onClick, ariaLabel, type } = props; + + const [isActive, setActive] = useState(false) + + return ( + <> +
        setActive(!isActive)}> +

        + {text} + +

        + +
        + + ) +} + +export default Title; \ No newline at end of file diff --git a/src/components/Footer/Newsletter/Newsletter.module.scss b/src/components/Footer/Newsletter/Newsletter.module.scss index b170475..881e60e 100644 --- a/src/components/Footer/Newsletter/Newsletter.module.scss +++ b/src/components/Footer/Newsletter/Newsletter.module.scss @@ -92,6 +92,7 @@ line-height: 14px; letter-spacing: 0.05em; color: var(--white); + cursor: pointer; @media (max-width: 1024px) { width: 100%; diff --git a/src/components/Footer/PhoneFloat/PhoneFloat.module.scss b/src/components/Footer/PhoneFloat/PhoneFloat.module.scss new file mode 100644 index 0000000..15c4711 --- /dev/null +++ b/src/components/Footer/PhoneFloat/PhoneFloat.module.scss @@ -0,0 +1,10 @@ +.wrapper { + position: fixed; + right: 16px; + bottom: 208px; + height: 34px; + + @media (max-width: 1024px) { + bottom: 70px; + } +} diff --git a/src/components/Footer/PhoneFloat/PhoneFloat.tsx b/src/components/Footer/PhoneFloat/PhoneFloat.tsx new file mode 100644 index 0000000..508a4a1 --- /dev/null +++ b/src/components/Footer/PhoneFloat/PhoneFloat.tsx @@ -0,0 +1,16 @@ +import React from "react" +import stylePhone from "./PhoneFloat.module.scss" + +import { ReactComponent as IconWhats } from "../assets/iconWhats.svg" + +const PhoneFloat = () => { + return ( +
        + + + +
        + ) +} + +export { PhoneFloat } \ No newline at end of file diff --git a/src/components/Footer/assets/arrowTop.svg b/src/components/Footer/assets/arrowTop.svg new file mode 100644 index 0000000..1bab44a --- /dev/null +++ b/src/components/Footer/assets/arrowTop.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/Footer/assets/iconWhats.svg b/src/components/Footer/assets/iconWhats.svg new file mode 100644 index 0000000..2314673 --- /dev/null +++ b/src/components/Footer/assets/iconWhats.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/components/Header/Header.module.scss b/src/components/Header/Header.module.scss index 30ddbfc..abeae30 100644 --- a/src/components/Header/Header.module.scss +++ b/src/components/Header/Header.module.scss @@ -137,6 +137,12 @@ width: 28px; height: 28px; + a { + display: block; + height: 28px; + width: 28px; + } + @media (min-width: 2500px) { width: 54.68px; height: 54.68px; @@ -214,6 +220,7 @@ list-style: none; li { + position: relative; font-weight: 400; font-size: 14px; line-height: 16px; @@ -232,6 +239,24 @@ } } + li::before { + content: ""; + position: absolute; + left: 0; + bottom: -2px; + width: 100%; + height: 2px; + background-color: var(--white); + border-radius: 4px; + scale: 0 1; + transform-origin: left; + transition: scale 0.35s; + } + + li:hover::before { + scale: 1; + } + li:nth-child(2) { margin: 0 55px; diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx index 051bd02..3292c15 100644 --- a/src/components/Header/Header.tsx +++ b/src/components/Header/Header.tsx @@ -6,6 +6,8 @@ import logo from "./assets/logo-m3.png" import { ReactComponent as Cart } from "./assets/cart.svg" import { ReactComponent as Search } from "./assets/search.svg" +import { Link as Rota } from "react-router-dom" + const Header = () => { return ( @@ -26,15 +28,17 @@ const Header = () => { className={styleHeader["input"]} placeholder="Buscar..."> -
      ENTRAR -
      @@ -44,9 +48,9 @@ const Header = () => { diff --git a/src/components/Header/MenuHamburguer/MenuHamburguer.module.scss b/src/components/Header/MenuHamburguer/MenuHamburguer.module.scss index aaedb07..9e58d2e 100644 --- a/src/components/Header/MenuHamburguer/MenuHamburguer.module.scss +++ b/src/components/Header/MenuHamburguer/MenuHamburguer.module.scss @@ -25,6 +25,7 @@ width: 100%; height: 585px; background: white; + animation: modal-left 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; &__top-modal { display: flex; @@ -71,3 +72,14 @@ padding-right: 36px; background: rgba(69, 69, 69, 0.7); } + +@keyframes modal-left { + 0% { + transform: translateZ(-1400px) translateX(-1000px); + opacity: 0; + } + 100% { + transform: translateZ(0) translateX(0); + opacity: 1; + } +} diff --git a/src/components/Header/MenuHamburguer/MenuHamburguer.tsx b/src/components/Header/MenuHamburguer/MenuHamburguer.tsx index 9a87f05..3070904 100644 --- a/src/components/Header/MenuHamburguer/MenuHamburguer.tsx +++ b/src/components/Header/MenuHamburguer/MenuHamburguer.tsx @@ -1,6 +1,7 @@ import React, { useState } from "react"; import styleModal from "./MenuHamburguer.module.scss"; import Modal from "react-modal" +import { Link as Rota } from "react-router-dom" import { ReactComponent as Close } from "../assets/close.svg" import { ReactComponent as Hamburguer } from "../assets/hamburguer.svg" @@ -16,6 +17,7 @@ const MenuHamburguer = () => { function closeModal() { setIsOpen(false) } + return ( <>
      @@ -38,9 +40,9 @@ const MenuHamburguer = () => {
      } diff --git a/src/components/Header/assets/cart.svg b/src/components/Header/assets/cart.svg index e756ffb..165d30e 100644 --- a/src/components/Header/assets/cart.svg +++ b/src/components/Header/assets/cart.svg @@ -1,12 +1,5 @@ - - - - - - - - - - - + + + + diff --git a/src/components/Main/Cursos/CursoCSS/CursoCss.tsx b/src/components/Main/Cursos/CursoCSS/CursoCss.tsx new file mode 100644 index 0000000..44b8918 --- /dev/null +++ b/src/components/Main/Cursos/CursoCSS/CursoCss.tsx @@ -0,0 +1,34 @@ +import React from "react" + +interface CursoCssProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const CursoCss = (props: CursoCssProps) => { + + const { title, className, styleTitle } = props; + + return ( +
      +

      {title}

      +
      +

      + CSS (Cascading Style Sheets ou Folhas de Estilo em Cascata) é uma linguagem de estilo (en-US) usada para descrever a apresentação de um documento escrito em HTML ou em XML (incluindo várias linguagens em XML como SVG, MathML ou XHTML). O CSS descreve como elementos são mostrados na tela, no papel, na fala ou em outras mídias. +

      + +

      + CSS é uma das principais linguagens da open web e é padronizada em navegadores web de acordo com as especificação da W3C. Desenvolvido em níveis, o CSS1 está atualmente obsoleto, o CSS2.1 é uma recomendação e o CSS3, agora dividido em pequenos módulos, está progredindo para a sua padronização. +

      + +

      + Esse módulo inicia com o funcionamento básico do CSS, incluindo seletores e propriedades, escrever regras CSS, aplicar CSS ao HTML, como especificar comprimento, cor, e outras unidades em CSS, cascata e herança, o básico do modelo de caixas, e depuração de CSS. +

      +
      + +
      + ) +} + +export { CursoCss }; \ No newline at end of file diff --git a/src/components/Main/Cursos/CursoHTML/CursoHtml.tsx b/src/components/Main/Cursos/CursoHTML/CursoHtml.tsx new file mode 100644 index 0000000..16d9fb1 --- /dev/null +++ b/src/components/Main/Cursos/CursoHTML/CursoHtml.tsx @@ -0,0 +1,34 @@ +import React from "react" + +interface CursoHtmlProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const CursoHtml = (props: CursoHtmlProps) => { + + const { title, className, styleTitle } = props; + + return ( +
      +

      {title}

      +
      +

      + HTML (Linguagem de Marcação de HiperTexto) é o bloco de construção mais básico da web. Define o significado e a estrutura do conteúdo da web. Outras tecnologias além do HTML geralmente são usadas para descrever a aparência/apresentação (CSS) ou a funcionalidade/comportamento (JavaScript) de uma página da web. +

      + +

      + "Hipertexto" refere-se aos links que conectam páginas da Web entre si, seja dentro de um único site ou entre sites. Links são um aspecto fundamental da web. Ao carregar conteúdo na Internet e vinculá-lo a páginas criadas por outras pessoas, você se torna um participante ativo na world wide web. +

      + +

      + Um elemento HTML é separado de outro texto em um documento por "tags", que consistem no nome do elemento entre {"<"} e {">"}. O nome de um elemento dentro de uma tag é insensível a maiúsculas e minúsculas. Isto é, pode ser escrito em maiúsculas, minúsculas ou um mistura. Por exemplo, a tag {""} pode ser escrita como {"<Title>, <TITLE>"} ou de qualquer outra forma. + </p> + </div> + + </div> + ) +} + +export { CursoHtml }; \ No newline at end of file diff --git a/src/components/Main/Cursos/CursoJs/CursoJs.tsx b/src/components/Main/Cursos/CursoJs/CursoJs.tsx new file mode 100644 index 0000000..b7a5744 --- /dev/null +++ b/src/components/Main/Cursos/CursoJs/CursoJs.tsx @@ -0,0 +1,39 @@ +import React from "react" + +interface CursoJsProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const CursoJs = (props: CursoJsProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + JavaScript® (frequentemente abreviado como JS) é uma linguagem de programação leve, interpretada e orientada a objetos com funções de primeira classe, conhecida como + a linguagem de scripting para páginas Web, mas também utilizada em muitos ambientes fora dos navegadores. Ela é uma linguagem de scripting baseada em protótipos, + multi-paradigma e dinâmica, suportando os estilos orientado a objetos, imperativo e funcional. + </p> + + <p className={className}> + JavaScript roda no client side da web, o que pode ser usado para projetar / programar o comportamento de uma página web a partir da ocorrência de um evento. JavaScript é + uma linguagem fácil de se aprender mas que também é poderosa, sendo amplamente utilizada para controlar o comportamento de páginas web. + </p> + + <p className={className}> + JavaScript pode funcionar tanto como uma linguagem procedural como uma linguagem orientada a objetos (en-US). Objetos são criados programaticamente em JavaScript, onde + métodos e propriedades são anexados a objetos vazios em tempo de execução, ao invés das definições sintáticas de classe normalmente encontradas em linguagens compiladas + como C++ e Java. Assim que um objeto é construído, ele pode ser usado como um esquema (ou protótipo) para se criar objetos similares. + </p> + </div> + + </div> + ) +} + +export { CursoJs }; \ No newline at end of file diff --git a/src/components/Main/Cursos/CursoReact/CursoReact.tsx b/src/components/Main/Cursos/CursoReact/CursoReact.tsx new file mode 100644 index 0000000..19b34cb --- /dev/null +++ b/src/components/Main/Cursos/CursoReact/CursoReact.tsx @@ -0,0 +1,38 @@ +import React from "react" + +interface CursoReactProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const CursoReact = (props: CursoReactProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + REACT é uma biblioteca JavaScript para criar interfaces de usuário. + </p> + + <p className={className}> + React faz com que a criação de UIs interativas seja uma tarefa fácil. Crie views simples para cada estado na sua aplicação, e o React irá atualizar e renderizar + de forma eficiente apenas os componentes necessários na medida em que os dados mudam. + Views declarativas fazem com que seu código seja mais previsível e simples de depurar. + </p> + + <p className={className}> + Crie componentes encapsulados que gerenciam seu próprio estado e então, combine-os para criar UIs complexas. + Como a lógica do componente é escrita em JavaScript e não em templates, você pode facilmente passar diversos tipos de dados ao longo da sua aplicação e ainda manter o estado + fora do DOM. + </p> + </div> + + </div> + ) +} + +export { CursoReact }; \ No newline at end of file diff --git a/src/components/Main/Cursos/CursoSass/CursoSass.tsx b/src/components/Main/Cursos/CursoSass/CursoSass.tsx new file mode 100644 index 0000000..3ad2e49 --- /dev/null +++ b/src/components/Main/Cursos/CursoSass/CursoSass.tsx @@ -0,0 +1,36 @@ +import React from "react" + +interface CursoSassProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const CursoSass = (props: CursoSassProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + LSass é uma linguagem de script que é interpretada ou compilada em Cascading Style Sheets (CSS). SassScript é a linguagem em si. Sass consiste em duas sintaxes. A sintaxe original, chamada de "sintaxe indentada", usa uma sintaxe semelhante a Haml. + Ela usa indentação para separar blocos de código e caracteres de nova linha para separar regras. A sintaxe mais recente, "SCSS", usa formatação de bloco, como a de CSS. + </p> + + <p className={className}> + Ela usa indentação para separar blocos de código e caracteres de nova linha para separar regras. A sintaxe mais recente, "SCSS", usa formatação de bloco, como a de CSS. + Esta usa chaves para designar blocos de código e ponto-e-vírgula para separar linhas dentro de um bloco. Os arquivos com sintaxe de indentação e SCSS são tradicionalmente dados as extensões .sass e .scss, respectivamente. + </p> + + <p className={className}> + CSS3 consiste em uma série de seletores e pseudo-seletores que agrupam regras que lhes são aplicáveis. Sass[5] (no contexto maior de ambas as sintaxes) estende CSS fornecendo vários mecanismos disponíveis em linguagens de programação mais tradicionais, particularmente linguagens orientadas a objeto, mas que não estão disponíveis no CSS3 em si + </p> + </div> + + </div> + ) +} + +export { CursoSass }; \ No newline at end of file diff --git a/src/components/Main/Cursos/CursoTs/CursoTs.tsx b/src/components/Main/Cursos/CursoTs/CursoTs.tsx new file mode 100644 index 0000000..ed6a5dc --- /dev/null +++ b/src/components/Main/Cursos/CursoTs/CursoTs.tsx @@ -0,0 +1,31 @@ +import React from "react" + +interface CursoTsProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const CursoTs = (props: CursoTsProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + TypeScript é uma linguagem de programação fortemente tipada que se baseia em JavaScript, oferecendo melhores ferramentas em qualquer escala. + </p> + <p className={className}> + O TypeScript adiciona sintaxe adicional ao JavaScript para oferecer suporte a uma integração mais estreita com seu editor . Detecte erros no início do seu editor. + O código TypeScript é convertido em JavaScript, que é executado em qualquer lugar em que o JavaScript é executado : em um navegador, no Node.js ou Deno e em seus aplicativos. + O TypeScript entende JavaScript e usa inferência de tipo para fornecer ótimas ferramentas sem código adicional. + </p> + </div> + + </div> + ) +} + +export { CursoTs }; \ No newline at end of file diff --git a/src/components/Main/Cursos/CursoVtex/CursoVtex.tsx b/src/components/Main/Cursos/CursoVtex/CursoVtex.tsx new file mode 100644 index 0000000..c90b10a --- /dev/null +++ b/src/components/Main/Cursos/CursoVtex/CursoVtex.tsx @@ -0,0 +1,39 @@ +import React from "react" + +interface CursoVtexProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const CursoVtex = (props: CursoVtexProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + A VTEX é uma plataforma SaaS (Software as a Service), ou seja, ela conta com toda a estrutura necessária para o cadastro de seus produtos, integração de meios + de pagamento, ERP, frete e mais. O lojista só terá que se preocupar com as vendas. + A VTEX funciona por meio da nuvem e é voltada para a administração e para o desenvolvimento de lojas on-line. + </p> + + <p className={className}> + Estamos falando da melhor opção para os empreendedores que já vendem no ambiente digital, que já têm experiência, uma marca bem-estruturada e um planejamento a + longo prazo, pois vai suprir toda e qualquer necessidade específica tanto do comércio eletrônico quanto do cliente final, valendo a pena o investimento e entregando + um resultado bastante satisfatório de performance de vendas. + </p> + + <p className={className}> + Nos últimos 3 anos, a VTEX vem se destacando como a melhor plataforma de e-commerce. Os melhores profissionais do mercado foram contratados, e a empresa teve um belo + crescimento, tornando-se uma empresa globalmente estabilizada e trazendo vários conceitos interessantes a cada ano. + </p> + </div> + + </div> + ) +} + +export { CursoVtex }; \ No newline at end of file diff --git a/src/components/Main/Cursos/Cursos.module.scss b/src/components/Main/Cursos/Cursos.module.scss new file mode 100644 index 0000000..9ea7377 --- /dev/null +++ b/src/components/Main/Cursos/Cursos.module.scss @@ -0,0 +1,130 @@ +.container { + padding: 29px 100px 0px; + margin-bottom: 70px; + + @media (max-width: 1024px) { + padding: 29px 16px 0px; + margin-bottom: 80px; + } + + &__institucional { + display: flex; + align-items: center; + margin-bottom: 81px; + .home { + } + .arrow { + margin: 0px 9.72px; + } + + p { + font-weight: 400; + font-size: 12px; + line-height: 14px; + font-family: var(--font-roboto); + color: var(--gray-100); + } + } + + &__title { + display: flex; + justify-content: center; + align-items: center; + margin-bottom: 82px; + + @media (max-width: 1024px) { + margin-bottom: 40px; + } + + h1 { + font-weight: 400; + font-size: 24px; + line-height: 28px; + letter-spacing: 0.1em; + text-transform: uppercase; + font-family: var(--font-roboto); + color: var(--black-200); + } + } + + &__wrapper-links-informations { + display: flex; + @media (max-width: 1024px) { + display: block; + } + + &__links { + border-right: 1px solid var(--black); + margin-right: 30px; + @media (max-width: 1024px) { + border: none; + margin: 0 0 30px; + } + ul { + list-style: none; + height: 285px; + width: 302px; + @media (max-width: 1024px) { + height: 275px; + width: 100%; + } + + li { + display: flex; + align-items: center; + + a { + width: 100%; + padding: 10px 10px 10px 16px; + font-weight: 400; + font-size: 16px; + line-height: 19px; + text-decoration: none; + font-family: var(--font-roboto); + color: var(--gray-300); + } + .ativo { + font-weight: 700; + background: var(--black); + color: var(--white); + } + } + } + } + + &__informations { + width: 100%; + height: 100%; + + .title { + margin-top: 8px; + font-style: normal; + font-weight: 700; + font-size: 24px; + line-height: 28px; + font-family: var(--font-roboto); + color: var(--black-200); + + @media (max-width: 1024px) { + display: flex; + justify-content: center; + } + } + .text-info { + margin-top: 19px; + font-weight: 400; + font-size: 13px; + line-height: 15px; + font-family: var(--font-roboto); + color: var(--gray-300); + + @media (max-width: 1024px) { + margin-top: 12px; + font-size: 12px; + line-height: 18px; + text-align: justify; + } + } + } + } +} diff --git a/src/components/Main/Cursos/Cursos.tsx b/src/components/Main/Cursos/Cursos.tsx new file mode 100644 index 0000000..c4d7898 --- /dev/null +++ b/src/components/Main/Cursos/Cursos.tsx @@ -0,0 +1,64 @@ +import React from "react" +import style from "./Cursos.module.scss" + +import { ReactComponent as IconHome } from "../assets/iconHome.svg" +import { ReactComponent as IconArrow } from "../assets/iconArrow.svg" + +import { Routes, Route, NavLink as Rota } from "react-router-dom" +import { CursoHtml } from "./CursoHTML/CursoHtml"; +import { CursoCss } from "./CursoCSS/CursoCss" +import { CursoSass } from "./CursoSass/CursoSass" +import { CursoJs } from "./CursoJs/CursoJs" +import { CursoTs } from "./CursoTs/CursoTs" +import { CursoReact } from "./CursoReact/CursoReact" +import { CursoVtex } from "./CursoVtex/CursoVtex" +import { IntroCurso } from "./IntroCurso/IntroCurso" + + +const Cursos = () => { + return ( + <section className={style["container"]}> + <div className={style["container__institucional"]}> + <IconHome className={style["home"]} title="Home" /> + <IconArrow className={style["arrow"]} title="Seta direita" /> + <p>CURSOS</p> + </div> + + <div className={style["container__title"]}> + <h1>Cursos</h1> + </div> + + + <div className={style["container__wrapper-links-informations"]}> + <div className={style["container__wrapper-links-informations__links"]}> + <nav> + <ul> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Cursos/cursoHtml">HTML</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Cursos/cursoCss">CSS</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Cursos/cursoSass">Sass</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Cursos/cursoJs">JavaScript</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Cursos/cursoTs">TypeScript</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Cursos/cursoReact">React</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Cursos/cursoVtex">Vtex</Rota></li> + </ul> + </nav> + </div> + + <div className={style["container__wrapper-links-informations__informations"]}> + <Routes> + <Route path="" element={<IntroCurso title="DESENVOLVIMENTO FRONT-END" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/cursoHtml" element={<CursoHtml title="HTML" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/cursoCss" element={<CursoCss title="CSS" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/cursoSass" element={<CursoSass title="Sass" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/cursoJs" element={<CursoJs title="JavaScript" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/cursoTs" element={<CursoTs title="TypeScript" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/cursoReact" element={<CursoReact title="React" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/cursoVtex" element={<CursoVtex title="Vtex" styleTitle={style["title"]} className={style["text-info"]} />} /> + </Routes> + </div> + </div> + </section> + ) +} + +export { Cursos }; \ No newline at end of file diff --git a/src/components/Main/Cursos/IntroCurso/IntroCurso.tsx b/src/components/Main/Cursos/IntroCurso/IntroCurso.tsx new file mode 100644 index 0000000..aa4ba56 --- /dev/null +++ b/src/components/Main/Cursos/IntroCurso/IntroCurso.tsx @@ -0,0 +1,26 @@ +import React from "react" + +interface IntroCursoProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const IntroCurso = (props: IntroCursoProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <h2 className={className}> + Os cursos oferecidos são para alunos que desejam atuar na área de desenvolvimento FRONT END. + </h2> + </div> + + </div> + ) +} + +export { IntroCurso }; \ No newline at end of file diff --git a/src/components/Main/InfoComponent/infoComponent.tsx b/src/components/Main/InfoComponent/infoComponent.tsx new file mode 100644 index 0000000..c717fd7 --- /dev/null +++ b/src/components/Main/InfoComponent/infoComponent.tsx @@ -0,0 +1,40 @@ +import React from "react" + +interface InfoComponentProps { + title: string; + className?: string; + styleTitle?: string; +} + +const InfoComponent = (props: InfoComponentProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + 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={className}> + 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={className}> + 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 { InfoComponent }; \ No newline at end of file diff --git a/src/components/Main/Institucional/ContatoForm/ContatoForm.module.scss b/src/components/Main/Institucional/ContatoForm/ContatoForm.module.scss new file mode 100644 index 0000000..7404df0 --- /dev/null +++ b/src/components/Main/Institucional/ContatoForm/ContatoForm.module.scss @@ -0,0 +1,122 @@ +.title { + font-weight: 700; + font-size: 24px; + line-height: 28px; + display: flex; + align-items: center; + font-family: var(--font-roboto); + color: var(--black); + @media (max-width: 1024px) { + justify-content: center; + } +} + +.form-field { + display: flex; + flex-direction: column; + margin-top: 12px; + position: relative; + + label { + font-weight: 400; + font-size: 14px; + line-height: 16px; + font-family: var(--font-roboto); + color: var(--black-300); + margin: 0 0 15px 12px; + } + + input { + padding: 15px 20px; + height: 46px; + background: var(--white); + border: 1px solid var(--black-300); + border-radius: 25px; + + font-weight: 400; + font-size: 14px; + line-height: 16px; + font-family: var(--font-roboto); + + &::placeholder { + color: var(--gray-400); + } + } + + .validation-text { + display: flex; + width: 100%; + position: absolute; + top: 17px; + right: 20px; + font-weight: 400; + font-size: 12px; + line-height: 14px; + color: var(--red-100); + justify-content: flex-end; + font-family: var(--font-roboto); + } +} + +.form-checkbox { + position: relative; + display: flex; + justify-content: center; + margin-top: 12px; + + label { + font-weight: 400; + font-size: 14px; + line-height: 16px; + font-family: var(--font-roboto); + margin-right: 4.28px; + text-decoration: underline; + + input { + height: 18px; + width: 18.64px; + border: 1px solid var(--black); + border-radius: 3px; + box-sizing: border-box; + + .invalid { + border-color: var(--red-100); + } + } + } + + .form-checkbox-1 { + display: flex; + align-items: center; + position: relative; + } + + .validation-check { + color: var(--red-100); + position: absolute; + left: -10px; + } +} + +.form-button { + display: flex; + align-items: center; + justify-content: center; + border: none; + width: 100%; + height: 52.44px; + margin-top: 12.6px; + font-weight: 400; + font-size: 16px; + line-height: 19px; + letter-spacing: 0.05em; + font-family: var(--font-roboto); + border-radius: 24px; + background: var(--black); + color: var(--white); + cursor: pointer; +} + +.invalid { + border-color: var(--red-100); +} diff --git a/src/components/Main/Institucional/ContatoForm/ContatoForm.tsx b/src/components/Main/Institucional/ContatoForm/ContatoForm.tsx new file mode 100644 index 0000000..07822af --- /dev/null +++ b/src/components/Main/Institucional/ContatoForm/ContatoForm.tsx @@ -0,0 +1,100 @@ +import React from "react" +import StyleForm from "./ContatoForm.module.scss" +import FormSchema from "../../../../schema/FormSchema" +import { Formik, Form, Field, ErrorMessage } from "formik" + +interface formValues { + name: string, + email: string, + cpf: string, + data: string, + telefone: string, + network: string, + check: string +} + + +const initialValues = { + name: "", + email: "", + cpf: "", + data: "", + telefone: "", + network: "", + check: "" +} + +const ContatoForm = () => { + + const handleOnSubmit = (values: formValues) => { + values.name = ""; + values.email = ""; + values.cpf = ""; + values.data = ""; + values.telefone = ""; + values.network = ""; + values.check = ""; + console.log(values) + } + + return ( + <Formik + onSubmit={handleOnSubmit} + initialValues={initialValues} + validationSchema={FormSchema}> + {({ errors, touched }) => ( + <Form> + <h2 className={StyleForm["title"]}>Preencha o formulário</h2> + + <div className={StyleForm["form-field"]}> + <label htmlFor="name">Nome</label> + <ErrorMessage component="span" className={StyleForm["validation-text"]} name="name" /> + <Field type="text" id="name" name="name" placeholder="Seu nome Completo" className={errors.name && touched.name && "invalid"} /> + </div> + + <div className={StyleForm["form-field"]}> + <label htmlFor="email">E-mail</label> + <ErrorMessage component="span" className={StyleForm["validation-text"]} name="email" /> + <Field type="email" id="email" name="email" placeholder="Seu e-mail" className={errors.email && touched.email && "invalid"} /> + </div> + + <div className={StyleForm["form-field"]}> + <label htmlFor="cpf">CPF</label> + <ErrorMessage component="span" className={StyleForm["validation-text"]} name="cpf" /> + <Field type="text" id="cpf" name="cpf" placeholder="000.000.000-00" className={errors.cpf && touched.cpf && "invalid"} /> + </div> + + <div className={StyleForm["form-field"]}> + <label htmlFor="data">Data de Nascimento:</label> + <ErrorMessage component="span" className={StyleForm["validation-text"]} name="data" /> + <Field type="text" id="data" name="data" placeholder="00.00.0000" className={errors.data && touched.data && "invalid"} /> + </div> + + <div className={StyleForm["form-field"]}> + <label htmlFor="telefone">Telefone:</label> + <ErrorMessage component="span" className={StyleForm["validation-text"]} name="telefone" /> + <Field type="text" id="telefone" name="telefone" placeholder="(00) 00000-0000" className={errors.telefone && touched.telefone && "invalid"} /> + </div> + + <div className={StyleForm["form-field"]}> + <label htmlFor="network">Instagram</label> + <Field type="text" id="network" name="network" placeholder="@seuuser" /> + </div> + + <div className={StyleForm["form-checkbox"]}> + <div className={StyleForm["form-checkbox-1"]}> + <ErrorMessage component="span" className={StyleForm["validation-check"]} name="check" /> + <label htmlFor="check">Declaro que li e aceito</label> + <Field type="checkbox" id="check" className={errors.check && touched.check && "invalid"} /> + </div> + </div> + + <button className={StyleForm["form-button"]} type="submit">CADASTRE-SE</button> + + </Form> + )} + </Formik> + ) +} + +export { ContatoForm } \ No newline at end of file diff --git a/src/components/Main/Institucional/Entrega/Entrega.tsx b/src/components/Main/Institucional/Entrega/Entrega.tsx new file mode 100644 index 0000000..918f35b --- /dev/null +++ b/src/components/Main/Institucional/Entrega/Entrega.tsx @@ -0,0 +1,40 @@ +import React from "react" + +interface EntregaProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const Entrega = (props: EntregaProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + 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={className}> + 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={className}> + 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 { Entrega }; \ No newline at end of file diff --git a/src/components/Main/Institucional/Institucional.module.scss b/src/components/Main/Institucional/Institucional.module.scss new file mode 100644 index 0000000..091f278 --- /dev/null +++ b/src/components/Main/Institucional/Institucional.module.scss @@ -0,0 +1,132 @@ +.container { + padding: 29px 100px 0px; + margin-bottom: 70px; + + @media (max-width: 1024px) { + padding: 29px 16px 0px; + margin-bottom: 80px; + } + + &__institucional { + display: flex; + align-items: center; + margin-bottom: 81px; + .home { + } + .arrow { + margin: 0px 9.72px; + } + + p { + font-weight: 400; + font-size: 12px; + line-height: 14px; + font-family: var(--font-roboto); + color: var(--gray-100); + } + } + + &__title { + display: flex; + justify-content: center; + align-items: center; + margin-bottom: 82px; + + @media (max-width: 1024px) { + margin-bottom: 40px; + } + + h1 { + font-weight: 400; + font-size: 24px; + line-height: 28px; + letter-spacing: 0.1em; + text-transform: uppercase; + font-family: var(--font-roboto); + color: var(--black-200); + } + } + + &__wrapper-links-informations { + display: flex; + @media (max-width: 1024px) { + display: block; + } + + &__links { + border-right: 1px solid var(--black); + margin-right: 30px; + + @media (max-width: 1024px) { + border: none; + margin: 0 0 30px; + } + ul { + list-style: none; + height: 285px; + width: 302px; + @media (max-width: 1024px) { + height: 234px; + width: 100%; + } + + li { + display: flex; + align-items: center; + + a { + width: 100%; + padding: 10px 10px 10px 16px; + font-weight: 400; + font-size: 16px; + line-height: 19px; + text-decoration: none; + font-family: var(--font-roboto); + color: var(--gray-300); + } + } + } + + .ativo { + font-weight: 700; + background: var(--black); + color: var(--white); + } + } + + &__informations { + width: 100%; + height: 100%; + + .title { + margin-top: 8px; + font-style: normal; + font-weight: 700; + font-size: 24px; + line-height: 28px; + font-family: var(--font-roboto); + color: var(--black-200); + + @media (max-width: 1024px) { + display: flex; + justify-content: center; + } + } + .text-info { + margin-top: 19px; + font-weight: 400; + font-size: 13px; + line-height: 15px; + font-family: var(--font-roboto); + color: var(--gray-300); + + @media (max-width: 1024px) { + margin-top: 12px; + font-size: 12px; + line-height: 18px; + text-align: justify; + } + } + } + } +} diff --git a/src/components/Main/Institucional/Institucional.tsx b/src/components/Main/Institucional/Institucional.tsx new file mode 100644 index 0000000..41b1671 --- /dev/null +++ b/src/components/Main/Institucional/Institucional.tsx @@ -0,0 +1,58 @@ +import React from "react" +import style from "./Institucional.module.scss" +import { ReactComponent as IconHome } from "../assets/iconHome.svg" +import { ReactComponent as IconArrow } from "../assets/iconArrow.svg" +import { NavLink as Rota } from "react-router-dom" +import { Routes, Route } from "react-router-dom" + +import { Pagamento } from "./Pagamento/Pagamento"; +import { Sobre } from "./Sobre/Sobre" +import { Entrega } from "./Entrega/Entrega" +import { Troca } from "./TrocaeDevolução/Troca" +import { Seguranca } from "./Segurança/Seguranca" +import { ContatoForm } from "./ContatoForm/ContatoForm" + + +const Institucional = () => { + return ( + <section className={style["container"]}> + <div className={style["container__institucional"]}> + <IconHome className={style["home"]} title="Home" /> + <IconArrow className={style["arrow"]} title="Seta direita" /> + <p>INSTITUCIONAL</p> + </div> + + <div className={style["container__title"]}> + <h1>Institucional</h1> + </div> + + <div className={style["container__wrapper-links-informations"]}> + <div className={style["container__wrapper-links-informations__links"]}> + <nav> + <ul> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/">Sobre</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Pagamento">Forma de Pagamento</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Entrega">Entrega</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/TrocaeDevolucao">Troca e Devolução</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Seguranca">Segurança e Privacidade</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Contato">Contato</Rota></li> + </ul> + </nav> + </div> + + <div className={style["container__wrapper-links-informations__informations"]}> + <Routes> + <Route path="/" element={<Sobre title="Sobre" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/Pagamento" element={<Pagamento title="Forma de Pagamento" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/Entrega" element={<Entrega title="Entrega" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/TrocaeDevolucao" element={<Troca title="Troca e Devolução" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/Seguranca" element={<Seguranca title="Segurança e Privacidade" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/Contato" element={<ContatoForm />} /> + </Routes> + </div> + </div> + </section> + ) +} + +export { Institucional }; \ No newline at end of file diff --git a/src/components/Main/Institucional/Pagamento/Pagamento.tsx b/src/components/Main/Institucional/Pagamento/Pagamento.tsx new file mode 100644 index 0000000..6a82efc --- /dev/null +++ b/src/components/Main/Institucional/Pagamento/Pagamento.tsx @@ -0,0 +1,40 @@ +import React from "react" + +interface PagamentoProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const Pagamento = (props: PagamentoProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + 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={className}> + 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={className}> + 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 { Pagamento }; \ No newline at end of file diff --git a/src/components/Main/Institucional/Segurança/Seguranca.tsx b/src/components/Main/Institucional/Segurança/Seguranca.tsx new file mode 100644 index 0000000..5cf9c58 --- /dev/null +++ b/src/components/Main/Institucional/Segurança/Seguranca.tsx @@ -0,0 +1,40 @@ +import React from "react" + +interface SegurancaProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const Seguranca = (props: SegurancaProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + 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={className}> + 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={className}> + 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 { Seguranca }; \ No newline at end of file diff --git a/src/components/Main/Institucional/Sobre/Sobre.tsx b/src/components/Main/Institucional/Sobre/Sobre.tsx new file mode 100644 index 0000000..7d8a765 --- /dev/null +++ b/src/components/Main/Institucional/Sobre/Sobre.tsx @@ -0,0 +1,40 @@ +import React from "react" + +interface SobreProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const Sobre = (props: SobreProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + 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={className}> + 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={className}> + 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 }; \ No newline at end of file diff --git a/src/components/Main/Institucional/TrocaeDevolução/Troca.tsx b/src/components/Main/Institucional/TrocaeDevolução/Troca.tsx new file mode 100644 index 0000000..b42d7dc --- /dev/null +++ b/src/components/Main/Institucional/TrocaeDevolução/Troca.tsx @@ -0,0 +1,40 @@ +import React from "react" + +interface TrocaProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const Troca = (props: TrocaProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + 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={className}> + 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={className}> + 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 }; \ No newline at end of file diff --git a/src/components/Main/Main.tsx b/src/components/Main/Main.tsx new file mode 100644 index 0000000..57d8de9 --- /dev/null +++ b/src/components/Main/Main.tsx @@ -0,0 +1,8 @@ +import React from "react" +import { Navigation } from "../../routes/Navigations"; + +const Main = () => { + return <Navigation /> +} + +export { Main }; \ No newline at end of file diff --git a/src/components/Main/Saibamais/Duracao/Duracao.tsx b/src/components/Main/Saibamais/Duracao/Duracao.tsx new file mode 100644 index 0000000..e0602cc --- /dev/null +++ b/src/components/Main/Saibamais/Duracao/Duracao.tsx @@ -0,0 +1,28 @@ +import React from "react" + +interface DuracaoProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const Duracao = (props: DuracaoProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + 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 { Duracao }; \ No newline at end of file diff --git a/src/components/Main/Saibamais/Ferramentas/Ferramentas.tsx b/src/components/Main/Saibamais/Ferramentas/Ferramentas.tsx new file mode 100644 index 0000000..524549b --- /dev/null +++ b/src/components/Main/Saibamais/Ferramentas/Ferramentas.tsx @@ -0,0 +1,28 @@ +import React from "react" + +interface FerramentasProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const Ferramentas = (props: FerramentasProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + 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 { Ferramentas }; \ No newline at end of file diff --git a/src/components/Main/Saibamais/IntroSaibamais/IntroSaibamais.tsx b/src/components/Main/Saibamais/IntroSaibamais/IntroSaibamais.tsx new file mode 100644 index 0000000..edf3e00 --- /dev/null +++ b/src/components/Main/Saibamais/IntroSaibamais/IntroSaibamais.tsx @@ -0,0 +1,26 @@ +import React from "react" + +interface IntroSaibamaisProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const IntroSaibamais = (props: IntroSaibamaisProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <h2 className={className}> + Navegue para saber mais sobre o processo seletivo. + </h2> + </div> + + </div> + ) +} + +export { IntroSaibamais }; \ No newline at end of file diff --git a/src/components/Main/Saibamais/Professores/Professores.tsx b/src/components/Main/Saibamais/Professores/Professores.tsx new file mode 100644 index 0000000..1da127c --- /dev/null +++ b/src/components/Main/Saibamais/Professores/Professores.tsx @@ -0,0 +1,28 @@ +import React from "react" + +interface ProfessoresProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const Professores = (props: ProfessoresProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + 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. + </p> + + </div> + + </div> + ) +} + +export { Professores }; \ No newline at end of file diff --git a/src/components/Main/Saibamais/Requisitos/Requisitos.tsx b/src/components/Main/Saibamais/Requisitos/Requisitos.tsx new file mode 100644 index 0000000..9127809 --- /dev/null +++ b/src/components/Main/Saibamais/Requisitos/Requisitos.tsx @@ -0,0 +1,33 @@ +import React from "react" + +interface RequisitosProps { + title?: string; + className?: string; + styleTitle?: string; +} + +const Requisitos = (props: RequisitosProps) => { + + const { title, className, styleTitle } = props; + + return ( + <div> + <h2 className={styleTitle}>{title}</h2> + <div> + <p className={className}> + 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={className}> + 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 { Requisitos }; \ No newline at end of file diff --git a/src/components/Main/Saibamais/Saibamais.module.scss b/src/components/Main/Saibamais/Saibamais.module.scss new file mode 100644 index 0000000..f368fc8 --- /dev/null +++ b/src/components/Main/Saibamais/Saibamais.module.scss @@ -0,0 +1,131 @@ +.container { + padding: 29px 100px 0px; + margin-bottom: 70px; + + @media (max-width: 1024px) { + padding: 29px 16px 0px; + margin-bottom: 80px; + } + + &__institucional { + display: flex; + align-items: center; + margin-bottom: 81px; + .home { + } + .arrow { + margin: 0px 9.72px; + } + + p { + font-weight: 400; + font-size: 12px; + line-height: 14px; + font-family: var(--font-roboto); + color: var(--gray-100); + } + } + + &__title { + display: flex; + justify-content: center; + align-items: center; + margin-bottom: 82px; + + @media (max-width: 1024px) { + margin-bottom: 40px; + } + + h1 { + font-weight: 400; + font-size: 24px; + line-height: 28px; + letter-spacing: 0.1em; + text-transform: uppercase; + font-family: var(--font-roboto); + color: var(--black-200); + } + } + + &__wrapper-links-informations { + display: flex; + @media (max-width: 1024px) { + display: block; + } + + &__links { + border-right: 1px solid var(--black); + margin-right: 30px; + @media (max-width: 1024px) { + border: none; + margin: 0 0 30px; + } + ul { + list-style: none; + height: 285px; + width: 302px; + @media (max-width: 1024px) { + height: 160px; + width: 100%; + } + + li { + display: flex; + align-items: center; + + a { + width: 100%; + padding: 10px 10px 10px 16px; + font-weight: 400; + font-size: 16px; + line-height: 19px; + text-decoration: none; + font-family: var(--font-roboto); + color: var(--gray-300); + } + + .ativo { + font-weight: 700; + background: var(--black); + color: var(--white); + } + } + } + } + + &__informations { + width: 100%; + height: 100%; + + .title { + margin-top: 8px; + font-style: normal; + font-weight: 700; + font-size: 24px; + line-height: 28px; + font-family: var(--font-roboto); + color: var(--black-200); + + @media (max-width: 1024px) { + display: flex; + justify-content: center; + } + } + .text-info { + margin-top: 19px; + font-weight: 400; + font-size: 13px; + line-height: 15px; + font-family: var(--font-roboto); + color: var(--gray-300); + + @media (max-width: 1024px) { + margin-top: 12px; + font-size: 12px; + line-height: 18px; + text-align: justify; + } + } + } + } +} diff --git a/src/components/Main/Saibamais/Saibamais.tsx b/src/components/Main/Saibamais/Saibamais.tsx new file mode 100644 index 0000000..5d85103 --- /dev/null +++ b/src/components/Main/Saibamais/Saibamais.tsx @@ -0,0 +1,52 @@ +import React from "react" +import style from "./Saibamais.module.scss" +import { Routes, Route, NavLink as Rota } from "react-router-dom" +import { ReactComponent as IconHome } from "../assets/iconHome.svg" +import { ReactComponent as IconArrow } from "../assets/iconArrow.svg" +import { Requisitos } from "./Requisitos/Requisitos"; +import { Duracao } from "./Duracao/Duracao"; +import { Ferramentas } from "./Ferramentas/Ferramentas"; +import { Professores } from "./Professores/Professores"; +import { IntroSaibamais } from "./IntroSaibamais/IntroSaibamais" + + +const Saibamais = () => { + return ( + <section className={style["container"]}> + <div className={style["container__institucional"]}> + <IconHome className={style["home"]} title="Home" /> + <IconArrow className={style["arrow"]} title="Seta direita" /> + <p>SAIBA MAIS</p> + </div> + + <div className={style["container__title"]}> + <h1>Saiba Mais</h1> + </div> + + <div className={style["container__wrapper-links-informations"]}> + <div className={style["container__wrapper-links-informations__links"]}> + <nav> + <ul> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Saibamais/Requisitos">Requisitos</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Saibamais/Ferramentas">Duração do curso</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Saibamais/Duracao">Ferramentas de uso</Rota></li> + <li><Rota className={({ isActive }) => isActive ? style.ativo : undefined} to="/Saibamais/Professores">Professores</Rota></li> + </ul> + </nav> + </div> + + <div className={style["container__wrapper-links-informations__informations"]}> + <Routes> + <Route path="" element={<IntroSaibamais title="INFORMAÇÕES" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/Requisitos" element={<Requisitos title="Requisitos" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/Ferramentas" element={<Duracao title="Duração do curso" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/Duracao" element={<Ferramentas title="Ferramentas de uso" styleTitle={style["title"]} className={style["text-info"]} />} /> + <Route path="/Professores" element={<Professores title="Professores" styleTitle={style["title"]} className={style["text-info"]} />} /> + </Routes> + </div> + </div> + </section> + ) +} + +export { Saibamais }; \ No newline at end of file diff --git a/src/components/Main/assets/iconArrow.svg b/src/components/Main/assets/iconArrow.svg new file mode 100644 index 0000000..f9d5afd --- /dev/null +++ b/src/components/Main/assets/iconArrow.svg @@ -0,0 +1,3 @@ +<svg width="6" height="8" viewBox="0 0 6 8" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M5.11608 3.60396L1.6762 0.164193C1.45738 -0.0547314 1.10261 -0.0547314 0.883896 0.164193C0.665166 0.382921 0.665166 0.737679 0.883896 0.95639L3.92766 4.00006L0.883984 7.04362C0.665255 7.26244 0.665255 7.61716 0.883984 7.83589C1.10271 8.0547 1.45747 8.0547 1.67629 7.83589L5.11617 4.39607C5.22553 4.28665 5.28015 4.1434 5.28015 4.00008C5.28015 3.85668 5.22543 3.71332 5.11608 3.60396Z" fill="#C4C4C4"/> +</svg> diff --git a/src/components/Main/assets/iconHome.svg b/src/components/Main/assets/iconHome.svg new file mode 100644 index 0000000..7d137cd --- /dev/null +++ b/src/components/Main/assets/iconHome.svg @@ -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> diff --git a/src/components/Main/assets/iconPhone.svg b/src/components/Main/assets/iconPhone.svg new file mode 100644 index 0000000..2e1575b --- /dev/null +++ b/src/components/Main/assets/iconPhone.svg @@ -0,0 +1,3 @@ +<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M19.8962 17.0061C19.486 18.1643 17.8583 19.1248 16.5599 19.4053C15.6717 19.5944 14.5114 19.7453 10.6057 18.126C5.6098 16.0563 2.39255 10.9796 2.1418 10.6503C1.90167 10.3209 0.123047 7.96214 0.123047 5.52264C0.123047 3.08314 1.36192 1.89527 1.8613 1.38527C2.27142 0.966641 2.9493 0.775391 3.59955 0.775391C3.80992 0.775391 3.99905 0.786016 4.16905 0.794516C4.66842 0.815766 4.91917 0.845516 5.24855 1.63389C5.65867 2.62202 6.65742 5.06152 6.77642 5.31227C6.89755 5.56302 7.01867 5.90302 6.84867 6.23239C6.6893 6.57239 6.54905 6.72327 6.2983 7.01227C6.04755 7.30127 5.80955 7.52227 5.5588 7.83252C5.3293 8.10239 5.07005 8.39139 5.35905 8.89077C5.64805 9.37952 6.6468 11.0094 8.1173 12.3184C10.0149 14.0078 11.5534 14.5475 12.1038 14.777C12.5139 14.947 13.0027 14.9066 13.3023 14.5879C13.6827 14.1778 14.1523 13.4978 14.6304 12.8284C14.9704 12.3481 15.3997 12.2886 15.8502 12.4586C16.3092 12.618 18.738 13.8186 19.2374 14.0673C19.7368 14.318 20.0662 14.437 20.1873 14.6474C20.3063 14.8578 20.3063 15.8459 19.8962 17.0061Z" fill="white"/> +</svg> diff --git a/src/global.scss b/src/global.scss index d02e5dc..8a5cd91 100644 --- a/src/global.scss +++ b/src/global.scss @@ -1,4 +1,4 @@ -//VARIABLES +@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@400;500&display=swap%22"); * { box-sizing: border-box; diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index df1e4c5..a67ff17 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -1,13 +1,16 @@ import React from "react"; +import { BrowserRouter } from "react-router-dom"; import { Footer } from "../components/Footer/Footer"; import { Header } from "../components/Header/Header" +import { Main } from "../components/Main/Main"; const Home = () => { return ( - <> + <BrowserRouter> <Header /> + <Main /> <Footer /> - </> + </BrowserRouter> ) } diff --git a/src/routes/Navigations.tsx b/src/routes/Navigations.tsx new file mode 100644 index 0000000..df99b0b --- /dev/null +++ b/src/routes/Navigations.tsx @@ -0,0 +1,64 @@ +import React from "react" +import { Routes, Route } from "react-router-dom" + +import { Institucional } from "../components/Main/Institucional/Institucional" +import { Pagamento } from "../components/Main/Institucional/Pagamento/Pagamento" +import { Entrega } from "../components/Main/Institucional/Entrega/Entrega" +import { Troca } from "../components/Main/Institucional/TrocaeDevolução/Troca" +import { Seguranca } from "../components/Main/Institucional/Segurança/Seguranca" + +import { Cursos } from "../components/Main/Cursos/Cursos" +import { IntroCurso } from "../components/Main/Cursos/IntroCurso/IntroCurso" +import { CursoHtml } from "../components/Main/Cursos/CursoHTML/CursoHtml" +import { CursoCss } from "../components/Main/Cursos/CursoCSS/CursoCss" +import { CursoSass } from "../components/Main/Cursos/CursoSass/CursoSass" +import { CursoJs } from "../components/Main/Cursos/CursoJs/CursoJs" +import { CursoTs } from "../components/Main/Cursos/CursoTs/CursoTs" +import { CursoReact } from "../components/Main/Cursos/CursoReact/CursoReact" +import { CursoVtex } from "../components/Main/Cursos/CursoVtex/CursoVtex" + +import { Saibamais } from "../components/Main/Saibamais/Saibamais" +import { Requisitos } from "../components/Main/Saibamais/Requisitos/Requisitos" +import { Ferramentas } from "../components/Main/Saibamais/Ferramentas/Ferramentas" +import { Duracao } from "../components/Main/Saibamais/Duracao/Duracao" +import { Professores } from "../components/Main/Saibamais/Professores/Professores" +import { IntroSaibamais } from "../components/Main/Saibamais/IntroSaibamais/IntroSaibamais" + + +import { ContatoForm } from "../components/Main/Institucional/ContatoForm/ContatoForm" + +const Navigation = () => { + return ( + <Routes> + <Route path="*" element={<Institucional />}> + <Route path="/*/Pagamento" element={<Pagamento />} /> + <Route path="/*/Entrega" element={<Entrega />} /> + <Route path="/*/TrocaeDevolucao" element={<Troca />} /> + <Route path="/*/Seguranca" element={<Seguranca />} /> + <Route path="/*/Contato" element={<ContatoForm />} /> + <Route path="/*/Saibamais" element={<Saibamais />} /> + </Route> + + <Route path="/Saibamais/*" element={<Saibamais />}> + <Route path="" element={< IntroSaibamais />} /> + <Route path=":Requisitos" element={< Requisitos />} /> + <Route path=":Ferramentas" element={< Ferramentas />} /> + <Route path=":Duracao" element={< Duracao />} /> + <Route path=":Professores" element={< Professores />} /> + </Route> + + <Route path="/Cursos/*" element={<Cursos />}> + <Route path="" element={< IntroCurso />} /> + <Route path=":Cursohtml" element={< CursoHtml />} /> + <Route path=":CursoCss" element={< CursoCss />} /> + <Route path=":CursoSass" element={< CursoSass />} /> + <Route path=":CursoJs" element={< CursoJs />} /> + <Route path=":CursoTs" element={< CursoTs />} /> + <Route path=":CursoReact" element={< CursoReact />} /> + <Route path=":CursoVtex" element={< CursoVtex />} /> + </Route> + </Routes > + ) +} + +export { Navigation } \ No newline at end of file diff --git a/src/schema/FormSchema.ts b/src/schema/FormSchema.ts new file mode 100644 index 0000000..7b27524 --- /dev/null +++ b/src/schema/FormSchema.ts @@ -0,0 +1,10 @@ +import * as Yup from "yup" + +export default Yup.object().shape({ + name: Yup.string().required("*Campo Obrigatório"), + email: Yup.string().required("*Campo Obrigatório"), + cpf: Yup.string().required("*Campo Obrigatório"), + data: Yup.string().required("*Campo Obrigatório"), + telefone: Yup.string().required("*Campo Obrigatório"), + check: Yup.string().required("*"), +}); \ No newline at end of file diff --git a/src/variables.scss b/src/variables.scss index 507b9f2..85654e9 100644 --- a/src/variables.scss +++ b/src/variables.scss @@ -4,10 +4,15 @@ --black: #000000; --black-100: #303030; --black-200: #292929; + --black-300: #100d0e; --white: #ffffff; --white-100: #f0f0f0; --gray-100: #c4c4c4; --gray-200: #e5e5e5; + --gray-300: #7d7d7d; + --gray-400: #b9b7b7; + + --red-100: #ff0000; }