// Shared components for ImmiHub for Employers marketing site // Nav, Footer, Waitlist form, Product screen mockups const { useState, useEffect, useRef } = React; // ================ NAV ================ function Nav({ active }) { const [scrolled, setScrolled] = useState(false); const [menuOpen, setMenuOpen] = useState(false); useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 8); onScroll(); window.addEventListener('scroll', onScroll, { passive: true }); return () => window.removeEventListener('scroll', onScroll); }, []); useEffect(() => { const onResize = () => { if (window.innerWidth > 900) setMenuOpen(false); }; window.addEventListener('resize', onResize); return () => window.removeEventListener('resize', onResize); }, []); const links = [ { k: 'product', label: 'Product', href: 'index.html' }, { k: 'features', label: 'Features', href: 'features.html' }, { k: 'pricing', label: 'Pricing', href: 'pricing.html' }, { k: 'demo', label: 'Demo', href: 'demo.html' }, { k: 'partners', label: 'Partners', href: 'partners.html' }, ]; return ( ); } // ================ FOOTER ================ function Footer() { return ( ); } // ================ WAITLIST FORM ================ function WaitlistForm({ tag = 'employer', compact = false, onSuccess }) { const [state, setState] = useState({ email: '', company: '', role: '', size: '' }); const [errors, setErrors] = useState({}); const [submitted, setSubmitted] = useState(false); const submit = (e) => { e.preventDefault(); const errs = {}; if (!state.email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(state.email)) errs.email = 'A valid work email is required.'; if (!state.company.trim()) errs.company = 'Company is required.'; if (!state.role) errs.role = 'Select your role.'; if (!state.size) errs.size = 'Select company size.'; setErrors(errs); if (Object.keys(errs).length === 0) { setSubmitted(true); onSuccess && onSuccess(state); } }; if (submitted) { return (