'use client'; import React, { useState } from 'react'; import Link from 'next/link'; import { useCartStore } from '@/hooks/use-shopify-cart'; import CartDrawer from '@/components/shopify/cart-drawer'; import SearchDialog from '@/components/shopify/search-dialog'; import AccountMenu from '@/components/shopify/account-menu'; import { RiShoppingBagLine, RiCloseLine, RiMenu3Line } from '@remixicon/react'; import { Button } from '@/components/ui/button'; import Logo from '@/components/logo'; const CartIcon: React.FC = () => { const toggleCart = useCartStore((s) => s.toggleCart); const cart = useCartStore((s) => s.cart); const itemCount = cart?.lines?.edges?.reduce((sum, { node }) => sum + node.quantity, 0) ?? 0; return ( {itemCount > 0 && ( {itemCount > 99 ? '99+' : itemCount} )} ); }; export interface NavLink { label: string; url: string; } interface HeaderProps { storeName?: string; logoUrl?: string; links?: NavLink[]; /** Thin bar above the nav. Pass null to hide it. */ announcement?: string | null; announcementUrl?: string; } const Header: React.FC = ({ storeName = 'Shop', logoUrl, links = [ { label: 'Shop', url: '/' }, { label: 'Collections', url: '/collections' }, ], announcement = 'Free shipping on orders over $100', announcementUrl, }) => { const [menuOpen, setMenuOpen] = useState(false); return ( <> {/* Sits above the sticky nav, so it scrolls away on its own. */} {announcement && ( {announcementUrl ? ( {announcement} ) : ( {announcement} )} )} {/* Logo */} {/* Desktop Navigation */} {links.map((link, index) => ( {link.label} ))} {/* Actions */} {/* Mobile hamburger */} setMenuOpen(!menuOpen)} variant="ghost" size="icon" className="md:hidden" aria-label="Toggle menu" > {menuOpen ? ( ) : ( )} {/* Mobile Menu */} {menuOpen && ( {links.map((link, index) => ( setMenuOpen(false)} className="text-foreground hover:text-muted-foreground transition-colors" > {link.label} ))} )} > ); }; export default Header;