+
+ {navItems._rawNavPanel1 &&
+ navItems._rawNavPanel1.map(
+ ({ _id, label, path, attachment, isExternal }) => (
+
+ {label}
+
+ )
+ )}
+
+
+ {navItems._rawNavPanel2 &&
+ navItems._rawNavPanel2.map(
+ ({ _id, label, path, attachment, isExternal }) => (
+
+ {label}
+
+ )
+ )}
+
+
+
+
+ {navItems._rawNavPanel3 &&
+ navItems._rawNavPanel3.map(
+ ({ _id, label, path, isExternal, icon }) => (
+
+
+
+ )
+ )}
+
+
+ {navItems._rawNavPanel4 &&
+ navItems._rawNavPanel4.map(
+ ({ _id, label, path, isExternal, icon }) => (
+
+
+
+ )
+ )}
+
+
+ >
+ );
+};
+
+export default FooterNavigation;
diff --git a/landingpage/src/components/Header.tsx b/landingpage/src/components/Header.tsx
new file mode 100644
index 0000000..f4a91ee
--- /dev/null
+++ b/landingpage/src/components/Header.tsx
@@ -0,0 +1,125 @@
+import React, { useRef } from 'react';
+import Logo from './Logo';
+import Container from './ui/Container';
+import { useCallback, useEffect, useState } from 'react';
+import { useScroll, motion } from 'framer-motion';
+import Navigation from './Navigation';
+import NavigationHamburger from './ui/NavigationHamburger';
+import InfoBar from './ui/InfoBar';
+import { InfoBarType } from '../types/types';
+import { useMediaQuery, useResizeObserver, useWindowSize } from 'usehooks-ts';
+
+type Props = {
+ isWhiteMobile?: boolean;
+ infobar?: InfoBarType;
+ setHeaderHeight?: any;
+ data?: any;
+};
+
+const Header = ({ isWhiteMobile, infobar, setHeaderHeight, data }: Props) => {
+ const { scrollY } = useScroll();
+ const [hidden, setHidden] = useState(false);
+ const [isTop, setIsTop] = useState(true);
+ const [isOpen, setIsOpen] = useState(false);
+ const [isClicked, setIsClicked] = useState(false);
+ const isDesktop = useMediaQuery('(min-width: 1024px)', {
+ initializeWithValue: false,
+ });
+
+ const update = useCallback(() => {
+ const current = scrollY?.get();
+ const previous = scrollY?.getPrevious();
+ if (current < previous) {
+ setHidden(false);
+ } else if (current > 50 && current > previous) {
+ !isOpen && setHidden(true);
+ }
+
+ setIsTop(current <= 50);
+ }, [scrollY, isOpen]);
+
+ useEffect(() => {
+ scrollY?.on('change', update);
+ return () => {
+ scrollY?.clearListeners();
+ };
+ }, [scrollY, update]);
+
+ useEffect(() => {
+ if (!isDesktop) {
+ setIsOpen(false);
+ }
+ }, [isDesktop]);
+
+ const variants = {
+ initial: { opacity: 1, y: 0 },
+ visible: { opacity: 1, y: 0 },
+ hidden: { opacity: 0, y: '-100%' },
+ };
+
+ const ref = useRef