diff --git a/packages/fakeyou.com/public/fakeyou/FakeYou-Logo-Mobile.png b/packages/fakeyou.com/public/fakeyou/FakeYou-Logo-Mobile.png new file mode 100644 index 0000000000..fdc88d0ef6 Binary files /dev/null and b/packages/fakeyou.com/public/fakeyou/FakeYou-Logo-Mobile.png differ diff --git a/packages/fakeyou.com/src/AppNew.scss b/packages/fakeyou.com/src/AppNew.scss index 33a47a4117..17090ea6e9 100644 --- a/packages/fakeyou.com/src/AppNew.scss +++ b/packages/fakeyou.com/src/AppNew.scss @@ -1,5 +1,6 @@ // @import "./scss/normalize.scss"; // @import-normalize; /* bring in normalize.css styles */ +@import "./scss/nav.scss"; @import "./scss/colours.scss"; @import "./scss/site-refresh.scss"; @import "./scss/CSSParticles.scss"; diff --git a/packages/fakeyou.com/src/components/layout/MobileMenu/MobileMenu.scss b/packages/fakeyou.com/src/components/layout/MobileMenu/MobileMenu.scss new file mode 100644 index 0000000000..ba9cd3936c --- /dev/null +++ b/packages/fakeyou.com/src/components/layout/MobileMenu/MobileMenu.scss @@ -0,0 +1,26 @@ +@import "scss/colours.scss"; + +.mobile-menu-container { + padding-bottom: 4.6rem; +} + +.mobile-menu { + z-index: 100; + position: fixed; + min-width: 0px; + top: 0rem; + left: 0rem; + right: 0rem; + border-radius: 0rem 0rem 0.5rem 0.5rem; + background-color: $panel; + border-color: #ffffff12 !important; + border: 1px solid; + align-items: center; + justify-content: space-between; + overflow: hidden; + transition: all 200ms ease 0s; + box-shadow: 0px 5px 30px 0px rgba(0, 0, 0, 0.4); + -webkit-box-shadow: 0px 5px 30px 0px rgba(0, 0, 0, 0.4); + -moz-box-shadow: 0px 5px 30px 0px rgba(0, 0, 0, 0.4); + padding: 0.6rem 1rem; +} diff --git a/packages/fakeyou.com/src/components/layout/MobileMenu/MobileMenu.tsx b/packages/fakeyou.com/src/components/layout/MobileMenu/MobileMenu.tsx new file mode 100644 index 0000000000..5b816d2b30 --- /dev/null +++ b/packages/fakeyou.com/src/components/layout/MobileMenu/MobileMenu.tsx @@ -0,0 +1,44 @@ +import React from "react"; +import "./MobileMenu.scss"; +import Button from "components/common/Button/Button"; +import { faBars } from "@fortawesome/pro-solid-svg-icons"; + +export default function MobileMenu() { + const handleMenuButtonClick = () => { + const wrapper = document.getElementById("wrapper"); + + if (window.innerWidth < 1200) { + if (wrapper) { + wrapper.classList.toggle("toggled"); + } + } + }; + + return ( +
+
+
+
+
+
+ FakeYou Mobile Logo +
+
+
+
+
+
+ ); +} diff --git a/packages/fakeyou.com/src/components/layout/SideNav/SideNav.tsx b/packages/fakeyou.com/src/components/layout/SideNav/SideNav.tsx new file mode 100644 index 0000000000..3ad1daa9f3 --- /dev/null +++ b/packages/fakeyou.com/src/components/layout/SideNav/SideNav.tsx @@ -0,0 +1,142 @@ +import { faDiscord } from "@fortawesome/free-brands-svg-icons"; +import { + faBookOpen, + faMessageDots, + faTrophy, + faVideo, + faWaveformLines, + faStar, +} from "@fortawesome/pro-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import Button from "components/common/Button/Button"; +import React, { useEffect } from "react"; +import { Link, NavLink } from "react-router-dom"; + +interface SideNavProps {} + +export default function SideNav(props: SideNavProps) { + const handleNavLinkClick = () => { + const wrapper = document.getElementById("wrapper"); + + if (window.innerWidth < 1200) { + if (wrapper) { + wrapper.classList.toggle("toggled"); + } + } + }; + + useEffect(() => { + const handleOutsideClick = (event: MouseEvent) => { + const wrapper = document.getElementById("wrapper"); + const overlay = document.getElementById("overlay"); + + if ( + (!wrapper?.contains(event.target as Node) || + overlay?.contains(event.target as Node)) && + window.innerWidth < 1200 + ) { + wrapper?.classList.remove("toggled"); + } + }; + + document.addEventListener("click", handleOutsideClick); + + return () => { + document.removeEventListener("click", handleOutsideClick); + }; + }, []); + + return ( + + ); +} diff --git a/packages/fakeyou.com/src/scss/nav.scss b/packages/fakeyou.com/src/scss/nav.scss new file mode 100644 index 0000000000..99600e4d37 --- /dev/null +++ b/packages/fakeyou.com/src/scss/nav.scss @@ -0,0 +1,159 @@ +@import "./colours.scss"; + +/* Toggle Styles */ + +#wrapper { + padding-left: 0; + -webkit-transition: all 0.2s ease; + -moz-transition: all 0.2s ease; + -o-transition: all 0.2s ease; + transition: all 0.2s ease; +} + +#wrapper.toggled { + padding-left: 260px; +} + +#sidebar-wrapper { + z-index: 1000; + position: fixed; + left: 260px; + width: 0; + height: 100%; + margin-left: -260px; + overflow: auto; + -webkit-transition: all 0.2s ease; + -moz-transition: all 0.2s ease; + -o-transition: all 0.2s ease; + transition: all 0.2s ease; +} + +#wrapper.toggled #sidebar-wrapper { + width: 260px; +} + +#page-content-wrapper { + width: 100%; + position: relative; +} + +#wrapper.toggled #page-content-wrapper { + position: absolute; + margin-right: -260px; +} + +/* Sidebar Styles */ + +.sidebar-nav { + position: absolute; + top: 0; + width: 260px; + margin: 0; + padding: 0; + list-style: none; + min-height: 100vh; + background: $panel; + border-color: rgba(255, 255, 255, 0.0705882353) !important; + border-right: 1px solid; +} + +// .sidebar-nav li { +// text-indent: 2rem; +// line-height: 38px; +// } + +.sidebar-nav li a { + display: block; + text-decoration: none; + color: rgba($white, 0.7); + font-weight: 500; + margin: 0rem 1rem; + padding: 0.5rem 1rem; + border-radius: 0.5rem; + -webkit-transition: all 0.2s ease; + -moz-transition: all 0.2s ease; + -o-transition: all 0.2s ease; + transition: all 0.2s ease; +} + +.sidebar-nav li a:hover { + text-decoration: none; + color: $white; +} + +.sidebar-nav li a:active, +.sidebar-nav li a:focus { + text-decoration: none; +} + +.sidebar-brand { + font-size: 18px; + padding-top: 1.5rem; + line-height: 0; + margin-left: 1.5rem; +} + +.sidebar-buttons { + margin-left: 1.5rem; +} + +.sidebar-heading { + margin-left: 1.5rem; + margin-bottom: 0.5rem; + opacity: 0.5; + font-size: 14px; +} + +.sidebar-heading-icon { + margin-right: 0.75rem; +} + +.active-link { + color: $white !important; + background-color: $secondary; +} + +#overlay { + display: none; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.5); /* Semi-black background */ + z-index: 900; /* Appear on top of the content */ +} +.toggled #page-content-wrapper { + position: relative; + z-index: 2; /* Ensure content is above the overlay */ +} +.toggled #overlay { + display: block; +} + +@media (min-width: 992px) { + #wrapper { + padding-left: 260px; + } + + #wrapper.toggled { + padding-left: 0; + } + + #sidebar-wrapper { + width: 260px; + } + + #wrapper.toggled #sidebar-wrapper { + width: 0; + } + + #page-content-wrapper { + position: relative; + } + + #wrapper.toggled #page-content-wrapper { + position: relative; + margin-right: 0; + } +} diff --git a/packages/fakeyou.com/src/v2/view/PageContainer.tsx b/packages/fakeyou.com/src/v2/view/PageContainer.tsx index 52055651c4..ae63f13ff2 100644 --- a/packages/fakeyou.com/src/v2/view/PageContainer.tsx +++ b/packages/fakeyou.com/src/v2/view/PageContainer.tsx @@ -82,6 +82,8 @@ import { ProductUsageInfoPage } from "./pages/product_usage_info/ProductUsageInf import VcModelViewPage from "./pages/vc/vc_model_view/VcModelViewPage"; import VcModelEditPage from "./pages/vc/vc_model_edit/VcModelEditPage"; import VcModelDeletePage from "./pages/vc/vc_model_delete/VcModelDeletePage"; +import SideNav from "components/layout/SideNav/SideNav"; +import MobileMenu from "components/layout/MobileMenu/MobileMenu"; interface Props { sessionWrapper: SessionWrapper; @@ -188,19 +190,21 @@ class PageContainer extends React.Component { public render() { return ( -
-
- +
+ + + {/* - - + /> */} +
+ { /> - -
+ + {/* */}
); }