diff --git a/apps/dimentorin/public/image/mascot-character.webp b/apps/dimentorin/public/image/mascot-character.webp new file mode 100644 index 0000000..34267f5 Binary files /dev/null and b/apps/dimentorin/public/image/mascot-character.webp differ diff --git a/apps/dimentorin/public/image/mascot-full.webp b/apps/dimentorin/public/image/mascot-full.webp new file mode 100644 index 0000000..ccce7b6 Binary files /dev/null and b/apps/dimentorin/public/image/mascot-full.webp differ diff --git a/apps/dimentorin/public/image/mascot-text.webp b/apps/dimentorin/public/image/mascot-text.webp new file mode 100644 index 0000000..18d2edb Binary files /dev/null and b/apps/dimentorin/public/image/mascot-text.webp differ diff --git a/apps/dimentorin/src/app/(public)/_components/footer.tsx b/apps/dimentorin/src/app/(public)/_components/footer.tsx new file mode 100644 index 0000000..daf2a1f --- /dev/null +++ b/apps/dimentorin/src/app/(public)/_components/footer.tsx @@ -0,0 +1,157 @@ +import { DiscordOutlined, GithubOutlined, InstagramOutlined } from '@ant-design/icons'; +import { cn, For } from '@imphnen-frontend-service/utils'; +import React, { FC, useRef } from 'react'; +import { Link } from 'react-router-dom'; +import { motion, useInView, Variants } from 'framer-motion'; +import { SteamIcon } from '../../_components/icons'; + +const PAGES: { label: string; href: string }[] = [ + { label: "Home", href: "/" }, + { label: 'Mentoring', href: '/mentoring' }, + { label: 'Resources', href: '/resources' }, + { label: 'Articles', href: '/articles' }, +] + +const COMMUNITY: { label: string; href: string; icon: React.ReactNode }[] = [ + { label: 'Discord', href: 'https://discord.gg/imphnen', icon: }, + { label: 'Steam', href: 'https://steamcommunity.com/groups/IMPHNEN', icon: }, + { label: 'Github', href: 'https://github.com/IMPHNEN', icon: }, + { label: 'Instagram', href: 'https://www.instagram.com/imphnen.dev', icon: }, +] + +export const Footer: FC = () => { + const ref = useRef(null) + const isInView = useInView(ref, { once: true, amount: 0.2 }) + + const containerVariants: Variants = { + hidden: { opacity: 0 }, + visible: { opacity: 1 }, + } + + const childVariants: Variants = { + hidden: { opacity: 0, y: 20 }, + visible: { + opacity: 1, + y: 0, + transition: { + duration: 0.5, + ease: [0.25, 0.46, 0.45, 0.94], + }, + }, + } + + const mascotVariants: Variants = { + hidden: { opacity: 0, y: 20, rotate: -12 }, + visible: { + opacity: 1, + y: 0, + rotate: 0, + transition: { + duration: 0.5, + ease: [0.25, 0.46, 0.45, 0.94], + }, + }, + } + + const mascotTextVariants: Variants = { + hidden: { opacity: 0, y: 20 }, + visible: { + opacity: 1, + y: 0, + transition: { + duration: 0.4, + delay: 0.4, + ease: [0.25, 0.46, 0.45, 0.94], + }, + }, + } + + return ( +
+ + {/* Mascot */} + + + + + +
+
+ + + + Dimentorin by IMPHNEN + + + Karena Belajar IT Itu Harusnya Se-Seru Anime Favoritmu! + +
+ + + © IMPHNEN {new Date().getFullYear()} All Rights Reserved + +
+ + +
+

Pages

+
    + + {({ label, href }) => ( +
  • + {label} +
  • + )} +
    +
+
+ +
+

Join Our Community

+
    + + {({ label, href, icon }) => ( +
  • + + {icon} + {label} + +
  • + )} +
    +
+
+
+ + + © IMPHNEN {new Date().getFullYear()} All Rights Reserved + +
+
+ ) +} diff --git a/apps/dimentorin/src/app/(public)/layout.tsx b/apps/dimentorin/src/app/(public)/layout.tsx index 47ece0d..d9ffaf8 100644 --- a/apps/dimentorin/src/app/(public)/layout.tsx +++ b/apps/dimentorin/src/app/(public)/layout.tsx @@ -1,5 +1,6 @@ import { Outlet } from "react-router-dom"; import { Header } from "./_components/header"; +import { Footer } from "./_components/footer"; export default function Layout() { return ( @@ -8,6 +9,7 @@ export default function Layout() {
+