"use client"; import { useState, useEffect, useRef } from "react"; import Link from "next/link"; import Image from "next/image"; import { useTheme } from "next-themes"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, } from "@/components/ui/navigation-menu"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "@/components/ui/sheet"; import { ThemeToggle } from "@/components/theme-toggle"; import { Search, ShoppingBag, Heart, User, Menu, Phone, Truck, RefreshCw, Shield, Globe, Sun, Moon, } from "lucide-react"; export function Header() { const [cartItems] = useState(3); const [wishlistItems] = useState(5); const [isMounted, setIsMounted] = useState(false); const [sheetError, setSheetError] = useState(false); const sheetRef = useRef(null); const { setTheme, theme } = useTheme(); const categories = [ { title: "Women", items: [ { name: "Dresses", href: "/women/dresses" }, { name: "Tops & Blouses", href: "/women/tops" }, { name: "Pants & Jeans", href: "/women/pants" }, { name: "Outerwear", href: "/women/outerwear" }, { name: "Accessories", href: "/women/accessories" }, ], }, { title: "Men", items: [ { name: "T-Shirts", href: "/men/tshirts" }, { name: "Shirts", href: "/men/shirts" }, { name: "Pants & Jeans", href: "/men/pants" }, { name: "Jackets", href: "/men/jackets" }, { name: "Accessories", href: "/men/accessories" }, ], }, { title: "Kids", items: [ { name: "Boys", href: "/kids/boys" }, { name: "Girls", href: "/kids/girls" }, { name: "Baby", href: "/kids/baby" }, { name: "Shoes", href: "/kids/shoes" }, ], }, ]; // Preload both logo variants to ensure smooth loading useEffect(() => { setIsMounted(true); // Add global error handler for scroll-related errors const handleError = (event: ErrorEvent) => { if (event.error?.message?.includes('parameter 1 is not of type \'Node\'') || event.error?.message?.includes('handleScroll') || event.error?.message?.includes('RemoveScrollSideCar') || event.error?.message?.includes('shouldCancelEvent') || event.error?.message?.includes('shouldPrevent')) { console.warn('Scroll handling error caught and suppressed:', event.error); event.preventDefault(); setSheetError(true); return false; } }; // Also add an unhandled rejection handler for async scroll errors const handleUnhandledRejection = (event: PromiseRejectionEvent) => { if (event.reason?.message?.includes('handleScroll') || event.reason?.message?.includes('RemoveScrollSideCar') || event.reason?.message?.includes('parameter 1 is not of type \'Node\'')) { console.warn('Scroll promise rejection caught and suppressed:', event.reason); event.preventDefault(); setSheetError(true); return false; } }; window.addEventListener('error', handleError); window.addEventListener('unhandledrejection', handleUnhandledRejection); const preloadLogos = () => { if (typeof window !== 'undefined') { const lightLogo = new window.Image(); const darkLogo = new window.Image(); lightLogo.src = '/black-logo.png'; darkLogo.src = '/white-logo.png'; } }; preloadLogos(); return () => { window.removeEventListener('error', handleError); window.removeEventListener('unhandledrejection', handleUnhandledRejection); }; }, []); // Add scroll error prevention useEffect(() => { const sheetElement = sheetRef.current; if (sheetElement) { const handleScroll = (event: Event) => { try { // Allow default scroll behavior but catch any errors } catch (error) { console.warn('Sheet scroll error caught:', error); event.preventDefault(); } }; sheetElement.addEventListener('scroll', handleScroll, { passive: false }); return () => { sheetElement.removeEventListener('scroll', handleScroll); }; } }, [isMounted]); // Prevent hydration issues with Sheet component if (!isMounted) { return (
{/* Top banner */}

FREE SHIPPING ON ORDERS OVER $100 β€’ NEW ARRIVALS EVERY WEEK

{/* Announcement bar */}

πŸ”₯ WINTER SALE - Up to 50% off on selected items

{/* Main header */}
{/* Mobile menu placeholder */} {/* Logo */}
blcklst blcklst
{/* Simplified action buttons for SSR */}
); } return (
{/* Top banner */}

FREE SHIPPING ON ORDERS OVER $100 β€’ NEW ARRIVALS EVERY WEEK

{/* Announcement bar */}

πŸ”₯ WINTER SALE - Up to 50% off on selected items

{/* Main header */}
{/* Mobile menu */} {!sheetError ? ( { // Prevent auto focus to avoid scroll handling issues event.preventDefault(); }} onCloseAutoFocus={(event) => { // Prevent auto focus to avoid scroll handling issues event.preventDefault(); }} onEscapeKeyDown={(event) => { // Handle escape key gracefully try { // Default behavior } catch (error) { console.warn('Escape key handling error:', error); event.preventDefault(); setSheetError(true); } }} onPointerDownOutside={(event) => { // Handle pointer events gracefully try { // Default behavior } catch (error) { console.warn('Pointer down outside error:', error); event.preventDefault(); setSheetError(true); } }} onInteractOutside={(event) => { // Additional interaction handler try { // Default behavior } catch (error) { console.warn('Interact outside error:', error); event.preventDefault(); setSheetError(true); } }} onFocusOutside={(event) => { // Additional focus handler try { // Default behavior } catch (error) { console.warn('Focus outside error:', error); event.preventDefault(); setSheetError(true); } }} >
{/* Header Section */} Menu {/* Navigation Section */}
{/* Footer Section */}
{/* Search Button */} {/* Account Button */}
{/* Quick Actions */}
{/* Theme Toggle in Mobile Menu */}
) : ( )} {/* Logo */}
blcklst blcklst
{/* Desktop Navigation */} {categories.map((category) => ( {category.title}
{category.items.map((item) => (
{item.name}
))}
))} Sale
{/* Search Bar */}
{/* Action buttons */}
{/* Search icon for mobile */} {/* Theme toggle */}
{/* User menu - Hidden on small mobile, visible on larger screens */} My Account Orders Wishlist Sign In Create Account {/* Wishlist - Hidden on small mobile */} {/* Cart - Always visible */} {/* Language/Currency - Hidden on mobile */} πŸ‡ΊπŸ‡Έ USD πŸ‡ͺπŸ‡Ί EUR πŸ‡¬πŸ‡§ GBP
{/* Service features */}
Free Shipping
30-Day Returns
Secure Payment
24/7 Support
); }