"use client"; import { Bell, Bookmark, Bug, ChevronDown, CreditCard, FileQuestion, Heart, HeartHandshake, HelpCircle, History, LayoutGrid, LifeBuoy, LogOut, type LucideIcon, Menu, MessageCircleHeart, Search, Settings, ShoppingCart, Star, ThumbsUp, User, } from "lucide-react"; import { type CSSProperties, Fragment, useEffect, useMemo, useState, } from "react"; import { Logo, LogoImage, LogoTextDesktop, } from "@/components/shadcnblocks/logo"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, navigationMenuTriggerStyle, } from "@/components/ui/navigation-menu"; import { Sheet, SheetContent, SheetHeader, SheetTrigger, } from "@/components/ui/sheet"; import { cn } from "@/lib/utils"; type HomeLink = { href: string; logo: { src: string; alt: string; }; }; type Link = { label: string; href: string; }; interface SideMenuItem extends Link { icon: LucideIcon; } type HelpfullLinkGroup = { group: string; links: Link[]; }; type SideMenuType = Array; type MegaMenuSectionType = { label: string; href: string; id: string; items: { label: string; href: string; }[]; }; type MenuItemType = { label: string; href?: string; id?: string; sections?: MegaMenuSectionType[]; }; type MenuType = MenuItemType[]; interface HelpfullLinksDropdownProps { groups?: HelpfullLinkGroup[]; } interface SecondaryMenuProps { menu: MenuType; } interface SecondaryMenuMobileProps { menu: MenuType; } type DesktopMenuDropdownItemProps = MenuItemType; interface MobileMenuProps { menu: SideMenuType; homeLink: HomeLink; } interface EcommerceNavbar2Props { home: HomeLink; helpfullLinks?: HelpfullLinkGroup[]; menu: MenuType; sideMenu: SideMenuType; className?: string; } const HOME = { href: "https://ShadcnBlocks", logo: { src: "/block-media/shadcnblocks/block/logos/ShadcnBlockscom-icon-white.svg", alt: "لوگو", }, }; const HELPFUL_LINKS = [ { group: "پشتیبانی", links: [ { label: "پشتیبانی مشتریان", href: "#" }, { label: "تماس با ما", href: "#" }, { label: "سؤالات متداول", href: "#" }, { label: "راهنمای محصول", href: "#" }, { label: "گارانتی و تعمیر", href: "#" }, ], }, { group: "سفارش و ارسال", links: [ { label: "پیگیری سفارش", href: "#" }, { label: "اطلاعات ارسال", href: "#" }, { label: "مرجوعی و بازپرداخت", href: "#" }, { label: "لغو سفارش", href: "#" }, ], }, { group: "ابزارهای خرید", links: [ { label: "یافتن فروشگاه", href: "#" }, { label: "کارت هدیه", href: "#" }, { label: "تخفیف دانشجویی", href: "#" }, { label: "پیشنهادها و تخفیف‌ها", href: "#" }, ], }, { group: "شرکت و قوانین", links: [ { label: "درباره ما", href: "#" }, { label: "فرصت‌های شغلی", href: "#" }, { label: "حریم خصوصی", href: "#" }, { label: "شرایط و ضوابط", href: "#" }, { label: "دسترسی‌پذیری", href: "#" }, ], }, ]; const MENU = [ { id: "shop", label: "فروشگاه", href: "#", sections: [ { label: "صورت", id: "face", href: "#", items: [ "پاک‌کننده‌ها", "پاک‌کننده‌های روغنی", "پاک‌کننده‌های فومی", "تونرها", "اسنس‌ها", "سرم‌ها", "مرطوب‌کننده‌ها", "کرم دور چشم", "روغن‌های صورت", "ماسک صورت", "لایه‌بردارها", "درمان لک", ].map((label) => ({ label, href: "#" })), }, { label: "بدن", id: "body", href: "#", items: [ "شوینده بدن", "اسکراب بدن", "لوسیون بدن", "کرم بدن", "روغن بدن", "کرم دست", "مراقبت پا", "درمان سفت‌کننده", "ملزومات حمام", "مراقبت پس از آفتاب", ].map((label) => ({ label, href: "#" })), }, { label: "محافظت در برابر آفتاب", id: "sun", href: "#", items: [ "SPF روزانه", "ضدآفتاب معدنی", "ضدآفتاب شیمیایی", "SPF رنگی", "استیک SPF", "ضدآفتاب صورت", "ضدآفتاب بدن", "SPF لب", "مراقبت پس از آفتاب", "اسپری ضدآفتاب", ].map((label) => ({ label, href: "#" })), }, { label: "پاکسازی", id: "cleansing", href: "#", items: [ "میسلار واتر", "پاک‌کننده ژلی", "پاک‌کننده کرمی", "مرهم پاک‌کننده", "روغن پاک‌کننده", "پاک‌کننده آرایش", "پاک‌کننده لایه‌بردار", "پاک‌کننده پوست حساس", "سایز مسافرتی", "بسته‌های شارژ", ].map((label) => ({ label, href: "#" })), }, { label: "درمان‌ها", id: "treatments", href: "#", items: [ "درمان آکنه", "درمان روشن‌کننده", "درمان ضدپیری", "تقویت‌کننده آبرسانی", "پیلینگ", "ماسک شبانه", "آمپول", "سرم اصلاحی", "درمان آرام‌بخش", "درمان ترمیمی", ].map((label) => ({ label, href: "#" })), }, { label: "ابزار و دستگاه", id: "tools", href: "#", items: [ "غلتک صورت", "گua شا", "ماسک LED", "برس پاکسازی", "ماساژور صورت", "غلتک یخی", "ابزار منافذ", "دستگاه میکروجریان", "سرهای یدکی", "ابزار مسافرتی", ].map((label) => ({ label, href: "#" })), }, { label: "ماسک‌ها", id: "masks", href: "#", items: [ "ماسک ورقه‌ای", "ماسک رس", "ماسک خواب", "ماسک لایه‌ای", "ماسک آبرسان", "ماسک پاک‌کننده", "ماسک آرام‌بخش", "ماسک روشن‌کننده", "ماسک لایه‌بردار", "ست مولتی‌ماسک", ].map((label) => ({ label, href: "#" })), }, { label: "مراقبت چشم و لب", id: "eye-lip", href: "#", items: [ "کرم دور چشم", "سرم دور چشم", "ماسک چشم", "مرهم لب", "ماسک لب", "اسکراب لب", "درمان پف چشم", "مراقبت تیرگی دور چشم", "SPF لب", "مراقبت شبانه لب", ].map((label) => ({ label, href: "#" })), }, { label: "مو و پوست سر", id: "hair", href: "#", items: [ "درمان پوست سر", "اسکراب پوست سر", "سرم مو", "روغن مو", "ماسک مو", "ضدآفتاب مو", "مراقبت شوره", "درمان رشد مو", "مراقبت بدون آبکشی", "ابزار مو", ].map((label) => ({ label, href: "#" })), }, { label: "حمام و سلامتی", id: "wellness", href: "#", items: [ "روغن حمام", "نمک حمام", "محلول‌های حمام", "رایحه‌درمانی", "آرام‌بخش بدن", "کاهش استرس", "مراقبت خواب", "روغن ماساژ", "ست مراقبت شخصی", "هدایای سلامتی", ].map((label) => ({ label, href: "#" })), }, { label: "مراقبت آقایان", id: "men", href: "#", items: [ "شوینده صورت", "مرطوب‌کننده", "پس از اصلاح", "مراقبت ریش", "کرم دور چشم", "ضدپیری", "کنترل چربی", "مراقبت بدن", "کیت مسافرتی", "ست اصلاح", ].map((label) => ({ label, href: "#" })), }, { label: "مراقبت پوست نوجوان", id: "teen", href: "#", items: [ "پاک‌کننده ملایم", "مراقبت آکنه", "کنترل چربی", "مرطوب‌کننده آرام‌بخش", "درمان لک", "SPF", "کیت شروع", "پوست حساس", "سایز مسافرتی", "ملزومات روزانه", ].map((label) => ({ label, href: "#" })), }, { label: "سایز مسافرتی", id: "travel", href: "#", items: [ "پاک‌کننده کوچک", "سرم کوچک", "مرطوب‌کننده کوچک", "ماسک کوچک", "کیت مسافرتی", "ظرف قابل شارژ", "مناسب کابین", "ست نمونه", "کیت آخر هفته", "مراقبت در مسیر", ].map((label) => ({ label, href: "#" })), }, { label: "هدیه و ست‌ها", id: "gifts", href: "#", items: [ "ست هدیه", "کیت شروع", "بسته روتین", "پرفروش‌ترین‌ها", "ست مناسبتی", "نسخه محدود", "ست کوچک", "هدایای لوکس", "زیر ۵۰ دلار", "زیر ۱۰۰ دلار", ].map((label) => ({ label, href: "#" })), }, ], }, { id: "collections", label: "مجموعه‌ها", href: "#", sections: [ { label: "بر اساس مشکل پوست", id: "concerns", href: "#", items: [ "آکنه", "خشکی", "حساسیت", "خطوط ریز", "چین و چروک", "لک", "قرمزی", "کدری", "بافت ناهمگن", "منافذ باز", ].map((label) => ({ label, href: "#" })), }, { label: "بر اساس نوع پوست", id: "skin-type", href: "#", items: [ "نرمال", "خشک", "چرب", "مختلط", "حساس", "بالغ", "آکنه‌ای", "کم‌آب", "واکنش‌پذیر", "همه انواع پوست", ].map((label) => ({ label, href: "#" })), }, { label: "بر اساس ماده فعال", id: "ingredients", href: "#", items: [ "هیالورونیک اسید", "ویتامین C", "رتینول", "نیاسینامید", "سرامید", "پپتید", "سالیسیلیک اسید", "AHA و BHA", "باکوچیول", "سنتلا آسیاتica", ].map((label) => ({ label, href: "#" })), }, { label: "بر اساس روتین", id: "routine", href: "#", items: [ "روتین صبح", "روتین شب", "روتین مینیمال", "روتین پیشرفته", "درمان‌های هفتگی", "روتین مسافرتی", "مراقبت پس از درمان", "مراقبت فصلی", "آیین‌های مراقبت شخصی", "الهام‌گرفته از حرفه‌ای‌ها", ].map((label) => ({ label, href: "#" })), }, { label: "زیبایی پاک و مسئولانه", id: "clean", href: "#", items: [ "زیبایی پاک", "وگان", "بدون تست حیوانی", "بدون بو", "تست‌شده توسط متخصص پوست", "مناسب پوست حساس", "بسته‌بندی زیست‌محیطی", "قابل بازیافت", "قابل شارژ", "برندهای پایدار", ].map((label) => ({ label, href: "#" })), }, ], }, { label: "آزمون پوست", href: "#" }, { label: "درباره ما", href: "#" }, { label: "وبلاگ", href: "#" }, { label: "حراج", href: "#" }, ]; const SIDE_MENU = [ [ { label: "حساب کاربری", href: "#", icon: User, }, { label: "سوابق خرید", href: "#", icon: History, }, { label: "روش‌های پرداخت", href: "#", icon: CreditCard, }, { label: "تنظیمات حساب", href: "#", icon: Settings, }, { label: "خروج", href: "#", icon: LogOut, }, ], [ { label: "راهنما", href: "#", icon: HeartHandshake, }, { label: "راهنمای کاربران", href: "#", icon: HelpCircle, }, { label: "سؤالات متداول", href: "#", icon: FileQuestion, }, { label: "تیکت پشتیبانی", href: "#", icon: LifeBuoy, }, ], [ { label: "علاقه‌مندی‌ها", href: "#", icon: Heart, }, { label: "ذخیره‌شده‌ها", href: "#", icon: Bookmark, }, { label: "هشدار موجود شدن", href: "#", icon: Bell, }, { label: "اخیراً مشاهده‌شده", href: "#", icon: Star, }, ], [ { label: "بازخورد", href: "#", icon: MessageCircleHeart, }, { label: "امتیازدهی به تجربه", href: "#", icon: ThumbsUp, }, { label: "گزارش مشکل", href: "#", icon: Bug, }, ], ]; const EcommerceNavbar2 = ({ home = HOME, helpfullLinks = HELPFUL_LINKS, menu = MENU, sideMenu = SIDE_MENU, className, }: EcommerceNavbar2Props) => { useEffect(() => { document.documentElement.style.setProperty( "--primary-nav-height", "5.25rem", ); document.documentElement.style.setProperty( "--secondary-nav-height", "3.25rem", ); }, []); return (
ری یو آی
۰
); }; const SearchForm = () => { return ( ); }; const HelpfullLinksDropdown = ({ groups }: HelpfullLinksDropdownProps) => { if (!groups) return; return ( {groups.map(({ group, links }, index) => ( {group} {links.map(({ label, href }, index) => ( {label} ))} ))} ); }; const MobileMenu = ({ menu, homeLink }: MobileMenuProps) => { return (
{menu.map((group, index) => (
{group.map(({ href, label, icon: Icon }, index) => ( ))}
))}
); }; const SecondaryMenu = ({ menu }: SecondaryMenuProps) => { return (
{menu.map(({ sections, ...item }, index) => ( {sections ? ( ) : ( {item.label} )} ))}
); }; const SecondaryMenuMobile = ({ menu }: SecondaryMenuMobileProps) => { if (!menu) return; return (
{menu.map(({ sections, label, href }, index) => (

{href ? {label} : {label}}

{sections && ( {sections.map(({ id, label, items }) => ( {label}
{items.map(({ href, label }, index) => ( ))}
))}
)}
))}
); }; const DesktopMenuDropdownItem = ({ sections, label, href, }: DesktopMenuDropdownItemProps) => { const [activeSectionId, setActiveSectionId] = useState(); const sharedClasses = "h-full space-y-2 overflow-auto pt-6 pb-2"; const MenuItemClick = (e: React.MouseEvent) => { const selectedSectionId = e.currentTarget.getAttribute("data-id") ?? undefined; setActiveSectionId(selectedSectionId); }; const MenuItemMouseEnter = (e: React.MouseEvent) => { const selectedSectionId = e.currentTarget.getAttribute("data-id") ?? undefined; setActiveSectionId(selectedSectionId); }; const activeSectionData = useMemo( () => sections?.find((section) => section.id === activeSectionId), [sections, activeSectionId], ); if (!sections) return; return ( {label}

{label}

    {sections.map((section, index) => (
  1. ))}
{activeSectionData && (

{activeSectionData.label}

    {activeSectionData.items.map((item, index) => (
  1. {item.label}
  2. ))}
)}
); }; export { EcommerceNavbar2 };