diff --git a/apps/marketing/public/logo_icon.png b/apps/marketing/public/logo_icon.png new file mode 100644 index 000000000..cb4765fcf Binary files /dev/null and b/apps/marketing/public/logo_icon.png differ diff --git a/apps/marketing/src/components/(marketing)/header.tsx b/apps/marketing/src/components/(marketing)/header.tsx index 611aff96c..6e8220fb7 100644 --- a/apps/marketing/src/components/(marketing)/header.tsx +++ b/apps/marketing/src/components/(marketing)/header.tsx @@ -1,24 +1,28 @@ -import { HTMLAttributes } from 'react'; +'use client'; + +import { HTMLAttributes, useState } from 'react'; import Image from 'next/image'; import Link from 'next/link'; +import { Menu, X } from 'lucide-react'; + import { cn } from '@documenso/ui/lib/utils'; +import { Button } from '@documenso/ui/primitives/button'; + +import { MobileNavigation } from './mobile-navigation'; export type HeaderProps = HTMLAttributes; export const Header = ({ className, ...props }: HeaderProps) => { + const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); return (
Documenso Logo -
- - Pricing - - +
Blog @@ -35,6 +39,17 @@ export const Header = ({ className, ...props }: HeaderProps) => { Sign in
+ +
+ +
+
); }; diff --git a/apps/marketing/src/components/(marketing)/mobile-navigation.tsx b/apps/marketing/src/components/(marketing)/mobile-navigation.tsx new file mode 100644 index 000000000..4d9eea4e3 --- /dev/null +++ b/apps/marketing/src/components/(marketing)/mobile-navigation.tsx @@ -0,0 +1,153 @@ +'use client'; + +import Image from 'next/image'; +import Link from 'next/link'; + +import { Variants, motion } from 'framer-motion'; +import { Github, Slack, Twitter } from 'lucide-react'; + +import { cn } from '@documenso/ui/lib/utils'; + +import backgroundPattern from '~/assets/background-pattern.png'; + +export type MobileNavigationProps = { + isMenuOpen: boolean; + className?: string; +}; + +const itemVariants: Variants = { + open: { + opacity: 1, + y: 0, + x: 0, + transition: { type: 'spring', stiffness: 300, damping: 24 }, + }, + closed: { opacity: 0, y: 0, x: 60, transition: { duration: 0.2 } }, + exit: { + opacity: 0, + y: 0, + x: 60, + transition: { duration: 0.2 }, + }, +}; + +export const MobileNavigation = ({ isMenuOpen }: MobileNavigationProps) => { + // used for testing alternate animations + // const vertical = `${!isMenuOpen ? '-translate-y-full' : 'translate-y-0'}`; + const horizontal = `${!isMenuOpen ? 'translate-x-full' : 'translate-x-0'}`; + + return ( + + + + Blog + + + + Pricing + + + + Status + + + + Support + + + + Privacy + + + + Sign in + + + +
+ + + + + + + + + + + +
+
+ background pattern +
+
+ ); +};