@anker-in/headless-ui 1.1.17 → 1.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/biz-components/AccordionCards/index.d.ts +17 -0
- package/dist/cjs/biz-components/AccordionCards/index.js +1 -1
- package/dist/cjs/biz-components/AccordionCards/index.js.map +3 -3
- package/dist/cjs/biz-components/HeaderNavigation/index.js +1 -1
- package/dist/cjs/biz-components/HeaderNavigation/index.js.map +3 -3
- package/dist/cjs/biz-components/HeaderNavigation/types.d.ts +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/types.js +1 -1
- package/dist/cjs/biz-components/HeaderNavigation/types.js.map +2 -2
- package/dist/cjs/components/board.d.ts +3 -1
- package/dist/cjs/components/board.js +1 -1
- package/dist/cjs/components/board.js.map +3 -3
- package/dist/cjs/components/brand-strip.d.ts +26 -0
- package/dist/cjs/components/brand-strip.js +2 -0
- package/dist/cjs/components/brand-strip.js.map +7 -0
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/index.js.map +3 -3
- package/dist/cjs/stories/accordionCards.stories.d.ts +21 -0
- package/dist/cjs/stories/accordionCards.stories.js +1 -1
- package/dist/cjs/stories/accordionCards.stories.js.map +3 -3
- package/dist/cjs/stories/brandStrip.stories.d.ts +12 -0
- package/dist/cjs/stories/brandStrip.stories.js +2 -0
- package/dist/cjs/stories/brandStrip.stories.js.map +7 -0
- package/dist/esm/biz-components/AccordionCards/index.d.ts +17 -0
- package/dist/esm/biz-components/AccordionCards/index.js +1 -1
- package/dist/esm/biz-components/AccordionCards/index.js.map +3 -3
- package/dist/esm/biz-components/HeaderNavigation/index.js +1 -1
- package/dist/esm/biz-components/HeaderNavigation/index.js.map +3 -3
- package/dist/esm/biz-components/HeaderNavigation/types.d.ts +2 -0
- package/dist/esm/biz-components/HeaderNavigation/types.js +1 -1
- package/dist/esm/biz-components/HeaderNavigation/types.js.map +2 -2
- package/dist/esm/components/board.d.ts +3 -1
- package/dist/esm/components/board.js +1 -1
- package/dist/esm/components/board.js.map +3 -3
- package/dist/esm/components/brand-strip.d.ts +26 -0
- package/dist/esm/components/brand-strip.js +2 -0
- package/dist/esm/components/brand-strip.js.map +7 -0
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/index.js.map +2 -2
- package/dist/esm/stories/accordionCards.stories.d.ts +21 -0
- package/dist/esm/stories/accordionCards.stories.js +1 -1
- package/dist/esm/stories/accordionCards.stories.js.map +3 -3
- package/dist/esm/stories/brandStrip.stories.d.ts +12 -0
- package/dist/esm/stories/brandStrip.stories.js +2 -0
- package/dist/esm/stories/brandStrip.stories.js.map +7 -0
- package/package.json +1 -1
- package/style.css +62 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/biz-components/HeaderNavigation/index.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client'\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport { Picture, Text, Button, Container, Link, Heading } from '../../components/index.js'\n\nimport { withLayout } from '../../shared/Styles.js'\n\nimport { cn, atobID } from '../../helpers/utils.js'\n\nimport type {\n MobilePrimaryNavigationData,\n MobileSecondaryNavigationData,\n MobileNavigationProps,\n DesktopNavigationProps,\n HeaderNavigationProps,\n} from './types.js'\nimport NavProvider, { useNavContext } from './NavProvider.js'\n\nimport { HeaderNavigationMenu, HeaderNavigationBlockType, HeaderNavigationActionBlockType } from './types.js'\n\nimport { debounce } from 'es-toolkit'\nimport jump from 'jump.js'\n\nimport { useGSAP } from '@gsap/react'\nimport { gsap } from 'gsap'\nimport type { Product, ProductVariant } from '../../cpn-components/CpnProductCard/types.js'\n\nimport { WithSidebar, WithSupports, WithMulticol, WithGroupCategory } from './withCategory.js'\n\nimport { Menu, Close, User, RightArrow, LeftArrow, DownArrow, Polygon } from './icons/index.js'\n\nimport NavigationSearch from '../NavigationSearch/index.js'\n\nconst HeaderNavigation = forwardRef<HTMLDivElement, HeaderNavigationProps>((props, ref) => {\n const {\n data: { headerNavigation } = {},\n buildProps,\n event,\n profile,\n theme = 'light',\n isTop = false,\n searchResult,\n onSearch,\n isSearching,\n keywords,\n onPrimaryNavClick,\n onSeriesProductClick,\n onSidebarNavClick,\n headerId,\n cartCount,\n } = props\n\n const searchRef = useRef<HTMLDivElement>(null)\n const [searchOpen, setSearchOpen] = useState(false)\n const [headerHidden, setHeaderHidden] = useState(false)\n const [changeHeaderBackground, setChangeHeaderBackground] = useState(false)\n const [isMobile, setIsMobile] = useState(false)\n\n const headerRef = useRef<HTMLDivElement>(null)\n\n const resizeWindow = () => {\n const offsetWidth = document?.querySelector('body')?.offsetWidth || 0\n setIsMobile(offsetWidth <= 1440)\n }\n\n useEffect(() => {\n resizeWindow()\n window.addEventListener('resize', resizeWindow)\n return () => {\n window.removeEventListener('resize', resizeWindow)\n }\n }, [])\n\n useImperativeHandle(ref, () => headerRef.current as HTMLDivElement)\n\n useEffect(() => {\n if (headerRef.current && isTop) {\n jump(headerRef.current, { duration: 0, offset: headerRef.current?.getBoundingClientRect()?.bottom || 0 })\n }\n }, [isTop])\n\n // useEffect(() => {\n // let upwardDistance = 0\n // let lastScrollY = 0\n // const showDownNav = throttle(latest => {\n // const delta = lastScrollY - latest\n // if (delta > 0) {\n // upwardDistance += delta\n // if (upwardDistance >= 300) {\n // setHeaderHidden(false)\n // upwardDistance = 0\n // }\n // } else {\n // setHeaderHidden(latest > 300)\n // }\n // setChangeHeaderBackground(latest > 30)\n // lastScrollY = latest\n // }, 200)\n\n // const scrollAnimate = () => {\n // let scrollTop = 0\n // if (document?.documentElement && document?.documentElement?.scrollTop) {\n // scrollTop = document?.documentElement.scrollTop\n // } else if (document?.body) {\n // scrollTop = document?.body.scrollTop\n // }\n // showDownNav(scrollTop)\n // }\n\n // window.addEventListener('scroll', scrollAnimate)\n\n // return () => window.removeEventListener('scroll', scrollAnimate)\n // }, [])\n\n useEffect(() => {\n if (event) {\n event.search = () => setSearchOpen(true)\n }\n }, [event])\n\n useGSAP(() => {\n if (searchRef?.current && searchOpen) {\n gsap.fromTo(\n searchRef.current,\n {\n height: 0,\n },\n {\n height: 'auto',\n duration: 0.3,\n }\n )\n }\n }, [searchOpen])\n\n useEffect(() => {\n document.documentElement.style.overflow = searchOpen ? 'hidden' : 'auto'\n }, [searchOpen])\n\n const searchPage = useMemo(() => {\n return (\n headerNavigation?.headerBar?.actions?.find(\n (item: any) => item?.blockType === HeaderNavigationActionBlockType.Search\n )?.searchBar?.[0] || {}\n )\n }, [headerNavigation])\n\n return (\n <NavProvider\n buildProps={buildProps}\n profile={profile}\n isMobile={isMobile}\n event={event}\n payloadData={headerNavigation}\n onSidebarNavClick={onSidebarNavClick}\n onSeriesProductClick={onSeriesProductClick}\n cartCount={cartCount}\n >\n <header\n id={headerId || 'header'}\n data-ui-component-id=\"HeaderNavigation\"\n // className={cn('sticky top-0 z-[100] transition-transform duration-500 ease-in-out', {\n // ['translate-y-[-100%]']: headerHidden,\n // })}\n className=\"relative z-[100] bg-white\"\n ref={headerRef}\n >\n <div\n className={cn(\n 'hover:bg-white hover:text-black',\n theme === 'light' ? 'text-black' : 'text-white',\n // {\n // ['!bg-white transition-all duration-500 ease-in-out']: changeHeaderBackground,\n // },\n {\n // ['hover:!text-black']: theme === 'dark',\n // ['!text-black']: changeHeaderBackground,\n }\n )}\n onClick={() => setChangeHeaderBackground(true)}\n >\n <DesktopNavigation\n data={headerNavigation}\n className=\"desktop:block hidden !bg-white\"\n theme={theme}\n onNavItemClick={() => setChangeHeaderBackground(true)}\n onPrimaryNavClick={onPrimaryNavClick}\n />\n <MobileNavigation\n data={headerNavigation}\n className=\"desktop:hidden block !bg-white\"\n onPrimaryNavClick={onPrimaryNavClick}\n />\n {searchOpen && (\n <div\n className=\"absolute left-0 top-0 z-[60] flex w-full flex-col bg-black/70\"\n style={{ height: `calc(100dvh - ${headerRef?.current?.getBoundingClientRect()?.top}px)` }}\n >\n <div ref={searchRef} className={cn('overflow-y-auto', {})}>\n <NavigationSearch\n data={searchPage}\n keywords={keywords}\n isSearching={isSearching}\n searchResult={searchResult}\n onSearch={(value: string) => {\n onSearch?.(value)\n }}\n onClose={() => {\n onSearch?.()\n setSearchOpen(false)\n }}\n />\n </div>\n <div className=\"flex-1 bg-transparent\" onClick={() => setSearchOpen(false)} />\n </div>\n )}\n </div>\n </header>\n </NavProvider>\n )\n})\n\nconst DesktopNavigation = forwardRef<HTMLDivElement, DesktopNavigationProps>((props, ref) => {\n const { data, onNavItemClick, className, theme, onPrimaryNavClick } = props\n const { event, profile } = useNavContext()\n const [downdownHover, setDowndownHover] = useState(false)\n\n const groupCategories = useMemo(() => {\n return WithGroupCategory(data?.categories?.filter((item: any) => item?.pcShow)) as any[][]\n }, [data])\n\n const [categoriesItem, setCategoriesItem] = useState<any>(null)\n const [navStatusArray, setNavStatusArray] = useState<{ index: number; groupIndex: number; open: boolean }[][]>([])\n const profileRef = useRef<HTMLDivElement>(null)\n const [userProfileOpen, setUserProfileOpen] = useState(false)\n const headerRef = useRef<HTMLDivElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const navItemRefs = useRef<HTMLDivElement[][]>(\n groupCategories.map((categories: any) => Array(categories?.length || 0).fill(null))\n )\n\n useEffect(() => {\n if (groupCategories?.length) {\n setNavStatusArray(\n groupCategories?.map((groupItem: any, groupIndex: number) => {\n return groupItem?.map((_: any, index: number) => ({ groupIndex, index, open: false }))\n })\n )\n }\n }, [groupCategories])\n\n const currentNavItem = useMemo(() => {\n let currentNavItem: { index: number; groupIndex: number; open: boolean } | null = null\n for (const groupItem of navStatusArray) {\n for (const item of groupItem) {\n if (item.open) {\n currentNavItem = item\n break\n }\n }\n if (currentNavItem) break\n }\n return currentNavItem\n }, [navStatusArray])\n\n useEffect(() => {\n document.documentElement.style.overflow = currentNavItem?.open || userProfileOpen ? 'hidden' : 'auto'\n }, [currentNavItem?.open, userProfileOpen])\n\n const handleNavItemClick = (e: any, groupIndex: number, index: number) => {\n setUserProfileOpen(false)\n if (categoriesItem?.components?.[0]?.blockType === HeaderNavigationBlockType.Links) {\n // link\u6A21\u5757\u7279\u6B8A\u5904\u7406\n categoriesItem?.components?.[0]?.url && window.open(categoriesItem?.components?.[0]?.url)\n } else {\n const categories = groupCategories?.flat() || []\n const position = categories?.findIndex(item => item?.id === groupCategories[groupIndex][index]?.id)\n e.stopPropagation()\n onNavItemClick?.()\n onPrimaryNavClick?.(categories[position], position)\n setCategoriesItem(groupCategories[groupIndex][index])\n setNavStatusArray(prev =>\n prev.map(groupItem =>\n groupItem.map(item =>\n item.groupIndex === groupIndex && item.index === index\n ? { ...item, open: !item.open }\n : { ...item, open: false }\n )\n )\n )\n }\n }\n\n const handleNavMenuClose = () => {\n setNavStatusArray(prev => prev.map(groupItem => groupItem.map(item => ({ ...item, open: false }))))\n }\n\n const currentBlockTypeCategories = useMemo(() => {\n if (categoriesItem) return categoriesItem?.components?.[0]?.blockType\n }, [categoriesItem])\n\n const SidebarDropdownComp = WithSidebar(SidebarDropdown, categoriesItem)\n const MulticolDropdownComp = WithMulticol(MulticolDropdown, categoriesItem)\n const SupportsDropdownComp = WithSupports(SupportsDropdown, {\n categoriesItem,\n currentNavItemRef: navItemRefs.current?.[currentNavItem?.groupIndex || 0]?.[currentNavItem?.index || 0],\n })\n\n const DropdownComp = useMemo(() => {\n switch (currentBlockTypeCategories) {\n case HeaderNavigationBlockType.Sidebar:\n return <SidebarDropdownComp />\n case HeaderNavigationBlockType.Supports:\n return <SupportsDropdownComp />\n case HeaderNavigationBlockType.Multicol:\n return <MulticolDropdownComp />\n default:\n return null\n }\n }, [currentBlockTypeCategories, categoriesItem])\n\n const actions = useMemo(() => {\n return data?.headerBar?.actions?.filter((item: any) => item?.pcShow)\n }, [data])\n\n const profileAction = useMemo(() => {\n return actions?.find((item: any) => item?.blockType === HeaderNavigationActionBlockType.Profile)\n }, [actions])\n\n const handleProfileClick = useCallback(() => {\n setUserProfileOpen(prev => !prev)\n }, [])\n\n useEffect(() => {\n if (profileRef?.current) {\n const profileRefElement = profileRef.current as HTMLDivElement\n profileRefElement.addEventListener('click', handleProfileClick)\n\n return () => {\n profileRefElement.removeEventListener('click', handleProfileClick)\n }\n }\n }, [handleProfileClick])\n\n useGSAP(() => {\n if (currentNavItem?.open) {\n gsap.fromTo(\n dropdownRef?.current,\n {\n height: 0,\n },\n {\n height: 'auto',\n }\n )\n }\n }, [currentNavItem?.open])\n\n return (\n <Container className={cn('relative h-[96px]', className)}>\n <div ref={headerRef} onClick={handleNavMenuClose} className=\"flex h-full flex-col justify-end gap-4\">\n <div className=\"flex items-center justify-between\">\n <Logo />\n <Actions ref={profileRef} actions={actions} activeStatus={userProfileOpen} />\n </div>\n <div className=\"flex justify-between\">\n {groupCategories?.map((groupItem: any, groupIndex: number) => {\n return (\n <div key={`groupCategory-${groupIndex}`} className=\"flex gap-3\">\n {groupItem?.map((item: any, index: number) => {\n return (\n <div\n key={item.id}\n ref={(el: HTMLDivElement) => {\n navItemRefs.current[groupIndex][index] = el\n }}\n className=\"group cursor-pointer\"\n >\n <div className=\"relative\">\n <div\n className=\"flex items-center gap-1 pb-4\"\n onClick={e => handleNavItemClick(e, groupIndex, index)}\n >\n <Text html={item.text} className=\"text-sm font-bold leading-[1.4]\" />\n <DownArrow\n className={cn('size-4 opacity-0 transition-opacity duration-500 group-hover:opacity-100', {\n ['rotate-180']:\n currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index,\n ['opacity-100']:\n downdownHover &&\n currentNavItem?.groupIndex === groupIndex &&\n currentNavItem?.index === index,\n })}\n />\n </div>\n <div\n className={cn(\n 'absolute bottom-0 left-0 h-[2px] w-0 transition-all duration-500',\n {\n 'w-[calc(100%-20px)]':\n currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index,\n },\n theme === 'dark' ? 'bg-white' : 'bg-[#080A0F]'\n )}\n />\n </div>\n </div>\n )\n })}\n </div>\n )\n })}\n </div>\n </div>\n <div\n className={cn(\n 'absolute left-0 top-full z-[999] flex w-full flex-col overflow-hidden border-t border-b-[#E4E5E6] bg-black/70 text-black',\n {\n hidden: !(currentNavItem?.open && categoriesItem),\n }\n )}\n onMouseEnter={() => setDowndownHover(true)}\n onMouseLeave={() => setDowndownHover(false)}\n style={{ height: `calc(100dvh - ${headerRef?.current?.getBoundingClientRect()?.bottom}px)` }}\n >\n <div\n ref={dropdownRef}\n className={cn('relative z-50', {\n 'overflow-hidden': currentBlockTypeCategories !== HeaderNavigationBlockType.Supports,\n })}\n >\n {DropdownComp}\n </div>\n <div className=\"flex-1 bg-transparent\" onClick={handleNavMenuClose} />\n </div>\n {userProfileOpen && (\n <div\n className=\"absolute left-0 top-full z-[999] flex h-dvh w-full bg-black/70\"\n // style={{\n // height: `calc(100dvh - ${profileRef?.current?.getBoundingClientRect()?.bottom}px)`,\n // top: `calc(96px)`,\n // }}\n >\n <div\n className=\"absolute w-[272px] bg-white p-4\"\n style={{\n right: `calc(100% - ${profileRef?.current?.getBoundingClientRect()?.right}px)`,\n top: '-36px',\n }}\n >\n {profile?.email ? (\n <>\n <Text html={profile?.nick_name || profileAction?.welcome} className=\"text-sm font-bold\" />\n <div className=\"mt-2 h-px bg-[#D9D9D9]\" />\n <div className=\"mt-2\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem className=\"py-2\" key={item.id} label={item?.title} href={item?.url} />\n ))}\n </div>\n </>\n ) : (\n <>\n <Polygon className=\"absolute -top-2 right-[46px] z-30 text-white\" />\n <Text html={profileAction?.benefits_title} className=\"text-sm font-bold leading-[1.4]\" />\n <div className=\"mt-2 flex flex-col gap-1\">\n {profileAction?.benefits?.map((item: any) => (\n <div key={item.id} className=\"flex items-center gap-[6px]\">\n <Picture\n source={item.benefitIcon?.url}\n className=\"size-4\"\n alt={item.benefit}\n width={16}\n height={16}\n />\n <Text html={item.benefit} className=\"text-sm font-bold leading-[1.4]\" />\n </div>\n ))}\n </div>\n <div className=\"mt-4 flex items-center gap-2\">\n <Button variant=\"secondary\" size=\"lg\" onClick={() => event?.join?.()}>\n <Text html={profileAction?.primaryButton || 'Join Now'} className=\"font-bold\" />\n </Button>\n <Button variant=\"primary\" size=\"lg\" onClick={() => event?.login?.()}>\n <Text html={profileAction?.secondaryButton || 'Log In'} className=\"font-bold\" />\n </Button>\n </div>\n </>\n )}\n </div>\n <div className=\"flex-1 bg-transparent\" onClick={() => setUserProfileOpen(false)} />\n </div>\n )}\n </Container>\n )\n})\n\n/**\n * \u4FA7\u8FB9\u680F\u4E0B\u62C9\n * @param categoriesItem \u5206\u7C7B\u9879\n */\nconst SidebarDropdown = React.memo(\n ({ sidebarCategoriesMetadata, seriesMetadata }: { sidebarCategoriesMetadata: any; seriesMetadata: any }) => {\n const { buildProps, onSidebarNavClick } = useNavContext()\n const [expandedSubcategory, setExpandedSubcategory] = useState<{ index: number; open: boolean }[]>([])\n const [activeSubSubcategoryIndex, setActiveSubSubcategoryIndex] = useState(-1)\n const sidebarDropdownRef = useRef<HTMLDivElement>(null)\n\n const initExpandedSubcategory = useCallback(() => {\n const subcategories = sidebarCategoriesMetadata?.subcategories\n if (!subcategories?.length) return\n\n const withSubSubCategoriesIndex = subcategories.findIndex((item: any) => !!item?.subSubCategories)\n const withoutSubSubCategoriesIndex = subcategories.findIndex((item: any) => !item?.subSubCategories)\n\n // \u521B\u5EFA\u5C55\u5F00\u72B6\u6001\u6570\u7EC4\n const expandedStates = subcategories.map((_: any, index: number) => ({\n index,\n open: withSubSubCategoriesIndex === index || withoutSubSubCategoriesIndex === index,\n }))\n\n setExpandedSubcategory(expandedStates)\n }, [sidebarCategoriesMetadata])\n\n useEffect(() => {\n initExpandedSubcategory()\n }, [initExpandedSubcategory])\n\n // \u901A\u8FC7categoriesMetadata\u7684subSubCategories\u7684label\u4E0Eseries\u7684label\u5339\u914D\n const matchSeriesMetadata = useMemo(() => {\n const subCategory =\n sidebarCategoriesMetadata?.subcategories?.[expandedSubcategory?.find(item => item.open)?.index || 0]\n const currentSeriesMetadata =\n seriesMetadata?.find((item: any) => item?.label?.toLowerCase() === subCategory?.label?.toLowerCase()) || {}\n if (subCategory?.collections) {\n const category = buildProps?.categories?.[subCategory?.collections] || {}\n return {\n label: currentSeriesMetadata?.label,\n isCollection: true,\n banner: currentSeriesMetadata?.banner,\n primary: currentSeriesMetadata?.primary,\n series: [\n {\n products: category?.products,\n },\n ],\n }\n } else {\n if (subCategory?.subSubCategories) {\n const activeSubSubcategory = subCategory?.subSubCategories?.[activeSubSubcategoryIndex]\n const currentActiveSeriesMetadata =\n seriesMetadata?.find(\n (item: any) => item?.label?.toLowerCase() === activeSubSubcategory?.label?.toLowerCase()\n ) || {}\n if (activeSubSubcategory?.collections) {\n const category = buildProps?.categories?.[activeSubSubcategory?.collections] || {}\n return {\n label: currentActiveSeriesMetadata?.label,\n isCollection: true,\n banner: currentActiveSeriesMetadata?.banner,\n primary: currentActiveSeriesMetadata?.primary,\n series: [\n {\n products: category?.products,\n },\n ],\n }\n } else {\n return currentActiveSeriesMetadata\n }\n } else {\n return currentSeriesMetadata\n }\n }\n }, [sidebarCategoriesMetadata, expandedSubcategory, activeSubSubcategoryIndex, seriesMetadata])\n\n const handleSubcategoryOpen = useCallback(\n (index: number, subcategoryItem: any) => {\n subcategoryItem?.subSubCategories?.length > 0\n ? setActiveSubSubcategoryIndex(0)\n : setActiveSubSubcategoryIndex(-1)\n\n if (subcategoryItem?.subSubCategories?.length > 0) {\n setExpandedSubcategory(prev =>\n prev.map(item => (item.index === index ? { ...item, open: true } : { ...item, open: false }))\n )\n } else {\n const subcategories = sidebarCategoriesMetadata?.subcategories\n const withSubSubCategoriesIndex = subcategories?.findIndex((item: any) => !!item?.subSubCategories)\n setExpandedSubcategory(prev =>\n prev.map(item => {\n return { ...item, open: item.index === index || item.index === withSubSubCategoriesIndex }\n })\n )\n }\n },\n [sidebarCategoriesMetadata, initExpandedSubcategory]\n )\n\n const handleSubSubcategoryOpen = (index: number, subSubindex: number) => {\n setExpandedSubcategory(prev =>\n prev.map(item => (item.index === index ? { ...item, open: true } : { ...item, open: false }))\n )\n setActiveSubSubcategoryIndex(subSubindex)\n }\n\n return (\n <Container childClassName=\"lg-desktop:gap-12 flex bg-white gap-8\">\n <div\n className=\"lg-desktop:basis-[356px] flex basis-[284px] flex-col gap-4 py-4\"\n style={{\n userSelect: 'none',\n }}\n ref={sidebarDropdownRef}\n >\n <div\n className=\"desktop:h-[416px] flex flex-col overflow-y-auto\"\n style={{\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n }}\n >\n {sidebarCategoriesMetadata?.subcategories?.map((subItem: any, index: number) => {\n const hasSubSubCategory =\n Array.isArray(subItem?.subSubCategories) && subItem?.subSubCategories?.length > 0\n return (\n <div key={`subcategoryItem-${index}`}>\n <div\n className={cn('flex cursor-pointer items-center justify-between', {\n 'bg-[#F5F5F7]':\n !hasSubSubCategory && expandedSubcategory?.find(item => item.index === index)?.open,\n })}\n onClick={() => {\n handleSubcategoryOpen(index, subItem)\n onSidebarNavClick?.(subItem, index)\n }}\n >\n <Text html={subItem.label} className=\"p-4 text-sm font-bold leading-[1.4]\" />\n {hasSubSubCategory && (\n <DownArrow\n className={cn('size-4', {\n ['rotate-180']: expandedSubcategory?.find(item => item.index === index)?.open,\n })}\n />\n )}\n </div>\n {expandedSubcategory?.find(item => item.index === index)?.open && (\n <div className=\"flex flex-col\">\n {subItem.subSubCategories?.map((subSubItem: any, subSubindex: number) => (\n <Text\n html={subSubItem.label}\n onClick={() => {\n handleSubSubcategoryOpen(index, subSubindex)\n onSidebarNavClick?.(subSubItem, subSubindex)\n }}\n key={`subSubItem-${index}-${subSubindex}`}\n className={cn(\n 'cursor-pointer px-6 py-4 text-sm font-bold leading-[1.4] text-[#6D6D6F] hover:bg-[#F5F5F7]',\n {\n 'bg-[#F5F5F7]': activeSubSubcategoryIndex === subSubindex,\n }\n )}\n />\n ))}\n </div>\n )}\n </div>\n )\n })}\n </div>\n {sidebarCategoriesMetadata && (\n <div className=\"flex\">\n <div className=\"flex flex-col gap-4\">\n {sidebarCategoriesMetadata?.primary && (\n <Button\n as=\"a\"\n href={`${sidebarCategoriesMetadata?.primary?.url}?ref=${sidebarCategoriesMetadata?.primary?.label}_shopall`}\n variant=\"primary\"\n size=\"lg\"\n className=\"lg-desktop:text-base text-sm\"\n >\n {sidebarCategoriesMetadata?.primary?.label}\n </Button>\n )}\n {sidebarCategoriesMetadata?.secondary && (\n <Button\n as=\"a\"\n href={sidebarCategoriesMetadata?.secondary?.url}\n variant=\"link\"\n size=\"lg\"\n className=\"lg-desktop:text-base justify-start !p-0 text-sm\"\n >\n {sidebarCategoriesMetadata?.secondary?.label}\n </Button>\n )}\n </div>\n </div>\n )}\n </div>\n <div className=\"flex-1 py-4\">\n {Reflect.ownKeys(matchSeriesMetadata).length > 0 && (\n <div className=\"mb-4 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Text\n html={matchSeriesMetadata?.label}\n className=\"lg-desktop:text-2xl text-xl font-bold leading-[1.4]\"\n />\n {matchSeriesMetadata?.primary && !matchSeriesMetadata?.primary?.hide && (\n <Button\n as=\"a\"\n href={`${matchSeriesMetadata?.primary?.url}?ref=${matchSeriesMetadata?.label}_viewmore`}\n variant=\"link\"\n size=\"lg\"\n className=\"lg-desktop:text-base justify-start !p-0 text-sm font-bold leading-[1.2] no-underline\"\n >\n {matchSeriesMetadata?.primary?.label}\n </Button>\n )}\n </div>\n <Link\n href={matchSeriesMetadata?.guide?.url}\n className=\"lg-desktop:text-base text-sm leading-[1.2] text-[#6D6D6F]\"\n >\n {matchSeriesMetadata?.guide?.label}\n </Link>\n </div>\n )}\n <div\n className=\"flex h-[426px] flex-col gap-4 overflow-y-auto\"\n style={{\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n }}\n >\n {matchSeriesMetadata?.series?.map((seriesItem: any, seriesIndex: number) => (\n <div key={`seriesItem-${seriesIndex}`}>\n {seriesItem.label && (\n <Text html={seriesItem.label} className=\"mb-2 text-sm font-bold leading-[1.4] text-[#6D6D6F]\" />\n )}\n <div className=\"grid grid-cols-3 gap-4\">\n {!!matchSeriesMetadata?.banner && (\n <Link asChild={!matchSeriesMetadata?.banner?.href} href={matchSeriesMetadata?.banner?.href}>\n <div className=\"[&_img]:hover:duration-600 relative [&_img]:hover:scale-110 [&_img]:hover:transition-all\">\n <Picture\n source={matchSeriesMetadata?.banner?.imageUrl}\n className=\"laptop:h-[120px] h-[114px]\"\n imgClassName=\"object-cover h-full\"\n />\n <div className=\"absolute inset-x-0 bottom-0 p-4\">\n <Heading\n size={2}\n html={matchSeriesMetadata?.banner?.title || 'Buy in Guide'}\n className=\"font-bold text-white\"\n />\n <Text\n html={matchSeriesMetadata?.banner?.desc || '20.000mAh'}\n className=\"text-sm font-bold text-white\"\n />\n </div>\n </div>\n </Link>\n )}\n {seriesItem.products?.map((product: any, index: number) => (\n <SeriesProductItem\n seriesLabel={matchSeriesMetadata?.label}\n key={`seriesProductItem-${index}`}\n product={product}\n isCollection={matchSeriesMetadata?.isCollection}\n />\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n </Container>\n )\n }\n)\n\n/**\n * \u591A\u5217\u4E0B\u62C9\n * @param categoriesItem \u5206\u7C7B\u9879\n */\nconst MulticolDropdown = ({ multicolMetadata }: { multicolMetadata: any }) => {\n const multicolDropdownRef = useRef<HTMLDivElement>(null)\n\n // useGSAP(() => {\n // gsap.fromTo(\n // multicolDropdownRef?.current,\n // {\n // height: 0,\n // },\n // {\n // height: 'auto',\n // duration: 0.5,\n // }\n // )\n // }, [])\n\n return (\n <div ref={multicolDropdownRef}>\n <Container childClassName=\"bg-white\" className=\"h-full\">\n <div className=\"flex gap-4 py-4\">\n {multicolMetadata?.map((item: any, index: number) => (\n <div key={`multicolItem-${item?.label}-${index}`} className=\"w-1/4\">\n <MulticolItem item={item} />\n </div>\n ))}\n </div>\n </Container>\n </div>\n )\n}\n\n/**\n * supports\u4E0B\u62C9\n * @param categoriesItem \u5206\u7C7B\u9879\n * @param currentNavItemRef \u5F53\u524D\u5BFC\u822A\u9879\n */\nconst SupportsDropdown = ({\n supportsMetadata,\n currentNavItemRef,\n}: {\n supportsMetadata: any\n currentNavItemRef: HTMLDivElement\n}) => {\n const supportsDropdownRef = useRef<HTMLDivElement>(null)\n const [navItemReact, setNavItemReact] = useState<DOMRect | null>(null)\n const [supportsDropdownHeight, setSupportsDropdownHeight] = useState(0)\n\n // useGSAP(() => {\n // gsap.fromTo(\n // supportsDropdownRef?.current,\n // {\n // height: 0,\n // },\n // {\n // height: supportsDropdownHeight,\n // duration: 0.5,\n // }\n // )\n // }, [supportsDropdownHeight])\n\n useEffect(() => {\n if (supportsDropdownRef?.current) {\n const rect = supportsDropdownRef?.current?.getBoundingClientRect()\n setSupportsDropdownHeight(rect.height)\n }\n }, [supportsDropdownRef])\n\n const debouncedHandleResize = debounce(() => {\n if (currentNavItemRef) {\n const rect = currentNavItemRef.getBoundingClientRect()\n setNavItemReact(rect)\n }\n }, 500)\n\n useEffect(() => {\n debouncedHandleResize()\n window.addEventListener('resize', debouncedHandleResize)\n return () => {\n window.removeEventListener('resize', debouncedHandleResize)\n }\n }, [debouncedHandleResize])\n\n useEffect(() => {\n if (currentNavItemRef) {\n const rect = currentNavItemRef.getBoundingClientRect()\n setNavItemReact(rect)\n }\n }, [currentNavItemRef])\n\n return (\n <div\n className=\"absolute top-0 h-full overflow-hidden bg-white transition-all duration-500\"\n style={{ right: `calc(100% - ${navItemReact?.right}px)`, height: supportsDropdownHeight }}\n >\n <div ref={supportsDropdownRef} className=\"p-4\">\n {supportsMetadata?.map((supportItem: any) => (\n <div key={supportItem.id} className=\"py-2\">\n <Link href={supportItem.url} className=\"text-sm font-bold leading-[1.4] no-underline\">\n {supportItem.label}\n </Link>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nconst SeriesProductItem = ({\n product,\n isCollection,\n position,\n seriesLabel,\n}: {\n product: any\n isCollection?: boolean\n position?: number\n seriesLabel?: string\n}) => {\n const { buildProps, onSeriesProductClick } = useNavContext()\n let productData = isCollection\n ? product\n : buildProps?.products?.find((item: Product) => item.handle === product.handle)\n const variant =\n productData?.variants?.find((item: ProductVariant) => item.sku === product.sku) || productData?.variants?.[0]\n\n const listingLink = useMemo(() => {\n return `/products/${productData?.handle}?variant=${atobID(variant?.id as string)}`\n }, [productData?.handle, variant?.id])\n\n const tags = useMemo(() => {\n return productData?.tags\n ?.filter?.((item: any) => item?.startsWith?.('CLtag'))\n ?.map?.((item: any) => item?.replace?.('CLtag:', ''))\n ?.slice?.(0, 2)\n }, [productData?.tags])\n\n if (!variant?.availableForSale) return null\n\n return (\n <Link\n href={listingLink}\n onClick={e => {\n e.preventDefault()\n window.open(listingLink)\n onSeriesProductClick?.(productData, position || 0, seriesLabel)\n }}\n className=\"no-underline hover:text-current\"\n >\n <div className=\"flex shrink-0 items-center gap-4 bg-[#F5F5F7] px-4 py-3 [&_img]:hover:scale-110\">\n <div className=\"shrink-0\">\n <Picture\n source={`${variant?.image?.url || product?.images?.[0]?.url}}`}\n width={90}\n height={90}\n className=\"size-[96px]\"\n imgClassName=\"object-contain h-full\"\n />\n </div>\n <div className=\"relative\">\n <div className=\"flex gap-1\">\n {Array.isArray(tags) &&\n tags?.map((tag: string, index: number) => (\n <Text\n key={index}\n as=\"p\"\n html={tag}\n className=\"text-brand-0 mb-1 inline-block h-[24px] whitespace-nowrap rounded-full border-[1.6px] border-[#00BEFA] px-[6px] text-sm font-bold !leading-[22px]\"\n />\n ))}\n </div>\n {/* {product?.badge && (\n <Text\n as=\"p\"\n html={product?.badge}\n className=\"text-brand-0 mb-1 inline-block h-[24px] rounded-full border-[1.6px] border-[#00BEFA] px-[6px] text-sm font-bold !leading-[24px]\"\n />\n )} */}\n <Text\n className=\"lg-desktop:h-[44px] lg-desktop:text-base line-clamp-2 h-[40px] text-sm font-bold leading-[1.4]\"\n html={productData?.title || product?.name}\n />\n {product?.desc && (\n <Text\n as=\"p\"\n html={product?.desc}\n className=\"lg-desktop:text-sm mt-1 line-clamp-1 text-xs font-bold leading-[1.4] text-[#6D6D6F]\"\n />\n )}\n </div>\n </div>\n </Link>\n )\n}\n\n/**\n * \u591A\u5217\u4E0B\u62C9\u9879\n * @param item \u591A\u5217\u4E0B\u62C9\u9879\n */\nconst MulticolItem = ({ item, allPicture }: { item: any; allPicture?: boolean }) => {\n return (\n <>\n {item?.columns && (\n <>\n <Text html={item.label} as=\"div\" className=\"my-2 text-sm font-bold leading-[1.4] text-[#6D6D6F]\" />\n <div className=\"mt-2 flex flex-col\">\n {item.columns?.map((columnItem: any) => (\n <div key={columnItem.label} className=\"flex items-center gap-1 py-2\">\n <Link\n href={`${columnItem.url}?ref=navMenu`}\n asChild={!columnItem.url}\n className=\"text-sm font-bold leading-[1.4] no-underline\"\n >\n {columnItem.label}\n </Link>\n {columnItem?.badge && (\n <Text\n as=\"p\"\n html={columnItem?.badge || 'badge'}\n className=\"text-brand-0 h-[24px] rounded-full border-[1.6px] border-[var(--brand-color-0)] px-[6px] text-sm font-bold !leading-[22px]\"\n />\n )}\n </div>\n ))}\n </div>\n </>\n )}\n {item?.imageUrl && (\n <div\n className={cn(\n 'laptop:h-[280px] desktop:h-[224px] lg-desktop:h-[280px] tablet:max-w-[346px] laptop:max-w-[440px] desktop:w-full relative h-[240px] max-w-[358px] overflow-hidden',\n {\n ['tablet:max-w-none laptop:max-w-none']: allPicture,\n }\n )}\n >\n <Link href={`${item.url}?ref=navMenu`} asChild={!item.url}>\n <Picture\n source={item.imageUrl}\n width={404}\n height={280}\n className=\"size-full\"\n imgClassName=\"object-cover h-full hover:scale-105 transition-all duration-300\"\n />\n <div className=\"absolute bottom-4 left-4 z-10 flex flex-col justify-end no-underline\">\n <Text\n html={item.title}\n className={cn('lg-desktop:text-2xl text-xl font-bold leading-[1.2] text-white', {\n 'text-black': item?.theme === 'dark',\n })}\n />\n {item.subtitle && (\n <Text\n html={item.subtitle}\n className={cn('text-sm font-bold leading-[1.4] text-white', {\n 'text-black': item?.theme === 'dark',\n })}\n />\n )}\n {item?.primary?.label && (\n <Button\n as=\"a\"\n href={item?.primary?.url}\n variant=\"link\"\n size=\"lg\"\n className={cn('mr-auto !p-0 text-sm font-bold leading-[1.4] text-white', {\n 'text-black': item?.theme === 'dark',\n })}\n >\n {item?.primary?.label || 'more'}\n </Button>\n )}\n </div>\n </Link>\n </div>\n )}\n </>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEF\u5BFC\u822A\n * @param menuHeight \u83DC\u5355\u9AD8\u5EA6\n * @param data \u5BFC\u822A\u6570\u636E\n */\nconst MobileNavigation = forwardRef<HTMLDivElement, MobileNavigationProps>(\n ({ data, className, onPrimaryNavClick }, ref) => {\n const groupCategories = useMemo(() => {\n return WithGroupCategory(data?.categories?.filter((item: any) => item?.mobileShow))\n }, [data])\n\n const { currentMenu, setCurrentMenu, subSubCategory } = useNavContext()\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false)\n const [menuInnerHeight, setMenuInnerHeight] = useState(0)\n const [categoriesItem, setCategoriesItem] = useState<any>(null)\n\n const mobileMenuRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (mobileMenuRef?.current && mobileMenuOpen) {\n const rect = mobileMenuRef?.current?.getBoundingClientRect()\n setMenuInnerHeight(window?.innerHeight - (rect?.bottom || 0))\n }\n }, [mobileMenuOpen])\n\n useGSAP(() => {\n gsap.fromTo(\n mobileMenuRef.current,\n {\n height: 0,\n },\n {\n height: menuInnerHeight,\n duration: 0.3,\n }\n )\n }, [menuInnerHeight])\n\n useEffect(() => {\n document.documentElement.style.overflow = mobileMenuOpen ? 'hidden' : 'auto'\n }, [mobileMenuOpen])\n\n const currentBlockTypeCategories = useMemo(() => {\n return categoriesItem?.components?.[0]?.blockType\n }, [categoriesItem])\n\n const MobileSupportMenuComp = WithSupports(MobileSupportMenu, {\n categoriesItem,\n })\n\n const MobileSidebarMenuComp = WithSidebar(MobileSidebarMenu, categoriesItem)\n const MobileMulticolMenuComp = WithMulticol(MobileMulticolMenu, categoriesItem)\n\n const MobileCategoriesMenuComp = useMemo(() => {\n switch (currentBlockTypeCategories) {\n case HeaderNavigationBlockType.Sidebar:\n return <MobileSidebarMenuComp />\n case HeaderNavigationBlockType.Supports:\n return <MobileSupportMenuComp />\n case HeaderNavigationBlockType.Multicol:\n return <MobileMulticolMenuComp />\n default:\n return null\n }\n }, [currentBlockTypeCategories, categoriesItem, MobileSupportMenuComp])\n\n const handleSecondaryMenuClose = useCallback(() => {\n setMobileMenuOpen(false)\n setMenuInnerHeight(0)\n setCurrentMenu && setCurrentMenu(HeaderNavigationMenu.Primary)\n }, [setMobileMenuOpen, setMenuInnerHeight, setCurrentMenu])\n\n const menuActions = useMemo(() => {\n return data?.headerBar?.actions?.filter(\n (item: any) => item?.mobileShow && item?.blockType !== HeaderNavigationActionBlockType.Profile // \u79FB\u52A8\u7AEF\u4E0D\u663E\u793Aprofile\u6309\u94AE\n )\n }, [data])\n\n const profileAction = useMemo(() => {\n return (\n data?.headerBar?.actions?.find(\n (item: any) => item?.mobileShow && item?.blockType === HeaderNavigationActionBlockType.Profile\n ) || {}\n )\n }, [data])\n\n const MobileCategoriesHeaderComp = useMemo(() => {\n switch (currentMenu) {\n case HeaderNavigationMenu.Primary:\n return (\n <PrimaryHeader\n actions={menuActions}\n menuOpen={mobileMenuOpen}\n onMenuOpenClose={() => {\n setMobileMenuOpen(false)\n setMenuInnerHeight(0)\n }}\n onMenuOpenClick={() => setMobileMenuOpen(true)}\n />\n )\n case HeaderNavigationMenu.Secondary:\n return (\n <SecondaryHeader\n title={categoriesItem?.text}\n onMenuOpenClose={handleSecondaryMenuClose}\n onMenuBackClick={() => setCurrentMenu?.(HeaderNavigationMenu.Primary)}\n />\n )\n case HeaderNavigationMenu.Third:\n return (\n <SecondaryHeader\n title={subSubCategory?.label}\n onMenuOpenClose={handleSecondaryMenuClose}\n onMenuBackClick={() => setCurrentMenu?.(HeaderNavigationMenu.Secondary)}\n />\n )\n default:\n return null\n }\n }, [\n mobileMenuOpen,\n currentMenu,\n setCurrentMenu,\n categoriesItem,\n menuActions,\n subSubCategory,\n handleSecondaryMenuClose,\n ])\n\n const handlePrimaryMenuClick = useCallback(\n (groupIndex: number, index: number) => {\n const categoriesItem = Array.isArray(groupCategories)\n ? Array.isArray(groupCategories[groupIndex])\n ? // @ts-ignore\n groupCategories[groupIndex][index]\n : {}\n : {}\n setCategoriesItem(categoriesItem)\n if (categoriesItem?.components?.[0]?.blockType === HeaderNavigationBlockType.Links) {\n // link\u6A21\u5757\u7279\u6B8A\u5904\u7406\n categoriesItem?.components?.[0]?.url && window.open(categoriesItem?.components?.[0]?.url)\n } else {\n setCurrentMenu?.(HeaderNavigationMenu.Secondary)\n }\n },\n [groupCategories, setCurrentMenu]\n )\n\n return (\n <Container className={cn('relative h-[52px]', className)}>\n {/* \u79FB\u52A8\u7AEF\u5206\u7C7B\u83DC\u5355 */}\n {MobileCategoriesHeaderComp}\n {mobileMenuOpen && (\n <div\n ref={mobileMenuRef}\n className=\"absolute left-0 top-full z-[999] w-full overflow-y-auto border-t border-[#E4E5E6] bg-white text-black\"\n style={{ height: menuInnerHeight }}\n >\n {currentMenu === HeaderNavigationMenu.Primary ? (\n <MobilePrimaryMenu\n categories={groupCategories}\n onPrimaryMenuClick={handlePrimaryMenuClick}\n onPrimaryNavClick={onPrimaryNavClick}\n profileAction={profileAction}\n />\n ) : (\n MobileCategoriesMenuComp\n )}\n </div>\n )}\n </Container>\n )\n }\n)\n\n/**\n * \u79FB\u52A8\u7AEF\u4E00\u7EA7\u83DC\u5355\n * @param categories \u5206\u7C7B\n * @param onPrimaryMenuClick \u4E00\u7EA7\u83DC\u5355\u70B9\u51FB\n */\nconst MobilePrimaryMenu = ({\n categories,\n onPrimaryMenuClick,\n profileAction,\n onPrimaryNavClick,\n}: {\n categories: any\n onPrimaryMenuClick: (groupIndex: number, index: number) => void\n profileAction: any\n onPrimaryNavClick?: (category: any, position: number) => void\n}) => {\n const { onSidebarNavClick } = useNavContext()\n return (\n <div className=\"flex h-full flex-col justify-between\">\n <div className=\"tablet:px-8 laptop:px-16 p-4\">\n {categories?.map((groupItem: any, groupIndex: number) => (\n <div key={`groupCategory-${groupIndex}`} className=\"\">\n {groupItem?.map((item: any, index: number) => (\n <MenuItem\n key={item.id}\n label={item.text}\n onClick={() => {\n const flatCategories = categories?.flat() || []\n const position = flatCategories?.findIndex(\n (item: any) => item?.id === categories[groupIndex][index]?.id\n )\n onPrimaryMenuClick(groupIndex, index)\n onPrimaryNavClick?.(item, position)\n }}\n icon={item.components?.[0]?.icon}\n />\n ))}\n <div\n className={cn('my-2 h-px w-full bg-[#E5E5E7]', { ['hidden']: groupIndex === categories.length - 1 })}\n />\n </div>\n ))}\n </div>\n <ProfileComp profileAction={profileAction} />\n </div>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEF\u4FA7\u8FB9\u680F\u4E0B\u62C9\n * @param sidebarCategoriesMetadata \u4FA7\u8FB9\u680F\u5206\u7C7B\u5143\u6570\u636E\n * @param seriesMetadata \u4FA7\u8FB9\u680F\u7CFB\u5217\u5143\u6570\u636E\n */\nconst MobileSidebarMenu = ({\n sidebarCategoriesMetadata,\n seriesMetadata,\n}: {\n sidebarCategoriesMetadata: any\n seriesMetadata: any\n}) => {\n const {\n currentMenu,\n setCurrentMenu,\n subSubCategory,\n setSubSubCategory,\n setCurrentSeriesMetadata,\n currentSeriesMetadata,\n buildProps,\n onSidebarNavClick,\n } = useNavContext()\n const [expandedSubcategory, setExpandedSubcategory] = useState<{ index: number; open: boolean }[]>([])\n const [expandedSeriesCategories, setExpandedSeriesCategories] = useState<{ index: number; open: boolean }[]>([])\n\n useEffect(() => {\n if (sidebarCategoriesMetadata?.subcategories?.length) {\n setExpandedSubcategory(\n sidebarCategoriesMetadata?.subcategories?.map((_: any, index: number) => ({\n index,\n open: false,\n }))\n )\n }\n }, [sidebarCategoriesMetadata])\n\n useEffect(() => {\n if (subSubCategory?.subSubCategories?.length) {\n setExpandedSeriesCategories(\n subSubCategory?.subSubCategories?.map((_: any, index: number) => ({\n index,\n open: index === 0,\n }))\n )\n }\n }, [subSubCategory])\n\n const handleSubSubCategoryClick = useCallback(\n (item: any, subIndex?: number) => {\n setCurrentMenu && setCurrentMenu(HeaderNavigationMenu.Third)\n setSubSubCategory?.(item)\n const curSeriesMetadata =\n seriesMetadata?.find((seriesItem: any) =>\n subIndex !== undefined\n ? item?.subSubCategories?.[subIndex]?.label?.toLowerCase() === seriesItem.label?.toLowerCase()\n : item?.label?.toLowerCase() === seriesItem.label?.toLowerCase()\n ) || {}\n // \u901A\u8FC7categoriesMetadata\u7684subSubCategories\u7684label\u4E0Eseries\u7684label\u5339\u914D\n if (item?.collections) {\n const category = buildProps?.categories?.[item?.collections] || {}\n setCurrentSeriesMetadata?.({\n label: curSeriesMetadata?.label,\n isCollection: true,\n banner: curSeriesMetadata?.banner,\n primary: curSeriesMetadata?.primary,\n series: [\n {\n products: category?.products,\n },\n ],\n })\n } else {\n setCurrentSeriesMetadata?.(curSeriesMetadata)\n }\n },\n [seriesMetadata, sidebarCategoriesMetadata, setCurrentMenu, setSubSubCategory, setCurrentSeriesMetadata]\n )\n\n const defaultGuide = useMemo(() => {\n return seriesMetadata?.find((item: any) => !!item?.guide)?.guide\n }, [seriesMetadata, sidebarCategoriesMetadata])\n\n const MobileSidebarMenuComp = useMemo(() => {\n switch (currentMenu) {\n case HeaderNavigationMenu.Secondary:\n return (\n // \u4E8C\u7EA7\u83DC\u5355\n <div className=\"tablet:px-8 laptop:px-16 tablet:justify-start tablet:gap-16 flex h-full flex-col justify-between p-4\">\n <div>\n {sidebarCategoriesMetadata?.subcategories?.map((item: any, index: number) => {\n return (\n <div key={`${item.label}-${index}`}>\n <MenuItem\n label={item?.label}\n active={expandedSubcategory.find(item => item.index === index)?.open}\n onClick={() => {\n handleSubSubCategoryClick(item)\n onSidebarNavClick?.(item, index)\n }}\n />\n {/* {expandedSubcategory.find(item => item.index === index)?.open &&\n item.subSubCategories?.map((subItem: any, subIndex: number) => (\n <div\n key={`${index}-${subIndex}`}\n className=\"px-2 py-4\"\n onClick={() => handleSubSubCategoryClick(item, subIndex)}\n >\n <Text html={subItem.label} className=\"text-sm font-bold leading-[1.4]\" />\n </div>\n ))} */}\n </div>\n )\n })}\n </div>\n <div className=\"tablet:items-start flex flex-col items-center gap-4\">\n {sidebarCategoriesMetadata?.primary && (\n <Button\n as=\"a\"\n href={`${sidebarCategoriesMetadata?.primary?.url}?ref=${sidebarCategoriesMetadata?.primary?.label}_shopall`}\n variant=\"primary\"\n size=\"lg\"\n className=\"tablet:w-auto w-full text-base\"\n >\n {sidebarCategoriesMetadata?.primary?.label}\n </Button>\n )}\n {sidebarCategoriesMetadata?.secondary && (\n <Button\n as=\"a\"\n href={sidebarCategoriesMetadata?.secondary?.url}\n variant=\"link\"\n size=\"lg\"\n className=\"tablet:w-auto tablet:px-0 w-full py-0 text-base\"\n >\n {sidebarCategoriesMetadata?.secondary?.label}\n </Button>\n )}\n </div>\n </div>\n )\n case HeaderNavigationMenu.Third:\n return (\n // \u4E09\u7EA7\u83DC\u5355\n <div className=\"tablet:px-8 laptop:px-16 p-4\">\n {subSubCategory?.subSubCategories ? (\n subSubCategory?.subSubCategories?.map((subSubCategoryItem: any, index: number) => {\n const curSeriesMetadata =\n seriesMetadata?.find(\n (item: any) => item.label.toLowerCase() === subSubCategoryItem?.label?.toLowerCase()\n ) || {}\n let matchSeriesMetadata = {} as any\n if (subSubCategoryItem?.collections) {\n const category = buildProps?.categories?.[subSubCategoryItem?.collections] || {}\n matchSeriesMetadata = {\n label: curSeriesMetadata?.label,\n isCollection: true,\n banner: curSeriesMetadata?.banner,\n primary: curSeriesMetadata?.primary,\n series: [\n {\n products: category?.products,\n },\n ],\n }\n } else {\n matchSeriesMetadata = curSeriesMetadata\n }\n return (\n <div key={`${subSubCategoryItem.label}-${index}`}>\n {Reflect.ownKeys(subSubCategoryItem).length > 0 && (\n <SubSubCategoryItemComp\n matchSeriesMetadata={matchSeriesMetadata}\n onSubSubCategoryItemClick={() => {\n onSidebarNavClick?.(subSubCategoryItem, index)\n setExpandedSeriesCategories(prev =>\n prev.map((item, i) => ({ ...item, open: i === index ? !item.open : item.open }))\n )\n }}\n expanded={!!expandedSeriesCategories?.find(item => item.index === index)?.open}\n />\n )}\n {expandedSeriesCategories?.find(item => item.index === index)?.open && (\n <>\n <SubSubCategoryContentComp matchSeriesMetadata={matchSeriesMetadata} />\n {matchSeriesMetadata?.primary && (\n <div className=\"my-4 text-center\">\n <Button\n as=\"a\"\n href={matchSeriesMetadata?.primary?.url}\n className=\"text-base leading-[1.2] no-underline\"\n variant=\"secondary\"\n size=\"base\"\n >\n {matchSeriesMetadata?.primary?.label}\n </Button>\n </div>\n )}\n </>\n )}\n </div>\n )\n })\n ) : (\n <>\n {Reflect.ownKeys(currentSeriesMetadata).length > 0 && (\n <SubSubCategoryItemComp matchSeriesMetadata={currentSeriesMetadata} />\n )}\n <SubSubCategoryContentComp matchSeriesMetadata={currentSeriesMetadata} />\n {currentSeriesMetadata?.primary && (\n <div className=\"my-4 text-center \">\n <Button\n as=\"a\"\n href={`${currentSeriesMetadata?.primary?.url}?ref=${currentSeriesMetadata?.label}_viewmore`}\n variant=\"secondary\"\n size=\"base\"\n className=\"text-base leading-[1.2] no-underline\"\n >\n {currentSeriesMetadata?.primary?.label}\n </Button>\n </div>\n )}\n </>\n )}\n {defaultGuide && (\n <Link href={defaultGuide?.url}>\n <div className=\"mt-4\">\n <Text html={defaultGuide?.label} className=\"text-sm font-bold leading-[1.2] text-[#6D6D6F]\" />\n </div>\n </Link>\n )}\n </div>\n )\n default:\n return null\n }\n }, [\n currentMenu,\n sidebarCategoriesMetadata,\n setCurrentMenu,\n seriesMetadata,\n expandedSubcategory,\n expandedSeriesCategories,\n setSubSubCategory,\n subSubCategory,\n setCurrentSeriesMetadata,\n currentSeriesMetadata,\n ])\n\n return MobileSidebarMenuComp\n}\n\nconst SubSubCategoryItemComp = ({\n matchSeriesMetadata,\n onSubSubCategoryItemClick,\n expanded,\n}: {\n matchSeriesMetadata: any\n onSubSubCategoryItemClick?: () => void\n expanded?: boolean\n}) => {\n return (\n <div className=\"tablet:pt-0 flex items-center justify-between py-4\" onClick={onSubSubCategoryItemClick}>\n {matchSeriesMetadata?.label && (\n <Text html={matchSeriesMetadata?.label} className=\"text-sm font-bold leading-[1.4]\" />\n )}\n {onSubSubCategoryItemClick && (\n <DownArrow\n className={cn('size-5', {\n ['rotate-180']: expanded,\n })}\n />\n )}\n </div>\n )\n}\n\nconst SubSubCategoryContentComp = ({ matchSeriesMetadata }: { matchSeriesMetadata: any }) => {\n return (\n <div className=\"laptop:gap-3 flex flex-col gap-2\">\n {!!matchSeriesMetadata?.series?.length &&\n matchSeriesMetadata?.series?.map((seriesItem: any, pIndex: number) => (\n <div key={`seriesItem-${pIndex}`}>\n {seriesItem.label && (\n <Text html={seriesItem.label} className=\"mb-2 text-sm font-bold leading-[1.4] text-[#3D3D3F]\" />\n )}\n <div className=\"laptop:grid-cols-3 laptop:gap-4 tablet:grid tablet:grid-cols-2 tablet:gap-3 flex flex-col gap-2\">\n {!!matchSeriesMetadata?.banner && (\n <Link asChild={!matchSeriesMetadata?.banner?.href} href={matchSeriesMetadata?.banner?.href}>\n <div className=\"[&_img]:hover:duration-600 relative [&_img]:hover:scale-110 [&_img]:hover:transition-all\">\n <Picture\n source={matchSeriesMetadata?.banner?.imageUrl}\n className=\"laptop:h-[120px] h-[114px]\"\n imgClassName=\"object-cover h-full\"\n />\n <div className=\"absolute inset-x-0 bottom-0 p-4\">\n <Heading\n size={2}\n html={matchSeriesMetadata?.banner?.title || 'Buy in Guide'}\n className={cn('font-bold text-white', {\n 'text-black': matchSeriesMetadata?.banner?.theme === 'dark',\n })}\n />\n <Text\n html={matchSeriesMetadata?.banner?.desc || '20.000mAh'}\n className={cn('text-sm font-bold text-white', {\n 'text-black': matchSeriesMetadata?.banner?.theme === 'dark',\n })}\n />\n </div>\n </div>\n </Link>\n )}\n {seriesItem.products?.map((product: any, index: number) => (\n <SeriesProductItem\n position={index}\n key={`seriesProductItem-${pIndex}-${index}`}\n product={product}\n seriesLabel={matchSeriesMetadata?.label}\n isCollection={matchSeriesMetadata?.isCollection}\n />\n ))}\n </div>\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEFsupport\u83DC\u5355\n * @param supportsMetadata support\u83DC\u5355\u5143\u6570\u636E\n */\nconst MobileSupportMenu = ({ supportsMetadata }: { supportsMetadata: any }) => {\n return (\n <div className=\"tablet:px-8 laptop:px-16 p-4\">\n {supportsMetadata?.map((supportItem: any) => (\n <MenuItem key={supportItem.id} href={supportItem.url} label={supportItem.label} onClick={() => {}} />\n ))}\n </div>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEFmulticol\u83DC\u5355\n * @param multicolMetadata multicol\u83DC\u5355\u5143\u6570\u636E\n */\nconst MobileMulticolMenu = ({ multicolMetadata }: { multicolMetadata: any }) => {\n // \u662F\u5426\u5168\u90E8\u662F\u56FE\u7247\n const allPicture = useMemo(() => {\n return !multicolMetadata?.some((item: any) => !!item.columns)\n }, [multicolMetadata])\n\n return (\n <div\n className={cn('tablet:py-4 tablet:px-8 laptop:px-16 tablet:gap-6 flex flex-col gap-4 p-4', {\n ['tablet:grid tablet:grid-cols-2 tablet:gap-3 laptop:gap-4']: allPicture,\n })}\n >\n {multicolMetadata?.map((item: any, index: number) => (\n <div key={`multicolItem-${item?.label}-${index}`}>\n <MulticolItem item={item} allPicture={allPicture} />\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEFprofile\u7EC4\u4EF6\n * @param profileAction profile\u83DC\u5355\u5143\u6570\u636E\n */\nconst ProfileComp = ({ profileAction }: { profileAction: any }) => {\n const [profileOpen, setProfileOpen] = useState(false)\n const { profile, event } = useNavContext()\n return (\n <div\n className={cn('tablet:px-8 laptop:px-16 bg-[#F5F5F7] px-4 py-6', {\n 'p-4': profileOpen,\n })}\n >\n <div className=\"flex items-center justify-between\" onClick={() => setProfileOpen(!profileOpen)}>\n <div className=\"flex items-center gap-[14px]\">\n <div className=\"flex size-[40px] shrink-0 items-center justify-center rounded-full bg-white\">\n <User />\n </div>\n <Text html={profile?.nick_name || profileAction?.welcome} className=\"text-base font-bold leading-[1.4]\" />\n </div>\n {!profile?.email && <DownArrow className={cn('laptop:size-4 size-5', { 'rotate-180': profileOpen })} />}\n </div>\n {profile?.email && (\n <div className=\"mt-4\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem key={item.id} label={item?.title} href={item?.url} />\n ))}\n </div>\n )}\n {profileOpen && !profile?.email && (\n <div className=\"mt-4\">\n <Text html={profileAction?.benefits_title} className=\"text-sm font-bold leading-[1.4]\" />\n <div className=\"mt-2 flex flex-col gap-1\">\n {profileAction?.benefits?.map((item: any) => (\n <div key={item.id} className=\"flex items-center gap-[6px]\">\n <Picture source={item.benefitIcon?.url} className=\"size-4\" alt={item.benefit} width={16} height={16} />\n <Text html={item.benefit} className=\"text-sm font-bold leading-[1.4]\" />\n </div>\n ))}\n </div>\n </div>\n )}\n {!profile?.email && (\n <div className=\"mt-4 flex items-center gap-3\">\n <Button className=\"tablet:flex-none flex-1\" variant=\"secondary\" size=\"base\" onClick={() => event?.join?.()}>\n <Text html={profileAction?.primaryButton || 'Join Now'} className=\"text-sm font-bold leading-[1.4]\" />\n </Button>\n <Button className=\"tablet:flex-none flex-1\" variant=\"primary\" size=\"base\" onClick={() => event?.login?.()}>\n <Text html={profileAction?.secondaryButton || 'Log In'} className=\"text-sm font-bold leading-[1.4]\" />\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nconst PrimaryHeader = ({ menuOpen, onMenuOpenClose, onMenuOpenClick, actions }: MobilePrimaryNavigationData) => {\n return (\n <div className=\"flex h-full items-center justify-between gap-4\">\n <Logo />\n <div className=\"desktop:gap-6 flex items-center gap-4\">\n <Actions actions={actions} />\n {menuOpen ? (\n <Close className=\"size-5\" onClick={() => onMenuOpenClose()} />\n ) : (\n <Menu className=\"size-5\" onClick={() => onMenuOpenClick()} />\n )}\n </div>\n </div>\n )\n}\n\nconst Logo = () => {\n const { payloadData, isMobile } = useNavContext()\n return (\n <div\n className=\"hover:text-brand-0 cursor-pointer [&>svg]:w-full\"\n onClick={() => {\n window.location.href = '/'\n }}\n dangerouslySetInnerHTML={{\n __html: isMobile ? payloadData?.headerBar?.mobileLogo : payloadData?.headerBar?.desktopLogo,\n }}\n />\n )\n}\n\nconst Actions = forwardRef<HTMLDivElement, { actions: any; activeStatus?: boolean }>(\n ({ actions, activeStatus = false }, ref) => {\n const { event, cartCount } = useNavContext()\n const [activeAction, setActiveAction] = useState<any>(null)\n\n const handleActionClick = useCallback(\n (action: any, index: number) => {\n setActiveAction(index)\n switch (action?.blockType) {\n case HeaderNavigationActionBlockType.Search:\n event?.search?.()\n break\n case HeaderNavigationActionBlockType.Cart:\n event?.cart?.()\n break\n case HeaderNavigationActionBlockType.Profile:\n event?.profile?.()\n break\n case HeaderNavigationActionBlockType.Livestream:\n event?.livestream?.()\n break\n default:\n return () => {}\n }\n },\n [event]\n )\n\n return (\n <div className=\"desktop:gap-6 flex items-center gap-4\">\n {Array.isArray(actions) &&\n actions?.map((action: any, index: number) => (\n <div\n className=\"relative\"\n key={action.id}\n ref={action.blockType === HeaderNavigationActionBlockType.Profile ? ref : null}\n onClick={() => handleActionClick(action, index)}\n >\n <Text\n html={action.icon}\n className={cn('size-5 cursor-pointer', { 'text-brand-0': activeStatus && activeAction === index })}\n />\n {action.blockType === HeaderNavigationActionBlockType.Cart && cartCount > 0 && (\n <div className=\"bg-brand-0 absolute right-[-12px] top-[calc(100%-16px)] z-[1] flex min-h-5 min-w-5 items-center justify-center rounded-full px-[2px]\">\n <Text html={cartCount?.toString()} className=\"text-sm font-bold leading-[1.2] text-white\" />\n </div>\n )}\n </div>\n ))}\n </div>\n )\n }\n)\n\nconst SecondaryHeader = ({ title, onMenuOpenClose, onMenuBackClick }: MobileSecondaryNavigationData) => {\n return (\n <div className=\"flex h-full items-center gap-3\">\n <LeftArrow className=\"size-5\" onClick={() => onMenuBackClick()} />\n <Text html={title} className=\"flex-1 text-center text-base font-bold leading-[1.4]\" />\n <Close className=\"size-5\" onClick={() => onMenuOpenClose()} />\n </div>\n )\n}\n\nconst MenuItem = ({\n label,\n href,\n onClick,\n active,\n icon,\n className,\n}: {\n label: string\n href?: string\n onClick?: () => void\n active?: boolean\n icon?: string\n className?: string\n}) => {\n return (\n <div className={cn('flex cursor-pointer items-center justify-between py-4', className)} onClick={onClick}>\n <Link href={href} asChild={!href} className=\"flex w-full items-center justify-between no-underline\">\n <div className=\"flex items-center gap-4\">\n <Text html={label} className={cn('text-sm font-bold leading-[1.4]', { underline: icon })} />\n {icon && <Text html={icon} />}\n </div>\n <RightArrow className={cn('laptop:size-4 size-5', { 'rotate-90': active })} />\n </Link>\n </div>\n )\n}\n\nMobileNavigation.displayName = 'MobileNavigation'\nActions.displayName = 'Actions'\nHeaderNavigation.displayName = 'HeaderNavigation'\nDesktopNavigation.displayName = 'DesktopNavigation'\nSidebarDropdown.displayName = 'SidebarDropdown'\n\nexport default withLayout(HeaderNavigation)\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Fragment", "jsx", "jsxs", "React", "forwardRef", "useCallback", "useEffect", "useImperativeHandle", "useMemo", "useRef", "useState", "Picture", "Text", "Button", "Container", "Link", "Heading", "withLayout", "cn", "atobID", "NavProvider", "useNavContext", "HeaderNavigationMenu", "HeaderNavigationBlockType", "HeaderNavigationActionBlockType", "debounce", "jump", "useGSAP", "gsap", "WithSidebar", "WithSupports", "WithMulticol", "WithGroupCategory", "Menu", "Close", "User", "RightArrow", "LeftArrow", "DownArrow", "Polygon", "NavigationSearch", "HeaderNavigation", "props", "ref", "headerNavigation", "buildProps", "event", "profile", "theme", "isTop", "searchResult", "onSearch", "isSearching", "keywords", "onPrimaryNavClick", "onSeriesProductClick", "onSidebarNavClick", "headerId", "cartCount", "searchRef", "searchOpen", "setSearchOpen", "headerHidden", "setHeaderHidden", "changeHeaderBackground", "setChangeHeaderBackground", "isMobile", "setIsMobile", "headerRef", "resizeWindow", "offsetWidth", "searchPage", "item", "DesktopNavigation", "MobileNavigation", "value", "data", "onNavItemClick", "className", "downdownHover", "setDowndownHover", "groupCategories", "categoriesItem", "setCategoriesItem", "navStatusArray", "setNavStatusArray", "profileRef", "userProfileOpen", "setUserProfileOpen", "dropdownRef", "navItemRefs", "categories", "groupItem", "groupIndex", "_", "index", "currentNavItem", "handleNavItemClick", "e", "position", "prev", "handleNavMenuClose", "currentBlockTypeCategories", "SidebarDropdownComp", "SidebarDropdown", "MulticolDropdownComp", "MulticolDropdown", "SupportsDropdownComp", "SupportsDropdown", "DropdownComp", "actions", "profileAction", "handleProfileClick", "profileRefElement", "Logo", "Actions", "el", "MenuItem", "sidebarCategoriesMetadata", "seriesMetadata", "expandedSubcategory", "setExpandedSubcategory", "activeSubSubcategoryIndex", "setActiveSubSubcategoryIndex", "sidebarDropdownRef", "initExpandedSubcategory", "subcategories", "withSubSubCategoriesIndex", "withoutSubSubCategoriesIndex", "expandedStates", "matchSeriesMetadata", "subCategory", "currentSeriesMetadata", "category", "activeSubSubcategory", "currentActiveSeriesMetadata", "handleSubcategoryOpen", "subcategoryItem", "handleSubSubcategoryOpen", "subSubindex", "subItem", "hasSubSubCategory", "subSubItem", "seriesItem", "seriesIndex", "product", "SeriesProductItem", "multicolMetadata", "multicolDropdownRef", "MulticolItem", "supportsMetadata", "currentNavItemRef", "supportsDropdownRef", "navItemReact", "setNavItemReact", "supportsDropdownHeight", "setSupportsDropdownHeight", "rect", "debouncedHandleResize", "supportItem", "isCollection", "seriesLabel", "productData", "variant", "listingLink", "tags", "tag", "allPicture", "columnItem", "currentMenu", "setCurrentMenu", "subSubCategory", "mobileMenuOpen", "setMobileMenuOpen", "menuInnerHeight", "setMenuInnerHeight", "mobileMenuRef", "MobileSupportMenuComp", "MobileSupportMenu", "MobileSidebarMenuComp", "MobileSidebarMenu", "MobileMulticolMenuComp", "MobileMulticolMenu", "MobileCategoriesMenuComp", "handleSecondaryMenuClose", "menuActions", "MobileCategoriesHeaderComp", "PrimaryHeader", "SecondaryHeader", "handlePrimaryMenuClick", "MobilePrimaryMenu", "onPrimaryMenuClick", "ProfileComp", "setSubSubCategory", "setCurrentSeriesMetadata", "expandedSeriesCategories", "setExpandedSeriesCategories", "handleSubSubCategoryClick", "subIndex", "curSeriesMetadata", "defaultGuide", "subSubCategoryItem", "SubSubCategoryItemComp", "i", "SubSubCategoryContentComp", "onSubSubCategoryItemClick", "expanded", "pIndex", "profileOpen", "setProfileOpen", "menuOpen", "onMenuOpenClose", "onMenuOpenClick", "payloadData", "activeStatus", "activeAction", "setActiveAction", "handleActionClick", "action", "title", "onMenuBackClick", "label", "href", "onClick", "active", "icon", "HeaderNavigation_default"]
|
|
4
|
+
"sourcesContent": ["'use client'\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport { Picture, Text, Button, Container, Link, Heading, BrandStrip } from '../../components/index.js'\n\nimport { withLayout } from '../../shared/Styles.js'\n\nimport { cn, atobID } from '../../helpers/utils.js'\n\nimport type {\n MobilePrimaryNavigationData,\n MobileSecondaryNavigationData,\n MobileNavigationProps,\n DesktopNavigationProps,\n HeaderNavigationProps,\n} from './types.js'\nimport NavProvider, { useNavContext } from './NavProvider.js'\n\nimport { HeaderNavigationMenu, HeaderNavigationBlockType, HeaderNavigationActionBlockType } from './types.js'\n\nimport { debounce } from 'es-toolkit'\nimport jump from 'jump.js'\n\nimport { useGSAP } from '@gsap/react'\nimport { gsap } from 'gsap'\nimport type { Product, ProductVariant } from '../../cpn-components/CpnProductCard/types.js'\n\nimport { WithSidebar, WithSupports, WithMulticol, WithGroupCategory } from './withCategory.js'\n\nimport { Menu, Close, User, RightArrow, LeftArrow, DownArrow, Polygon } from './icons/index.js'\n\nimport NavigationSearch from '../NavigationSearch/index.js'\n\nconst HeaderNavigation = forwardRef<HTMLDivElement, HeaderNavigationProps>((props, ref) => {\n const {\n data: { headerNavigation } = {},\n buildProps,\n event,\n profile,\n theme = 'light',\n isTop = false,\n searchResult,\n onSearch,\n isSearching,\n keywords,\n onPrimaryNavClick,\n onSeriesProductClick,\n onSidebarNavClick,\n headerId,\n cartCount,\n menuData,\n } = props\n\n const searchRef = useRef<HTMLDivElement>(null)\n const [searchOpen, setSearchOpen] = useState(false)\n const [headerHidden, setHeaderHidden] = useState(false)\n const [changeHeaderBackground, setChangeHeaderBackground] = useState(false)\n const [isMobile, setIsMobile] = useState(false)\n\n const headerRef = useRef<HTMLDivElement>(null)\n\n const resizeWindow = () => {\n const offsetWidth = document?.querySelector('body')?.offsetWidth || 0\n setIsMobile(offsetWidth <= 1440)\n }\n\n useEffect(() => {\n resizeWindow()\n window.addEventListener('resize', resizeWindow)\n return () => {\n window.removeEventListener('resize', resizeWindow)\n }\n }, [])\n\n useImperativeHandle(ref, () => headerRef.current as HTMLDivElement)\n\n useEffect(() => {\n if (headerRef.current && isTop) {\n jump(headerRef.current, { duration: 0, offset: headerRef.current?.getBoundingClientRect()?.bottom || 0 })\n }\n }, [isTop])\n\n // useEffect(() => {\n // let upwardDistance = 0\n // let lastScrollY = 0\n // const showDownNav = throttle(latest => {\n // const delta = lastScrollY - latest\n // if (delta > 0) {\n // upwardDistance += delta\n // if (upwardDistance >= 300) {\n // setHeaderHidden(false)\n // upwardDistance = 0\n // }\n // } else {\n // setHeaderHidden(latest > 300)\n // }\n // setChangeHeaderBackground(latest > 30)\n // lastScrollY = latest\n // }, 200)\n\n // const scrollAnimate = () => {\n // let scrollTop = 0\n // if (document?.documentElement && document?.documentElement?.scrollTop) {\n // scrollTop = document?.documentElement.scrollTop\n // } else if (document?.body) {\n // scrollTop = document?.body.scrollTop\n // }\n // showDownNav(scrollTop)\n // }\n\n // window.addEventListener('scroll', scrollAnimate)\n\n // return () => window.removeEventListener('scroll', scrollAnimate)\n // }, [])\n\n useEffect(() => {\n if (event) {\n event.search = () => setSearchOpen(true)\n }\n }, [event])\n\n useGSAP(() => {\n if (searchRef?.current && searchOpen) {\n gsap.fromTo(\n searchRef.current,\n {\n height: 0,\n },\n {\n height: 'auto',\n duration: 0.3,\n }\n )\n }\n }, [searchOpen])\n\n useEffect(() => {\n document.documentElement.style.overflow = searchOpen ? 'hidden' : 'auto'\n }, [searchOpen])\n\n const searchPage = useMemo(() => {\n return (\n headerNavigation?.headerBar?.actions?.find(\n (item: any) => item?.blockType === HeaderNavigationActionBlockType.Search\n )?.searchBar?.[0] || {}\n )\n }, [headerNavigation])\n\n return (\n <NavProvider\n buildProps={buildProps}\n profile={profile}\n isMobile={isMobile}\n event={event}\n payloadData={headerNavigation}\n onSidebarNavClick={onSidebarNavClick}\n onSeriesProductClick={onSeriesProductClick}\n cartCount={cartCount}\n >\n <header\n id={headerId || 'header'}\n data-ui-component-id=\"HeaderNavigation\"\n // className={cn('sticky top-0 z-[100] transition-transform duration-500 ease-in-out', {\n // ['translate-y-[-100%]']: headerHidden,\n // })}\n className=\"relative z-[100] bg-white\"\n ref={headerRef}\n >\n <div\n className={cn(\n 'hover:bg-white hover:text-black',\n theme === 'light' ? 'text-black' : 'text-white',\n // {\n // ['!bg-white transition-all duration-500 ease-in-out']: changeHeaderBackground,\n // },\n {\n // ['hover:!text-black']: theme === 'dark',\n // ['!text-black']: changeHeaderBackground,\n }\n )}\n onClick={() => setChangeHeaderBackground(true)}\n >\n <DesktopNavigation\n data={headerNavigation}\n className=\"desktop:block hidden !bg-white\"\n theme={theme}\n onNavItemClick={() => setChangeHeaderBackground(true)}\n onPrimaryNavClick={onPrimaryNavClick}\n />\n <MobileNavigation\n data={headerNavigation}\n menuData={menuData}\n className=\"desktop:hidden block !bg-white\"\n onPrimaryNavClick={onPrimaryNavClick}\n />\n {searchOpen && (\n <div\n className=\"absolute left-0 top-0 z-[60] flex w-full flex-col bg-black/70\"\n style={{ height: `calc(100dvh - ${headerRef?.current?.getBoundingClientRect()?.top}px)` }}\n >\n <div ref={searchRef} className={cn('overflow-y-auto', {})}>\n <NavigationSearch\n data={searchPage}\n keywords={keywords}\n isSearching={isSearching}\n searchResult={searchResult}\n onSearch={(value: string) => {\n onSearch?.(value)\n }}\n onClose={() => {\n onSearch?.()\n setSearchOpen(false)\n }}\n />\n </div>\n <div className=\"flex-1 bg-transparent\" onClick={() => setSearchOpen(false)} />\n </div>\n )}\n </div>\n </header>\n </NavProvider>\n )\n})\n\nconst DesktopNavigation = forwardRef<HTMLDivElement, DesktopNavigationProps>((props, ref) => {\n const { data, onNavItemClick, className, theme, onPrimaryNavClick } = props\n const { event, profile } = useNavContext()\n const [downdownHover, setDowndownHover] = useState(false)\n\n const groupCategories = useMemo(() => {\n return WithGroupCategory(data?.categories?.filter((item: any) => item?.pcShow)) as any[][]\n }, [data])\n\n const [categoriesItem, setCategoriesItem] = useState<any>(null)\n const [navStatusArray, setNavStatusArray] = useState<{ index: number; groupIndex: number; open: boolean }[][]>([])\n const profileRef = useRef<HTMLDivElement>(null)\n const [userProfileOpen, setUserProfileOpen] = useState(false)\n const headerRef = useRef<HTMLDivElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const navItemRefs = useRef<HTMLDivElement[][]>(\n groupCategories.map((categories: any) => Array(categories?.length || 0).fill(null))\n )\n\n useEffect(() => {\n if (groupCategories?.length) {\n setNavStatusArray(\n groupCategories?.map((groupItem: any, groupIndex: number) => {\n return groupItem?.map((_: any, index: number) => ({ groupIndex, index, open: false }))\n })\n )\n }\n }, [groupCategories])\n\n const currentNavItem = useMemo(() => {\n let currentNavItem: { index: number; groupIndex: number; open: boolean } | null = null\n for (const groupItem of navStatusArray) {\n for (const item of groupItem) {\n if (item.open) {\n currentNavItem = item\n break\n }\n }\n if (currentNavItem) break\n }\n return currentNavItem\n }, [navStatusArray])\n\n useEffect(() => {\n document.documentElement.style.overflow = currentNavItem?.open || userProfileOpen ? 'hidden' : 'auto'\n }, [currentNavItem?.open, userProfileOpen])\n\n const handleNavItemClick = (e: any, groupIndex: number, index: number) => {\n setUserProfileOpen(false)\n if (categoriesItem?.components?.[0]?.blockType === HeaderNavigationBlockType.Links) {\n // link\u6A21\u5757\u7279\u6B8A\u5904\u7406\n categoriesItem?.components?.[0]?.url && window.open(categoriesItem?.components?.[0]?.url)\n } else {\n const categories = groupCategories?.flat() || []\n const position = categories?.findIndex(item => item?.id === groupCategories[groupIndex][index]?.id)\n e.stopPropagation()\n onNavItemClick?.()\n onPrimaryNavClick?.(categories[position], position)\n setCategoriesItem(groupCategories[groupIndex][index])\n setNavStatusArray(prev =>\n prev.map(groupItem =>\n groupItem.map(item =>\n item.groupIndex === groupIndex && item.index === index\n ? { ...item, open: !item.open }\n : { ...item, open: false }\n )\n )\n )\n }\n }\n\n const handleNavMenuClose = () => {\n setNavStatusArray(prev => prev.map(groupItem => groupItem.map(item => ({ ...item, open: false }))))\n }\n\n const currentBlockTypeCategories = useMemo(() => {\n if (categoriesItem) return categoriesItem?.components?.[0]?.blockType\n }, [categoriesItem])\n\n const SidebarDropdownComp = WithSidebar(SidebarDropdown, categoriesItem)\n const MulticolDropdownComp = WithMulticol(MulticolDropdown, categoriesItem)\n const SupportsDropdownComp = WithSupports(SupportsDropdown, {\n categoriesItem,\n currentNavItemRef: navItemRefs.current?.[currentNavItem?.groupIndex || 0]?.[currentNavItem?.index || 0],\n })\n\n const DropdownComp = useMemo(() => {\n switch (currentBlockTypeCategories) {\n case HeaderNavigationBlockType.Sidebar:\n return <SidebarDropdownComp />\n case HeaderNavigationBlockType.Supports:\n return <SupportsDropdownComp />\n case HeaderNavigationBlockType.Multicol:\n return <MulticolDropdownComp />\n default:\n return null\n }\n }, [currentBlockTypeCategories, categoriesItem])\n\n const actions = useMemo(() => {\n return data?.headerBar?.actions?.filter((item: any) => item?.pcShow)\n }, [data])\n\n const profileAction = useMemo(() => {\n return actions?.find((item: any) => item?.blockType === HeaderNavigationActionBlockType.Profile)\n }, [actions])\n\n const handleProfileClick = useCallback(() => {\n setUserProfileOpen(prev => !prev)\n }, [])\n\n useEffect(() => {\n if (profileRef?.current) {\n const profileRefElement = profileRef.current as HTMLDivElement\n profileRefElement.addEventListener('click', handleProfileClick)\n\n return () => {\n profileRefElement.removeEventListener('click', handleProfileClick)\n }\n }\n }, [handleProfileClick])\n\n useGSAP(() => {\n if (currentNavItem?.open) {\n gsap.fromTo(\n dropdownRef?.current,\n {\n height: 0,\n },\n {\n height: 'auto',\n }\n )\n }\n }, [currentNavItem?.open])\n\n return (\n <Container className={cn('relative h-[96px]', className)}>\n <div ref={headerRef} onClick={handleNavMenuClose} className=\"flex h-full flex-col justify-end gap-4\">\n <div className=\"flex items-center justify-between\">\n <Logo />\n <Actions ref={profileRef} actions={actions} activeStatus={userProfileOpen} />\n </div>\n <div className=\"flex justify-between\">\n {groupCategories?.map((groupItem: any, groupIndex: number) => {\n return (\n <div key={`groupCategory-${groupIndex}`} className=\"flex gap-3\">\n {groupItem?.map((item: any, index: number) => {\n return (\n <div\n key={item.id}\n ref={(el: HTMLDivElement) => {\n navItemRefs.current[groupIndex][index] = el\n }}\n className=\"group cursor-pointer\"\n >\n <div className=\"relative\">\n <div\n className=\"flex items-center gap-1 pb-4\"\n onClick={e => handleNavItemClick(e, groupIndex, index)}\n >\n <Text html={item.text} className=\"text-sm font-bold leading-[1.4]\" />\n <DownArrow\n className={cn('size-4 opacity-0 transition-opacity duration-500 group-hover:opacity-100', {\n ['rotate-180']:\n currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index,\n ['opacity-100']:\n downdownHover &&\n currentNavItem?.groupIndex === groupIndex &&\n currentNavItem?.index === index,\n })}\n />\n </div>\n <div\n className={cn(\n 'absolute bottom-0 left-0 h-[2px] w-0 transition-all duration-500',\n {\n 'w-[calc(100%-20px)]':\n currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index,\n },\n theme === 'dark' ? 'bg-white' : 'bg-[#080A0F]'\n )}\n />\n </div>\n </div>\n )\n })}\n </div>\n )\n })}\n </div>\n </div>\n <div\n className={cn(\n 'absolute left-0 top-full z-[999] flex w-full flex-col overflow-hidden border-t border-b-[#E4E5E6] bg-black/70 text-black',\n {\n hidden: !(currentNavItem?.open && categoriesItem),\n }\n )}\n onMouseEnter={() => setDowndownHover(true)}\n onMouseLeave={() => setDowndownHover(false)}\n style={{ height: `calc(100dvh - ${headerRef?.current?.getBoundingClientRect()?.bottom}px)` }}\n >\n <div\n ref={dropdownRef}\n className={cn('relative z-50', {\n 'overflow-hidden': currentBlockTypeCategories !== HeaderNavigationBlockType.Supports,\n })}\n >\n {DropdownComp}\n </div>\n <div className=\"flex-1 bg-transparent\" onClick={handleNavMenuClose} />\n </div>\n {userProfileOpen && (\n <div\n className=\"absolute left-0 top-full z-[999] flex h-dvh w-full bg-black/70\"\n // style={{\n // height: `calc(100dvh - ${profileRef?.current?.getBoundingClientRect()?.bottom}px)`,\n // top: `calc(96px)`,\n // }}\n >\n <div\n className=\"absolute w-[272px] bg-white p-4\"\n style={{\n right: `calc(100% - ${profileRef?.current?.getBoundingClientRect()?.right}px)`,\n top: '-36px',\n }}\n >\n {profile?.email ? (\n <>\n <Text html={profile?.nick_name || profileAction?.welcome} className=\"text-sm font-bold\" />\n <div className=\"mt-2 h-px bg-[#D9D9D9]\" />\n <div className=\"mt-2\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem className=\"py-2\" key={item.id} label={item?.title} href={item?.url} />\n ))}\n </div>\n </>\n ) : (\n <>\n <Polygon className=\"absolute -top-2 right-[46px] z-30 text-white\" />\n <Text html={profileAction?.benefits_title} className=\"text-sm font-bold leading-[1.4]\" />\n <div className=\"mt-2 flex flex-col gap-1\">\n {profileAction?.benefits?.map((item: any) => (\n <div key={item.id} className=\"flex items-center gap-[6px]\">\n <Picture\n source={item.benefitIcon?.url}\n className=\"size-4\"\n alt={item.benefit}\n width={16}\n height={16}\n />\n <Text html={item.benefit} className=\"text-sm font-bold leading-[1.4]\" />\n </div>\n ))}\n </div>\n <div className=\"mt-4 flex items-center gap-2\">\n <Button variant=\"secondary\" size=\"lg\" onClick={() => event?.join?.()}>\n <Text html={profileAction?.primaryButton || 'Join Now'} className=\"font-bold\" />\n </Button>\n <Button variant=\"primary\" size=\"lg\" onClick={() => event?.login?.()}>\n <Text html={profileAction?.secondaryButton || 'Log In'} className=\"font-bold\" />\n </Button>\n </div>\n </>\n )}\n </div>\n <div className=\"flex-1 bg-transparent\" onClick={() => setUserProfileOpen(false)} />\n </div>\n )}\n </Container>\n )\n})\n\n/**\n * \u4FA7\u8FB9\u680F\u4E0B\u62C9\n * @param categoriesItem \u5206\u7C7B\u9879\n */\nconst SidebarDropdown = React.memo(\n ({ sidebarCategoriesMetadata, seriesMetadata }: { sidebarCategoriesMetadata: any; seriesMetadata: any }) => {\n const { buildProps, onSidebarNavClick } = useNavContext()\n const [expandedSubcategory, setExpandedSubcategory] = useState<{ index: number; open: boolean }[]>([])\n const [activeSubSubcategoryIndex, setActiveSubSubcategoryIndex] = useState(-1)\n const sidebarDropdownRef = useRef<HTMLDivElement>(null)\n\n const initExpandedSubcategory = useCallback(() => {\n const subcategories = sidebarCategoriesMetadata?.subcategories\n if (!subcategories?.length) return\n\n const withSubSubCategoriesIndex = subcategories.findIndex((item: any) => !!item?.subSubCategories)\n const withoutSubSubCategoriesIndex = subcategories.findIndex((item: any) => !item?.subSubCategories)\n\n // \u521B\u5EFA\u5C55\u5F00\u72B6\u6001\u6570\u7EC4\n const expandedStates = subcategories.map((_: any, index: number) => ({\n index,\n open: withSubSubCategoriesIndex === index || withoutSubSubCategoriesIndex === index,\n }))\n\n setExpandedSubcategory(expandedStates)\n }, [sidebarCategoriesMetadata])\n\n useEffect(() => {\n initExpandedSubcategory()\n }, [initExpandedSubcategory])\n\n // \u901A\u8FC7categoriesMetadata\u7684subSubCategories\u7684label\u4E0Eseries\u7684label\u5339\u914D\n const matchSeriesMetadata = useMemo(() => {\n const subCategory =\n sidebarCategoriesMetadata?.subcategories?.[expandedSubcategory?.find(item => item.open)?.index || 0]\n const currentSeriesMetadata =\n seriesMetadata?.find((item: any) => item?.label?.toLowerCase() === subCategory?.label?.toLowerCase()) || {}\n if (subCategory?.collections) {\n const category = buildProps?.categories?.[subCategory?.collections] || {}\n return {\n label: currentSeriesMetadata?.label,\n isCollection: true,\n banner: currentSeriesMetadata?.banner,\n primary: currentSeriesMetadata?.primary,\n series: [\n {\n products: category?.products,\n },\n ],\n }\n } else {\n if (subCategory?.subSubCategories) {\n const activeSubSubcategory = subCategory?.subSubCategories?.[activeSubSubcategoryIndex]\n const currentActiveSeriesMetadata =\n seriesMetadata?.find(\n (item: any) => item?.label?.toLowerCase() === activeSubSubcategory?.label?.toLowerCase()\n ) || {}\n if (activeSubSubcategory?.collections) {\n const category = buildProps?.categories?.[activeSubSubcategory?.collections] || {}\n return {\n label: currentActiveSeriesMetadata?.label,\n isCollection: true,\n banner: currentActiveSeriesMetadata?.banner,\n primary: currentActiveSeriesMetadata?.primary,\n series: [\n {\n products: category?.products,\n },\n ],\n }\n } else {\n return currentActiveSeriesMetadata\n }\n } else {\n return currentSeriesMetadata\n }\n }\n }, [sidebarCategoriesMetadata, expandedSubcategory, activeSubSubcategoryIndex, seriesMetadata])\n\n const handleSubcategoryOpen = useCallback(\n (index: number, subcategoryItem: any) => {\n subcategoryItem?.subSubCategories?.length > 0\n ? setActiveSubSubcategoryIndex(0)\n : setActiveSubSubcategoryIndex(-1)\n\n if (subcategoryItem?.subSubCategories?.length > 0) {\n setExpandedSubcategory(prev =>\n prev.map(item => (item.index === index ? { ...item, open: true } : { ...item, open: false }))\n )\n } else {\n const subcategories = sidebarCategoriesMetadata?.subcategories\n const withSubSubCategoriesIndex = subcategories?.findIndex((item: any) => !!item?.subSubCategories)\n setExpandedSubcategory(prev =>\n prev.map(item => {\n return { ...item, open: item.index === index || item.index === withSubSubCategoriesIndex }\n })\n )\n }\n },\n [sidebarCategoriesMetadata, initExpandedSubcategory]\n )\n\n const handleSubSubcategoryOpen = (index: number, subSubindex: number) => {\n setExpandedSubcategory(prev =>\n prev.map(item => (item.index === index ? { ...item, open: true } : { ...item, open: false }))\n )\n setActiveSubSubcategoryIndex(subSubindex)\n }\n\n return (\n <Container childClassName=\"lg-desktop:gap-12 flex bg-white gap-8\">\n <div\n className=\"lg-desktop:basis-[356px] flex basis-[284px] flex-col gap-4 py-4\"\n style={{\n userSelect: 'none',\n }}\n ref={sidebarDropdownRef}\n >\n <div\n className=\"desktop:h-[416px] flex flex-col overflow-y-auto\"\n style={{\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n }}\n >\n {sidebarCategoriesMetadata?.subcategories?.map((subItem: any, index: number) => {\n const hasSubSubCategory =\n Array.isArray(subItem?.subSubCategories) && subItem?.subSubCategories?.length > 0\n return (\n <div key={`subcategoryItem-${index}`}>\n <div\n className={cn('flex cursor-pointer items-center justify-between', {\n 'bg-[#F5F5F7]':\n !hasSubSubCategory && expandedSubcategory?.find(item => item.index === index)?.open,\n })}\n onClick={() => {\n handleSubcategoryOpen(index, subItem)\n onSidebarNavClick?.(subItem, index)\n }}\n >\n <Text html={subItem.label} className=\"p-4 text-sm font-bold leading-[1.4]\" />\n {hasSubSubCategory && (\n <DownArrow\n className={cn('size-4', {\n ['rotate-180']: expandedSubcategory?.find(item => item.index === index)?.open,\n })}\n />\n )}\n </div>\n {expandedSubcategory?.find(item => item.index === index)?.open && (\n <div className=\"flex flex-col\">\n {subItem.subSubCategories?.map((subSubItem: any, subSubindex: number) => (\n <Text\n html={subSubItem.label}\n onClick={() => {\n handleSubSubcategoryOpen(index, subSubindex)\n onSidebarNavClick?.(subSubItem, subSubindex)\n }}\n key={`subSubItem-${index}-${subSubindex}`}\n className={cn(\n 'cursor-pointer px-6 py-4 text-sm font-bold leading-[1.4] text-[#6D6D6F] hover:bg-[#F5F5F7]',\n {\n 'bg-[#F5F5F7]': activeSubSubcategoryIndex === subSubindex,\n }\n )}\n />\n ))}\n </div>\n )}\n </div>\n )\n })}\n </div>\n {sidebarCategoriesMetadata && (\n <div className=\"flex\">\n <div className=\"flex flex-col gap-4\">\n {sidebarCategoriesMetadata?.primary && (\n <Button\n as=\"a\"\n href={`${sidebarCategoriesMetadata?.primary?.url}?ref=${sidebarCategoriesMetadata?.primary?.label}_shopall`}\n variant=\"primary\"\n size=\"lg\"\n className=\"lg-desktop:text-base text-sm\"\n >\n {sidebarCategoriesMetadata?.primary?.label}\n </Button>\n )}\n {sidebarCategoriesMetadata?.secondary && (\n <Button\n as=\"a\"\n href={sidebarCategoriesMetadata?.secondary?.url}\n variant=\"link\"\n size=\"lg\"\n className=\"lg-desktop:text-base justify-start !p-0 text-sm\"\n >\n {sidebarCategoriesMetadata?.secondary?.label}\n </Button>\n )}\n </div>\n </div>\n )}\n </div>\n <div className=\"flex-1 py-4\">\n {Reflect.ownKeys(matchSeriesMetadata).length > 0 && (\n <div className=\"mb-4 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Text\n html={matchSeriesMetadata?.label}\n className=\"lg-desktop:text-2xl text-xl font-bold leading-[1.4]\"\n />\n {matchSeriesMetadata?.primary && !matchSeriesMetadata?.primary?.hide && (\n <Button\n as=\"a\"\n href={`${matchSeriesMetadata?.primary?.url}?ref=${matchSeriesMetadata?.label}_viewmore`}\n variant=\"link\"\n size=\"lg\"\n className=\"lg-desktop:text-base justify-start !p-0 text-sm font-bold leading-[1.2] no-underline\"\n >\n {matchSeriesMetadata?.primary?.label}\n </Button>\n )}\n </div>\n <Link\n href={matchSeriesMetadata?.guide?.url}\n className=\"lg-desktop:text-base text-sm leading-[1.2] text-[#6D6D6F]\"\n >\n {matchSeriesMetadata?.guide?.label}\n </Link>\n </div>\n )}\n <div\n className=\"flex h-[426px] flex-col gap-4 overflow-y-auto\"\n style={{\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n }}\n >\n {matchSeriesMetadata?.series?.map((seriesItem: any, seriesIndex: number) => (\n <div key={`seriesItem-${seriesIndex}`}>\n {seriesItem.label && (\n <Text html={seriesItem.label} className=\"mb-2 text-sm font-bold leading-[1.4] text-[#6D6D6F]\" />\n )}\n <div className=\"grid grid-cols-3 gap-4\">\n {!!matchSeriesMetadata?.banner && (\n <Link asChild={!matchSeriesMetadata?.banner?.href} href={matchSeriesMetadata?.banner?.href}>\n <div className=\"[&_img]:hover:duration-600 relative [&_img]:hover:scale-110 [&_img]:hover:transition-all\">\n <Picture\n source={matchSeriesMetadata?.banner?.imageUrl}\n className=\"laptop:h-[120px] h-[114px]\"\n imgClassName=\"object-cover h-full\"\n />\n <div className=\"absolute inset-x-0 bottom-0 p-4\">\n <Heading\n size={2}\n html={matchSeriesMetadata?.banner?.title || 'Buy in Guide'}\n className=\"font-bold text-white\"\n />\n <Text\n html={matchSeriesMetadata?.banner?.desc || '20.000mAh'}\n className=\"text-sm font-bold text-white\"\n />\n </div>\n </div>\n </Link>\n )}\n {seriesItem.products?.map((product: any, index: number) => (\n <SeriesProductItem\n seriesLabel={matchSeriesMetadata?.label}\n key={`seriesProductItem-${index}`}\n product={product}\n isCollection={matchSeriesMetadata?.isCollection}\n />\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n </Container>\n )\n }\n)\n\n/**\n * \u591A\u5217\u4E0B\u62C9\n * @param categoriesItem \u5206\u7C7B\u9879\n */\nconst MulticolDropdown = ({ multicolMetadata }: { multicolMetadata: any }) => {\n const multicolDropdownRef = useRef<HTMLDivElement>(null)\n\n // useGSAP(() => {\n // gsap.fromTo(\n // multicolDropdownRef?.current,\n // {\n // height: 0,\n // },\n // {\n // height: 'auto',\n // duration: 0.5,\n // }\n // )\n // }, [])\n\n return (\n <div ref={multicolDropdownRef}>\n <Container childClassName=\"bg-white\" className=\"h-full\">\n <div className=\"flex gap-4 py-4\">\n {multicolMetadata?.map((item: any, index: number) => (\n <div key={`multicolItem-${item?.label}-${index}`} className=\"w-1/4\">\n <MulticolItem item={item} />\n </div>\n ))}\n </div>\n </Container>\n </div>\n )\n}\n\n/**\n * supports\u4E0B\u62C9\n * @param categoriesItem \u5206\u7C7B\u9879\n * @param currentNavItemRef \u5F53\u524D\u5BFC\u822A\u9879\n */\nconst SupportsDropdown = ({\n supportsMetadata,\n currentNavItemRef,\n}: {\n supportsMetadata: any\n currentNavItemRef: HTMLDivElement\n}) => {\n const supportsDropdownRef = useRef<HTMLDivElement>(null)\n const [navItemReact, setNavItemReact] = useState<DOMRect | null>(null)\n const [supportsDropdownHeight, setSupportsDropdownHeight] = useState(0)\n\n // useGSAP(() => {\n // gsap.fromTo(\n // supportsDropdownRef?.current,\n // {\n // height: 0,\n // },\n // {\n // height: supportsDropdownHeight,\n // duration: 0.5,\n // }\n // )\n // }, [supportsDropdownHeight])\n\n useEffect(() => {\n if (supportsDropdownRef?.current) {\n const rect = supportsDropdownRef?.current?.getBoundingClientRect()\n setSupportsDropdownHeight(rect.height)\n }\n }, [supportsDropdownRef])\n\n const debouncedHandleResize = debounce(() => {\n if (currentNavItemRef) {\n const rect = currentNavItemRef.getBoundingClientRect()\n setNavItemReact(rect)\n }\n }, 500)\n\n useEffect(() => {\n debouncedHandleResize()\n window.addEventListener('resize', debouncedHandleResize)\n return () => {\n window.removeEventListener('resize', debouncedHandleResize)\n }\n }, [debouncedHandleResize])\n\n useEffect(() => {\n if (currentNavItemRef) {\n const rect = currentNavItemRef.getBoundingClientRect()\n setNavItemReact(rect)\n }\n }, [currentNavItemRef])\n\n return (\n <div\n className=\"absolute top-0 h-full overflow-hidden bg-white transition-all duration-500\"\n style={{ right: `calc(100% - ${navItemReact?.right}px)`, height: supportsDropdownHeight }}\n >\n <div ref={supportsDropdownRef} className=\"p-4\">\n {supportsMetadata?.map((supportItem: any) => (\n <div key={supportItem.id} className=\"py-2\">\n <Link href={supportItem.url} className=\"text-sm font-bold leading-[1.4] no-underline\">\n {supportItem.label}\n </Link>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nconst SeriesProductItem = ({\n product,\n isCollection,\n position,\n seriesLabel,\n}: {\n product: any\n isCollection?: boolean\n position?: number\n seriesLabel?: string\n}) => {\n const { buildProps, onSeriesProductClick } = useNavContext()\n let productData = isCollection\n ? product\n : buildProps?.products?.find((item: Product) => item.handle === product.handle)\n const variant =\n productData?.variants?.find((item: ProductVariant) => item.sku === product.sku) || productData?.variants?.[0]\n\n const listingLink = useMemo(() => {\n return `/products/${productData?.handle}?variant=${atobID(variant?.id as string)}`\n }, [productData?.handle, variant?.id])\n\n const tags = useMemo(() => {\n return productData?.tags\n ?.filter?.((item: any) => item?.startsWith?.('CLtag'))\n ?.map?.((item: any) => item?.replace?.('CLtag:', ''))\n ?.slice?.(0, 2)\n }, [productData?.tags])\n\n if (!variant?.availableForSale) return null\n\n return (\n <Link\n href={listingLink}\n onClick={e => {\n e.preventDefault()\n window.open(listingLink)\n onSeriesProductClick?.(productData, position || 0, seriesLabel)\n }}\n className=\"no-underline hover:text-current\"\n >\n <div className=\"flex shrink-0 items-center gap-4 bg-[#F5F5F7] px-4 py-3 [&_img]:hover:scale-110\">\n <div className=\"shrink-0\">\n <Picture\n source={`${variant?.image?.url || product?.images?.[0]?.url}}`}\n width={90}\n height={90}\n className=\"size-[96px]\"\n imgClassName=\"object-contain h-full\"\n />\n </div>\n <div className=\"relative\">\n <div className=\"flex gap-1\">\n {Array.isArray(tags) &&\n tags?.map((tag: string, index: number) => (\n <Text\n key={index}\n as=\"p\"\n html={tag}\n className=\"text-brand-0 mb-1 inline-block h-[24px] whitespace-nowrap rounded-full border-[1.6px] border-[#00BEFA] px-[6px] text-sm font-bold !leading-[22px]\"\n />\n ))}\n </div>\n {/* {product?.badge && (\n <Text\n as=\"p\"\n html={product?.badge}\n className=\"text-brand-0 mb-1 inline-block h-[24px] rounded-full border-[1.6px] border-[#00BEFA] px-[6px] text-sm font-bold !leading-[24px]\"\n />\n )} */}\n <Text\n className=\"lg-desktop:h-[44px] lg-desktop:text-base line-clamp-2 h-[40px] text-sm font-bold leading-[1.4]\"\n html={productData?.title || product?.name}\n />\n {product?.desc && (\n <Text\n as=\"p\"\n html={product?.desc}\n className=\"lg-desktop:text-sm mt-1 line-clamp-1 text-xs font-bold leading-[1.4] text-[#6D6D6F]\"\n />\n )}\n </div>\n </div>\n </Link>\n )\n}\n\n/**\n * \u591A\u5217\u4E0B\u62C9\u9879\n * @param item \u591A\u5217\u4E0B\u62C9\u9879\n */\nconst MulticolItem = ({ item, allPicture }: { item: any; allPicture?: boolean }) => {\n return (\n <>\n {item?.columns && (\n <>\n <Text html={item.label} as=\"div\" className=\"my-2 text-sm font-bold leading-[1.4] text-[#6D6D6F]\" />\n <div className=\"mt-2 flex flex-col\">\n {item.columns?.map((columnItem: any) => (\n <div key={columnItem.label} className=\"flex items-center gap-1 py-2\">\n <Link\n href={`${columnItem.url}?ref=navMenu`}\n asChild={!columnItem.url}\n className=\"text-sm font-bold leading-[1.4] no-underline\"\n >\n {columnItem.label}\n </Link>\n {columnItem?.badge && (\n <Text\n as=\"p\"\n html={columnItem?.badge || 'badge'}\n className=\"text-brand-0 h-[24px] rounded-full border-[1.6px] border-[var(--brand-color-0)] px-[6px] text-sm font-bold !leading-[22px]\"\n />\n )}\n </div>\n ))}\n </div>\n </>\n )}\n {item?.imageUrl && (\n <div\n className={cn(\n 'laptop:h-[280px] desktop:h-[224px] lg-desktop:h-[280px] tablet:max-w-[346px] laptop:max-w-[440px] desktop:w-full relative h-[240px] max-w-[358px] overflow-hidden',\n {\n ['tablet:max-w-none laptop:max-w-none']: allPicture,\n }\n )}\n >\n <Link href={`${item.url}?ref=navMenu`} asChild={!item.url}>\n <Picture\n source={item.imageUrl}\n width={404}\n height={280}\n className=\"size-full\"\n imgClassName=\"object-cover h-full hover:scale-105 transition-all duration-300\"\n />\n <div className=\"absolute bottom-4 left-4 z-10 flex flex-col justify-end no-underline\">\n <Text\n html={item.title}\n className={cn('lg-desktop:text-2xl text-xl font-bold leading-[1.2] text-white', {\n 'text-black': item?.theme === 'dark',\n })}\n />\n {item.subtitle && (\n <Text\n html={item.subtitle}\n className={cn('text-sm font-bold leading-[1.4] text-white', {\n 'text-black': item?.theme === 'dark',\n })}\n />\n )}\n {item?.primary?.label && (\n <Button\n as=\"a\"\n href={item?.primary?.url}\n variant=\"link\"\n size=\"lg\"\n className={cn('mr-auto !p-0 text-sm font-bold leading-[1.4] text-white', {\n 'text-black': item?.theme === 'dark',\n })}\n >\n {item?.primary?.label || 'more'}\n </Button>\n )}\n </div>\n </Link>\n </div>\n )}\n </>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEF\u5BFC\u822A\n * @param menuHeight \u83DC\u5355\u9AD8\u5EA6\n * @param data \u5BFC\u822A\u6570\u636E\n */\nconst MobileNavigation = forwardRef<HTMLDivElement, MobileNavigationProps>(\n ({ data, menuData, className, onPrimaryNavClick }, ref) => {\n const groupCategories = useMemo(() => {\n return WithGroupCategory(data?.categories?.filter((item: any) => item?.mobileShow))\n }, [data])\n\n const { currentMenu, setCurrentMenu, subSubCategory } = useNavContext()\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false)\n const [menuInnerHeight, setMenuInnerHeight] = useState(0)\n const [categoriesItem, setCategoriesItem] = useState<any>(null)\n\n const mobileMenuRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (mobileMenuRef?.current && mobileMenuOpen) {\n const rect = mobileMenuRef?.current?.getBoundingClientRect()\n setMenuInnerHeight(window?.innerHeight - (rect?.bottom || 0))\n }\n }, [mobileMenuOpen])\n\n useGSAP(() => {\n gsap.fromTo(\n mobileMenuRef.current,\n {\n height: 0,\n },\n {\n height: menuInnerHeight,\n duration: 0.3,\n }\n )\n }, [menuInnerHeight])\n\n useEffect(() => {\n document.documentElement.style.overflow = mobileMenuOpen ? 'hidden' : 'auto'\n }, [mobileMenuOpen])\n\n const currentBlockTypeCategories = useMemo(() => {\n return categoriesItem?.components?.[0]?.blockType\n }, [categoriesItem])\n\n const MobileSupportMenuComp = WithSupports(MobileSupportMenu, {\n categoriesItem,\n })\n\n const MobileSidebarMenuComp = WithSidebar(MobileSidebarMenu, categoriesItem)\n const MobileMulticolMenuComp = WithMulticol(MobileMulticolMenu, categoriesItem)\n\n const MobileCategoriesMenuComp = useMemo(() => {\n switch (currentBlockTypeCategories) {\n case HeaderNavigationBlockType.Sidebar:\n return <MobileSidebarMenuComp />\n case HeaderNavigationBlockType.Supports:\n return <MobileSupportMenuComp />\n case HeaderNavigationBlockType.Multicol:\n return <MobileMulticolMenuComp />\n default:\n return null\n }\n }, [currentBlockTypeCategories, categoriesItem, MobileSupportMenuComp])\n\n const handleSecondaryMenuClose = useCallback(() => {\n setMobileMenuOpen(false)\n setMenuInnerHeight(0)\n setCurrentMenu && setCurrentMenu(HeaderNavigationMenu.Primary)\n }, [setMobileMenuOpen, setMenuInnerHeight, setCurrentMenu])\n\n const menuActions = useMemo(() => {\n return data?.headerBar?.actions?.filter(\n (item: any) => item?.mobileShow && item?.blockType !== HeaderNavigationActionBlockType.Profile // \u79FB\u52A8\u7AEF\u4E0D\u663E\u793Aprofile\u6309\u94AE\n )\n }, [data])\n\n const profileAction = useMemo(() => {\n return (\n data?.headerBar?.actions?.find(\n (item: any) => item?.mobileShow && item?.blockType === HeaderNavigationActionBlockType.Profile\n ) || {}\n )\n }, [data])\n\n const MobileCategoriesHeaderComp = useMemo(() => {\n switch (currentMenu) {\n case HeaderNavigationMenu.Primary:\n return (\n <PrimaryHeader\n actions={menuActions}\n menuOpen={mobileMenuOpen}\n onMenuOpenClose={() => {\n setMobileMenuOpen(false)\n setMenuInnerHeight(0)\n }}\n onMenuOpenClick={() => setMobileMenuOpen(true)}\n />\n )\n case HeaderNavigationMenu.Secondary:\n return (\n <SecondaryHeader\n title={categoriesItem?.text}\n onMenuOpenClose={handleSecondaryMenuClose}\n onMenuBackClick={() => setCurrentMenu?.(HeaderNavigationMenu.Primary)}\n />\n )\n case HeaderNavigationMenu.Third:\n return (\n <SecondaryHeader\n title={subSubCategory?.label}\n onMenuOpenClose={handleSecondaryMenuClose}\n onMenuBackClick={() => setCurrentMenu?.(HeaderNavigationMenu.Secondary)}\n />\n )\n default:\n return null\n }\n }, [\n mobileMenuOpen,\n currentMenu,\n setCurrentMenu,\n categoriesItem,\n menuActions,\n subSubCategory,\n handleSecondaryMenuClose,\n ])\n\n const handlePrimaryMenuClick = useCallback(\n (groupIndex: number, index: number) => {\n const categoriesItem = Array.isArray(groupCategories)\n ? Array.isArray(groupCategories[groupIndex])\n ? // @ts-ignore\n groupCategories[groupIndex][index]\n : {}\n : {}\n setCategoriesItem(categoriesItem)\n if (categoriesItem?.components?.[0]?.blockType === HeaderNavigationBlockType.Links) {\n // link\u6A21\u5757\u7279\u6B8A\u5904\u7406\n categoriesItem?.components?.[0]?.url && window.open(categoriesItem?.components?.[0]?.url)\n } else {\n setCurrentMenu?.(HeaderNavigationMenu.Secondary)\n }\n },\n [groupCategories, setCurrentMenu]\n )\n\n return (\n <Container className={cn('relative h-[52px]', className)}>\n {/* \u79FB\u52A8\u7AEF\u5206\u7C7B\u83DC\u5355 */}\n {MobileCategoriesHeaderComp}\n {mobileMenuOpen && (\n <div\n ref={mobileMenuRef}\n className=\"absolute left-0 top-full z-[999] w-full overflow-y-auto border-t border-[#E4E5E6] bg-white text-black\"\n style={{ height: menuInnerHeight }}\n >\n {currentMenu === HeaderNavigationMenu.Primary ? (\n <div className=\"pt-4\">\n <BrandStrip data={menuData} />\n </div>\n ) : null}\n {currentMenu === HeaderNavigationMenu.Primary ? (\n <MobilePrimaryMenu\n categories={groupCategories}\n onPrimaryMenuClick={handlePrimaryMenuClick}\n onPrimaryNavClick={onPrimaryNavClick}\n profileAction={profileAction}\n />\n ) : (\n MobileCategoriesMenuComp\n )}\n </div>\n )}\n </Container>\n )\n }\n)\n\n/**\n * \u79FB\u52A8\u7AEF\u4E00\u7EA7\u83DC\u5355\n * @param categories \u5206\u7C7B\n * @param onPrimaryMenuClick \u4E00\u7EA7\u83DC\u5355\u70B9\u51FB\n */\nconst MobilePrimaryMenu = ({\n categories,\n onPrimaryMenuClick,\n profileAction,\n onPrimaryNavClick,\n}: {\n categories: any\n onPrimaryMenuClick: (groupIndex: number, index: number) => void\n profileAction: any\n onPrimaryNavClick?: (category: any, position: number) => void\n}) => {\n const { onSidebarNavClick } = useNavContext()\n return (\n <div className=\"flex h-full flex-col justify-between\">\n <div className=\"tablet:px-8 laptop:px-16 p-4\">\n {categories?.map((groupItem: any, groupIndex: number) => (\n <div key={`groupCategory-${groupIndex}`} className=\"\">\n <div className={cn('my-2 h-px w-full bg-[#E5E5E7]')} />\n {groupItem?.map((item: any, index: number) => (\n <MenuItem\n key={item.id}\n label={item.text}\n onClick={() => {\n const flatCategories = categories?.flat() || []\n const position = flatCategories?.findIndex(\n (item: any) => item?.id === categories[groupIndex][index]?.id\n )\n onPrimaryMenuClick(groupIndex, index)\n onPrimaryNavClick?.(item, position)\n }}\n icon={item.components?.[0]?.icon}\n />\n ))}\n </div>\n ))}\n </div>\n <ProfileComp profileAction={profileAction} />\n </div>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEF\u4FA7\u8FB9\u680F\u4E0B\u62C9\n * @param sidebarCategoriesMetadata \u4FA7\u8FB9\u680F\u5206\u7C7B\u5143\u6570\u636E\n * @param seriesMetadata \u4FA7\u8FB9\u680F\u7CFB\u5217\u5143\u6570\u636E\n */\nconst MobileSidebarMenu = ({\n sidebarCategoriesMetadata,\n seriesMetadata,\n}: {\n sidebarCategoriesMetadata: any\n seriesMetadata: any\n}) => {\n const {\n currentMenu,\n setCurrentMenu,\n subSubCategory,\n setSubSubCategory,\n setCurrentSeriesMetadata,\n currentSeriesMetadata,\n buildProps,\n onSidebarNavClick,\n } = useNavContext()\n const [expandedSubcategory, setExpandedSubcategory] = useState<{ index: number; open: boolean }[]>([])\n const [expandedSeriesCategories, setExpandedSeriesCategories] = useState<{ index: number; open: boolean }[]>([])\n\n useEffect(() => {\n if (sidebarCategoriesMetadata?.subcategories?.length) {\n setExpandedSubcategory(\n sidebarCategoriesMetadata?.subcategories?.map((_: any, index: number) => ({\n index,\n open: false,\n }))\n )\n }\n }, [sidebarCategoriesMetadata])\n\n useEffect(() => {\n if (subSubCategory?.subSubCategories?.length) {\n setExpandedSeriesCategories(\n subSubCategory?.subSubCategories?.map((_: any, index: number) => ({\n index,\n open: index === 0,\n }))\n )\n }\n }, [subSubCategory])\n\n const handleSubSubCategoryClick = useCallback(\n (item: any, subIndex?: number) => {\n setCurrentMenu && setCurrentMenu(HeaderNavigationMenu.Third)\n setSubSubCategory?.(item)\n const curSeriesMetadata =\n seriesMetadata?.find((seriesItem: any) =>\n subIndex !== undefined\n ? item?.subSubCategories?.[subIndex]?.label?.toLowerCase() === seriesItem.label?.toLowerCase()\n : item?.label?.toLowerCase() === seriesItem.label?.toLowerCase()\n ) || {}\n // \u901A\u8FC7categoriesMetadata\u7684subSubCategories\u7684label\u4E0Eseries\u7684label\u5339\u914D\n if (item?.collections) {\n const category = buildProps?.categories?.[item?.collections] || {}\n setCurrentSeriesMetadata?.({\n label: curSeriesMetadata?.label,\n isCollection: true,\n banner: curSeriesMetadata?.banner,\n primary: curSeriesMetadata?.primary,\n series: [\n {\n products: category?.products,\n },\n ],\n })\n } else {\n setCurrentSeriesMetadata?.(curSeriesMetadata)\n }\n },\n [seriesMetadata, sidebarCategoriesMetadata, setCurrentMenu, setSubSubCategory, setCurrentSeriesMetadata]\n )\n\n const defaultGuide = useMemo(() => {\n return seriesMetadata?.find((item: any) => !!item?.guide)?.guide\n }, [seriesMetadata, sidebarCategoriesMetadata])\n\n const MobileSidebarMenuComp = useMemo(() => {\n switch (currentMenu) {\n case HeaderNavigationMenu.Secondary:\n return (\n // \u4E8C\u7EA7\u83DC\u5355\n <div className=\"tablet:px-8 laptop:px-16 tablet:justify-start tablet:gap-16 flex h-full flex-col justify-between p-4\">\n <div>\n {sidebarCategoriesMetadata?.subcategories?.map((item: any, index: number) => {\n return (\n <div key={`${item.label}-${index}`}>\n <MenuItem\n label={item?.label}\n active={expandedSubcategory.find(item => item.index === index)?.open}\n onClick={() => {\n handleSubSubCategoryClick(item)\n onSidebarNavClick?.(item, index)\n }}\n />\n {/* {expandedSubcategory.find(item => item.index === index)?.open &&\n item.subSubCategories?.map((subItem: any, subIndex: number) => (\n <div\n key={`${index}-${subIndex}`}\n className=\"px-2 py-4\"\n onClick={() => handleSubSubCategoryClick(item, subIndex)}\n >\n <Text html={subItem.label} className=\"text-sm font-bold leading-[1.4]\" />\n </div>\n ))} */}\n </div>\n )\n })}\n </div>\n <div className=\"tablet:items-start flex flex-col items-center gap-4\">\n {sidebarCategoriesMetadata?.primary && (\n <Button\n as=\"a\"\n href={`${sidebarCategoriesMetadata?.primary?.url}?ref=${sidebarCategoriesMetadata?.primary?.label}_shopall`}\n variant=\"primary\"\n size=\"lg\"\n className=\"tablet:w-auto w-full text-base\"\n >\n {sidebarCategoriesMetadata?.primary?.label}\n </Button>\n )}\n {sidebarCategoriesMetadata?.secondary && (\n <Button\n as=\"a\"\n href={sidebarCategoriesMetadata?.secondary?.url}\n variant=\"link\"\n size=\"lg\"\n className=\"tablet:w-auto tablet:px-0 w-full py-0 text-base\"\n >\n {sidebarCategoriesMetadata?.secondary?.label}\n </Button>\n )}\n </div>\n </div>\n )\n case HeaderNavigationMenu.Third:\n return (\n // \u4E09\u7EA7\u83DC\u5355\n <div className=\"tablet:px-8 laptop:px-16 p-4\">\n {subSubCategory?.subSubCategories ? (\n subSubCategory?.subSubCategories?.map((subSubCategoryItem: any, index: number) => {\n const curSeriesMetadata =\n seriesMetadata?.find(\n (item: any) => item.label.toLowerCase() === subSubCategoryItem?.label?.toLowerCase()\n ) || {}\n let matchSeriesMetadata = {} as any\n if (subSubCategoryItem?.collections) {\n const category = buildProps?.categories?.[subSubCategoryItem?.collections] || {}\n matchSeriesMetadata = {\n label: curSeriesMetadata?.label,\n isCollection: true,\n banner: curSeriesMetadata?.banner,\n primary: curSeriesMetadata?.primary,\n series: [\n {\n products: category?.products,\n },\n ],\n }\n } else {\n matchSeriesMetadata = curSeriesMetadata\n }\n return (\n <div key={`${subSubCategoryItem.label}-${index}`}>\n {Reflect.ownKeys(subSubCategoryItem).length > 0 && (\n <SubSubCategoryItemComp\n matchSeriesMetadata={matchSeriesMetadata}\n onSubSubCategoryItemClick={() => {\n onSidebarNavClick?.(subSubCategoryItem, index)\n setExpandedSeriesCategories(prev =>\n prev.map((item, i) => ({ ...item, open: i === index ? !item.open : item.open }))\n )\n }}\n expanded={!!expandedSeriesCategories?.find(item => item.index === index)?.open}\n />\n )}\n {expandedSeriesCategories?.find(item => item.index === index)?.open && (\n <>\n <SubSubCategoryContentComp matchSeriesMetadata={matchSeriesMetadata} />\n {matchSeriesMetadata?.primary && (\n <div className=\"my-4 text-center\">\n <Button\n as=\"a\"\n href={matchSeriesMetadata?.primary?.url}\n className=\"text-base leading-[1.2] no-underline\"\n variant=\"secondary\"\n size=\"base\"\n >\n {matchSeriesMetadata?.primary?.label}\n </Button>\n </div>\n )}\n </>\n )}\n </div>\n )\n })\n ) : (\n <>\n {Reflect.ownKeys(currentSeriesMetadata).length > 0 && (\n <SubSubCategoryItemComp matchSeriesMetadata={currentSeriesMetadata} />\n )}\n <SubSubCategoryContentComp matchSeriesMetadata={currentSeriesMetadata} />\n {currentSeriesMetadata?.primary && (\n <div className=\"my-4 text-center \">\n <Button\n as=\"a\"\n href={`${currentSeriesMetadata?.primary?.url}?ref=${currentSeriesMetadata?.label}_viewmore`}\n variant=\"secondary\"\n size=\"base\"\n className=\"text-base leading-[1.2] no-underline\"\n >\n {currentSeriesMetadata?.primary?.label}\n </Button>\n </div>\n )}\n </>\n )}\n {defaultGuide && (\n <Link href={defaultGuide?.url}>\n <div className=\"mt-4\">\n <Text html={defaultGuide?.label} className=\"text-sm font-bold leading-[1.2] text-[#6D6D6F]\" />\n </div>\n </Link>\n )}\n </div>\n )\n default:\n return null\n }\n }, [\n currentMenu,\n sidebarCategoriesMetadata,\n setCurrentMenu,\n seriesMetadata,\n expandedSubcategory,\n expandedSeriesCategories,\n setSubSubCategory,\n subSubCategory,\n setCurrentSeriesMetadata,\n currentSeriesMetadata,\n ])\n\n return MobileSidebarMenuComp\n}\n\nconst SubSubCategoryItemComp = ({\n matchSeriesMetadata,\n onSubSubCategoryItemClick,\n expanded,\n}: {\n matchSeriesMetadata: any\n onSubSubCategoryItemClick?: () => void\n expanded?: boolean\n}) => {\n return (\n <div className=\"tablet:pt-0 flex items-center justify-between py-4\" onClick={onSubSubCategoryItemClick}>\n {matchSeriesMetadata?.label && (\n <Text html={matchSeriesMetadata?.label} className=\"text-sm font-bold leading-[1.4]\" />\n )}\n {onSubSubCategoryItemClick && (\n <DownArrow\n className={cn('size-5', {\n ['rotate-180']: expanded,\n })}\n />\n )}\n </div>\n )\n}\n\nconst SubSubCategoryContentComp = ({ matchSeriesMetadata }: { matchSeriesMetadata: any }) => {\n return (\n <div className=\"laptop:gap-3 flex flex-col gap-2\">\n {!!matchSeriesMetadata?.series?.length &&\n matchSeriesMetadata?.series?.map((seriesItem: any, pIndex: number) => (\n <div key={`seriesItem-${pIndex}`}>\n {seriesItem.label && (\n <Text html={seriesItem.label} className=\"mb-2 text-sm font-bold leading-[1.4] text-[#3D3D3F]\" />\n )}\n <div className=\"laptop:grid-cols-3 laptop:gap-4 tablet:grid tablet:grid-cols-2 tablet:gap-3 flex flex-col gap-2\">\n {!!matchSeriesMetadata?.banner && (\n <Link asChild={!matchSeriesMetadata?.banner?.href} href={matchSeriesMetadata?.banner?.href}>\n <div className=\"[&_img]:hover:duration-600 relative [&_img]:hover:scale-110 [&_img]:hover:transition-all\">\n <Picture\n source={matchSeriesMetadata?.banner?.imageUrl}\n className=\"laptop:h-[120px] h-[114px]\"\n imgClassName=\"object-cover h-full\"\n />\n <div className=\"absolute inset-x-0 bottom-0 p-4\">\n <Heading\n size={2}\n html={matchSeriesMetadata?.banner?.title || 'Buy in Guide'}\n className={cn('font-bold text-white', {\n 'text-black': matchSeriesMetadata?.banner?.theme === 'dark',\n })}\n />\n <Text\n html={matchSeriesMetadata?.banner?.desc || '20.000mAh'}\n className={cn('text-sm font-bold text-white', {\n 'text-black': matchSeriesMetadata?.banner?.theme === 'dark',\n })}\n />\n </div>\n </div>\n </Link>\n )}\n {seriesItem.products?.map((product: any, index: number) => (\n <SeriesProductItem\n position={index}\n key={`seriesProductItem-${pIndex}-${index}`}\n product={product}\n seriesLabel={matchSeriesMetadata?.label}\n isCollection={matchSeriesMetadata?.isCollection}\n />\n ))}\n </div>\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEFsupport\u83DC\u5355\n * @param supportsMetadata support\u83DC\u5355\u5143\u6570\u636E\n */\nconst MobileSupportMenu = ({ supportsMetadata }: { supportsMetadata: any }) => {\n return (\n <div className=\"tablet:px-8 laptop:px-16 p-4\">\n {supportsMetadata?.map((supportItem: any) => (\n <MenuItem key={supportItem.id} href={supportItem.url} label={supportItem.label} onClick={() => {}} />\n ))}\n </div>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEFmulticol\u83DC\u5355\n * @param multicolMetadata multicol\u83DC\u5355\u5143\u6570\u636E\n */\nconst MobileMulticolMenu = ({ multicolMetadata }: { multicolMetadata: any }) => {\n // \u662F\u5426\u5168\u90E8\u662F\u56FE\u7247\n const allPicture = useMemo(() => {\n return !multicolMetadata?.some((item: any) => !!item.columns)\n }, [multicolMetadata])\n\n return (\n <div\n className={cn('tablet:py-4 tablet:px-8 laptop:px-16 tablet:gap-6 flex flex-col gap-4 p-4', {\n ['tablet:grid tablet:grid-cols-2 tablet:gap-3 laptop:gap-4']: allPicture,\n })}\n >\n {multicolMetadata?.map((item: any, index: number) => (\n <div key={`multicolItem-${item?.label}-${index}`}>\n <MulticolItem item={item} allPicture={allPicture} />\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEFprofile\u7EC4\u4EF6\n * @param profileAction profile\u83DC\u5355\u5143\u6570\u636E\n */\nconst ProfileComp = ({ profileAction }: { profileAction: any }) => {\n const [profileOpen, setProfileOpen] = useState(false)\n const { profile, event } = useNavContext()\n return (\n <div\n className={cn('tablet:px-8 laptop:px-16 bg-[#F5F5F7] px-4 py-6', {\n 'p-4': profileOpen,\n })}\n >\n <div className=\"flex items-center justify-between\" onClick={() => setProfileOpen(!profileOpen)}>\n <div className=\"flex items-center gap-[14px]\">\n <div className=\"flex size-[40px] shrink-0 items-center justify-center rounded-full bg-white\">\n <User />\n </div>\n <Text html={profile?.nick_name || profileAction?.welcome} className=\"text-base font-bold leading-[1.4]\" />\n </div>\n {!profile?.email && <DownArrow className={cn('laptop:size-4 size-5', { 'rotate-180': profileOpen })} />}\n </div>\n {profile?.email && (\n <div className=\"mt-4\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem key={item.id} label={item?.title} href={item?.url} />\n ))}\n </div>\n )}\n {profileOpen && !profile?.email && (\n <div className=\"mt-4\">\n <Text html={profileAction?.benefits_title} className=\"text-sm font-bold leading-[1.4]\" />\n <div className=\"mt-2 flex flex-col gap-1\">\n {profileAction?.benefits?.map((item: any) => (\n <div key={item.id} className=\"flex items-center gap-[6px]\">\n <Picture source={item.benefitIcon?.url} className=\"size-4\" alt={item.benefit} width={16} height={16} />\n <Text html={item.benefit} className=\"text-sm font-bold leading-[1.4]\" />\n </div>\n ))}\n </div>\n </div>\n )}\n {!profile?.email && (\n <div className=\"mt-4 flex items-center gap-3\">\n <Button className=\"tablet:flex-none flex-1\" variant=\"secondary\" size=\"base\" onClick={() => event?.join?.()}>\n <Text html={profileAction?.primaryButton || 'Join Now'} className=\"text-sm font-bold leading-[1.4]\" />\n </Button>\n <Button className=\"tablet:flex-none flex-1\" variant=\"primary\" size=\"base\" onClick={() => event?.login?.()}>\n <Text html={profileAction?.secondaryButton || 'Log In'} className=\"text-sm font-bold leading-[1.4]\" />\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nconst PrimaryHeader = ({ menuOpen, onMenuOpenClose, onMenuOpenClick, actions }: MobilePrimaryNavigationData) => {\n return (\n <div className=\"flex h-full items-center justify-between gap-4\">\n <Logo />\n <div className=\"desktop:gap-6 flex items-center gap-4\">\n <Actions actions={actions} />\n {menuOpen ? (\n <Close className=\"size-5\" onClick={() => onMenuOpenClose()} />\n ) : (\n <Menu className=\"size-5\" onClick={() => onMenuOpenClick()} />\n )}\n </div>\n </div>\n )\n}\n\nconst Logo = () => {\n const { payloadData, isMobile } = useNavContext()\n return (\n <div\n className=\"hover:text-brand-0 cursor-pointer [&>svg]:w-full\"\n onClick={() => {\n window.location.href = '/'\n }}\n dangerouslySetInnerHTML={{\n __html: isMobile ? payloadData?.headerBar?.mobileLogo : payloadData?.headerBar?.desktopLogo,\n }}\n />\n )\n}\n\nconst Actions = forwardRef<HTMLDivElement, { actions: any; activeStatus?: boolean }>(\n ({ actions, activeStatus = false }, ref) => {\n const { event, cartCount } = useNavContext()\n const [activeAction, setActiveAction] = useState<any>(null)\n\n const handleActionClick = useCallback(\n (action: any, index: number) => {\n setActiveAction(index)\n switch (action?.blockType) {\n case HeaderNavigationActionBlockType.Search:\n event?.search?.()\n break\n case HeaderNavigationActionBlockType.Cart:\n event?.cart?.()\n break\n case HeaderNavigationActionBlockType.Profile:\n event?.profile?.()\n break\n case HeaderNavigationActionBlockType.Livestream:\n event?.livestream?.()\n break\n default:\n return () => {}\n }\n },\n [event]\n )\n\n return (\n <div className=\"desktop:gap-6 flex items-center gap-4\">\n {Array.isArray(actions) &&\n actions?.map((action: any, index: number) => (\n <div\n className=\"relative\"\n key={action.id}\n ref={action.blockType === HeaderNavigationActionBlockType.Profile ? ref : null}\n onClick={() => handleActionClick(action, index)}\n >\n <Text\n html={action.icon}\n className={cn('size-5 cursor-pointer', { 'text-brand-0': activeStatus && activeAction === index })}\n />\n {action.blockType === HeaderNavigationActionBlockType.Cart && cartCount > 0 && (\n <div className=\"bg-brand-0 absolute right-[-12px] top-[calc(100%-16px)] z-[1] flex min-h-5 min-w-5 items-center justify-center rounded-full px-[2px]\">\n <Text html={cartCount?.toString()} className=\"text-sm font-bold leading-[1.2] text-white\" />\n </div>\n )}\n </div>\n ))}\n </div>\n )\n }\n)\n\nconst SecondaryHeader = ({ title, onMenuOpenClose, onMenuBackClick }: MobileSecondaryNavigationData) => {\n return (\n <div className=\"flex h-full items-center gap-3\">\n <LeftArrow className=\"size-5\" onClick={() => onMenuBackClick()} />\n <Text html={title} className=\"flex-1 text-center text-base font-bold leading-[1.4]\" />\n <Close className=\"size-5\" onClick={() => onMenuOpenClose()} />\n </div>\n )\n}\n\nconst MenuItem = ({\n label,\n href,\n onClick,\n active,\n icon,\n className,\n}: {\n label: string\n href?: string\n onClick?: () => void\n active?: boolean\n icon?: string\n className?: string\n}) => {\n return (\n <div className={cn('flex cursor-pointer items-center justify-between py-4', className)} onClick={onClick}>\n <Link href={href} asChild={!href} className=\"flex w-full items-center justify-between no-underline\">\n <div className=\"flex items-center gap-4\">\n <Text html={label} className={cn('text-sm font-bold leading-[1.4]', { underline: icon })} />\n {icon && <Text html={icon} />}\n </div>\n <RightArrow className={cn('laptop:size-4 size-5', { 'rotate-90': active })} />\n </Link>\n </div>\n )\n}\n\nMobileNavigation.displayName = 'MobileNavigation'\nActions.displayName = 'Actions'\nHeaderNavigation.displayName = 'HeaderNavigation'\nDesktopNavigation.displayName = 'DesktopNavigation'\nSidebarDropdown.displayName = 'SidebarDropdown'\n\nexport default withLayout(HeaderNavigation)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Fragment", "jsx", "jsxs", "React", "forwardRef", "useCallback", "useEffect", "useImperativeHandle", "useMemo", "useRef", "useState", "Picture", "Text", "Button", "Container", "Link", "Heading", "BrandStrip", "withLayout", "cn", "atobID", "NavProvider", "useNavContext", "HeaderNavigationMenu", "HeaderNavigationBlockType", "HeaderNavigationActionBlockType", "debounce", "jump", "useGSAP", "gsap", "WithSidebar", "WithSupports", "WithMulticol", "WithGroupCategory", "Menu", "Close", "User", "RightArrow", "LeftArrow", "DownArrow", "Polygon", "NavigationSearch", "HeaderNavigation", "props", "ref", "headerNavigation", "buildProps", "event", "profile", "theme", "isTop", "searchResult", "onSearch", "isSearching", "keywords", "onPrimaryNavClick", "onSeriesProductClick", "onSidebarNavClick", "headerId", "cartCount", "menuData", "searchRef", "searchOpen", "setSearchOpen", "headerHidden", "setHeaderHidden", "changeHeaderBackground", "setChangeHeaderBackground", "isMobile", "setIsMobile", "headerRef", "resizeWindow", "offsetWidth", "searchPage", "item", "DesktopNavigation", "MobileNavigation", "value", "data", "onNavItemClick", "className", "downdownHover", "setDowndownHover", "groupCategories", "categoriesItem", "setCategoriesItem", "navStatusArray", "setNavStatusArray", "profileRef", "userProfileOpen", "setUserProfileOpen", "dropdownRef", "navItemRefs", "categories", "groupItem", "groupIndex", "_", "index", "currentNavItem", "handleNavItemClick", "e", "position", "prev", "handleNavMenuClose", "currentBlockTypeCategories", "SidebarDropdownComp", "SidebarDropdown", "MulticolDropdownComp", "MulticolDropdown", "SupportsDropdownComp", "SupportsDropdown", "DropdownComp", "actions", "profileAction", "handleProfileClick", "profileRefElement", "Logo", "Actions", "el", "MenuItem", "sidebarCategoriesMetadata", "seriesMetadata", "expandedSubcategory", "setExpandedSubcategory", "activeSubSubcategoryIndex", "setActiveSubSubcategoryIndex", "sidebarDropdownRef", "initExpandedSubcategory", "subcategories", "withSubSubCategoriesIndex", "withoutSubSubCategoriesIndex", "expandedStates", "matchSeriesMetadata", "subCategory", "currentSeriesMetadata", "category", "activeSubSubcategory", "currentActiveSeriesMetadata", "handleSubcategoryOpen", "subcategoryItem", "handleSubSubcategoryOpen", "subSubindex", "subItem", "hasSubSubCategory", "subSubItem", "seriesItem", "seriesIndex", "product", "SeriesProductItem", "multicolMetadata", "multicolDropdownRef", "MulticolItem", "supportsMetadata", "currentNavItemRef", "supportsDropdownRef", "navItemReact", "setNavItemReact", "supportsDropdownHeight", "setSupportsDropdownHeight", "rect", "debouncedHandleResize", "supportItem", "isCollection", "seriesLabel", "productData", "variant", "listingLink", "tags", "tag", "allPicture", "columnItem", "currentMenu", "setCurrentMenu", "subSubCategory", "mobileMenuOpen", "setMobileMenuOpen", "menuInnerHeight", "setMenuInnerHeight", "mobileMenuRef", "MobileSupportMenuComp", "MobileSupportMenu", "MobileSidebarMenuComp", "MobileSidebarMenu", "MobileMulticolMenuComp", "MobileMulticolMenu", "MobileCategoriesMenuComp", "handleSecondaryMenuClose", "menuActions", "MobileCategoriesHeaderComp", "PrimaryHeader", "SecondaryHeader", "handlePrimaryMenuClick", "MobilePrimaryMenu", "onPrimaryMenuClick", "ProfileComp", "setSubSubCategory", "setCurrentSeriesMetadata", "expandedSeriesCategories", "setExpandedSeriesCategories", "handleSubSubCategoryClick", "subIndex", "curSeriesMetadata", "defaultGuide", "subSubCategoryItem", "SubSubCategoryItemComp", "i", "SubSubCategoryContentComp", "onSubSubCategoryItemClick", "expanded", "pIndex", "profileOpen", "setProfileOpen", "menuOpen", "onMenuOpenClose", "onMenuOpenClick", "payloadData", "activeStatus", "activeAction", "setActiveAction", "handleActionClick", "action", "title", "onMenuBackClick", "label", "href", "onClick", "active", "icon", "HeaderNavigation_default"]
|
|
7
7
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Product } from '../../cpn-components/CpnProductCard/types.js';
|
|
2
2
|
export interface HeaderNavigationProps {
|
|
3
3
|
data: any;
|
|
4
|
+
menuData: any;
|
|
4
5
|
onPrimaryNavClick?: (_category: any, _position: number) => void;
|
|
5
6
|
onSidebarNavClick?: (_series: any, _index: number) => void;
|
|
6
7
|
onSeriesProductClick?: (_product: any, _position: number) => void;
|
|
@@ -61,6 +62,7 @@ export declare enum HeaderNavigationActionBlockType {
|
|
|
61
62
|
}
|
|
62
63
|
export interface MobileNavigationProps {
|
|
63
64
|
data: any;
|
|
65
|
+
menuData: any;
|
|
64
66
|
className?: string;
|
|
65
67
|
onPrimaryNavClick?: (_category: any, _position: number) => void;
|
|
66
68
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var r=(
|
|
1
|
+
var r=(i=>(i.Primary="primary",i.Secondary="secondary",i.Third="third",i))(r||{}),e=(n=>(n.Sidebar="ipc-navigation-sidebar",n.Supports="ipc-navigation-supports",n.Multicol="ipc-navigation-multicol",n.Links="ipc-navigation-links",n))(e||{}),o=(n=>(n.Search="ipc-navigation-action-search",n.Cart="ipc-navigation-action-cart",n.Profile="ipc-navigation-action-profile",n.Livestream="ipc-navigation-action-livestream",n))(o||{});export{o as HeaderNavigationActionBlockType,e as HeaderNavigationBlockType,r as HeaderNavigationMenu};
|
|
2
2
|
//# sourceMappingURL=types.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/biz-components/HeaderNavigation/types.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Product } from '../../cpn-components/CpnProductCard/types.js'\n\nexport interface HeaderNavigationProps {\n data: any\n onPrimaryNavClick?: (_category: any, _position: number) => void\n onSidebarNavClick?: (_series: any, _index: number) => void\n onSeriesProductClick?: (_product: any, _position: number) => void\n searchResult?: any\n onSearch?: (_value?: string) => void\n isSearching?: boolean\n keywords?: {\n search_term: string\n search_date: string\n shopify_domain: string\n counts: number\n }[]\n headerId?: string\n cartCount: number\n event?: {\n search?: () => void\n cart?: () => void\n profile?: () => void\n livestream?: () => void\n join?: () => void\n login?: () => void\n }\n buildProps: {\n products?: Product[]\n categories?: Record<string, any>\n }\n profile?: UserProfile // \u7528\u6237\u4FE1\u606F\n theme?: string\n isTop?: boolean // \u662F\u5426\u5728\u9876\u90E8\n}\n\nexport interface MobilePrimaryNavigationData {\n actions: any\n menuOpen?: boolean\n onMenuOpenClick: () => void\n onMenuOpenClose: () => void\n}\n\nexport interface MobileSecondaryNavigationData {\n title?: string\n onMenuOpenClose: () => void\n onMenuBackClick: () => void\n}\n\nexport enum HeaderNavigationMenu {\n Primary = 'primary',\n Secondary = 'secondary',\n Third = 'third',\n}\n\nexport enum HeaderNavigationBlockType {\n Sidebar = 'ipc-navigation-sidebar',\n Supports = 'ipc-navigation-supports',\n Multicol = 'ipc-navigation-multicol',\n Links = 'ipc-navigation-links',\n}\n\nexport enum HeaderNavigationActionBlockType {\n Search = 'ipc-navigation-action-search',\n Cart = 'ipc-navigation-action-cart',\n Profile = 'ipc-navigation-action-profile',\n Livestream = 'ipc-navigation-action-livestream',\n}\n\nexport interface MobileNavigationProps {\n data: any\n className?: string\n onPrimaryNavClick?: (_category: any, _position: number) => void\n}\n\nexport interface DesktopNavigationProps {\n data: any\n onNavItemClick?: () => void\n className?: string\n theme?: string\n onPrimaryNavClick?: (_category: any, _position: number) => void\n onSidebarNavClick?: (_series: any, _index: number, _subSubindex?: number) => void\n}\n\ntype Country = {\n id?: number\n name?: string\n code?: string\n}\n\nexport type UserProfile = {\n user_id: string\n email: string\n nick_name?: string\n full_name?: string\n first_name?: string\n last_name?: string\n dob?: string\n gender?: string\n phone_number?: string\n phone_account?: string\n country?: Country\n is_subscribe?: boolean\n avatar?: string\n can_change_password?: boolean\n invitation_code?: string\n phone_carrier?: string\n dob_programmed?: boolean\n activated?: boolean\n registed_at?: number\n activated_at?: number\n token?: string\n}\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { Product } from '../../cpn-components/CpnProductCard/types.js'\n\nexport interface HeaderNavigationProps {\n data: any\n menuData: any\n onPrimaryNavClick?: (_category: any, _position: number) => void\n onSidebarNavClick?: (_series: any, _index: number) => void\n onSeriesProductClick?: (_product: any, _position: number) => void\n searchResult?: any\n onSearch?: (_value?: string) => void\n isSearching?: boolean\n keywords?: {\n search_term: string\n search_date: string\n shopify_domain: string\n counts: number\n }[]\n headerId?: string\n cartCount: number\n event?: {\n search?: () => void\n cart?: () => void\n profile?: () => void\n livestream?: () => void\n join?: () => void\n login?: () => void\n }\n buildProps: {\n products?: Product[]\n categories?: Record<string, any>\n }\n profile?: UserProfile // \u7528\u6237\u4FE1\u606F\n theme?: string\n isTop?: boolean // \u662F\u5426\u5728\u9876\u90E8\n}\n\nexport interface MobilePrimaryNavigationData {\n actions: any\n menuOpen?: boolean\n onMenuOpenClick: () => void\n onMenuOpenClose: () => void\n}\n\nexport interface MobileSecondaryNavigationData {\n title?: string\n onMenuOpenClose: () => void\n onMenuBackClick: () => void\n}\n\nexport enum HeaderNavigationMenu {\n Primary = 'primary',\n Secondary = 'secondary',\n Third = 'third',\n}\n\nexport enum HeaderNavigationBlockType {\n Sidebar = 'ipc-navigation-sidebar',\n Supports = 'ipc-navigation-supports',\n Multicol = 'ipc-navigation-multicol',\n Links = 'ipc-navigation-links',\n}\n\nexport enum HeaderNavigationActionBlockType {\n Search = 'ipc-navigation-action-search',\n Cart = 'ipc-navigation-action-cart',\n Profile = 'ipc-navigation-action-profile',\n Livestream = 'ipc-navigation-action-livestream',\n}\n\nexport interface MobileNavigationProps {\n data: any\n menuData: any\n className?: string\n onPrimaryNavClick?: (_category: any, _position: number) => void\n}\n\nexport interface DesktopNavigationProps {\n data: any\n onNavItemClick?: () => void\n className?: string\n theme?: string\n onPrimaryNavClick?: (_category: any, _position: number) => void\n onSidebarNavClick?: (_series: any, _index: number, _subSubindex?: number) => void\n}\n\ntype Country = {\n id?: number\n name?: string\n code?: string\n}\n\nexport type UserProfile = {\n user_id: string\n email: string\n nick_name?: string\n full_name?: string\n first_name?: string\n last_name?: string\n dob?: string\n gender?: string\n phone_number?: string\n phone_account?: string\n country?: Country\n is_subscribe?: boolean\n avatar?: string\n can_change_password?: boolean\n invitation_code?: string\n phone_carrier?: string\n dob_programmed?: boolean\n activated?: boolean\n registed_at?: number\n activated_at?: number\n token?: string\n}\n"],
|
|
5
|
+
"mappings": "AAiDO,IAAKA,OACVA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,MAAQ,QAHEA,OAAA,IAMAC,OACVA,EAAA,QAAU,yBACVA,EAAA,SAAW,0BACXA,EAAA,SAAW,0BACXA,EAAA,MAAQ,uBAJEA,OAAA,IAOAC,OACVA,EAAA,OAAS,+BACTA,EAAA,KAAO,6BACPA,EAAA,QAAU,gCACVA,EAAA,WAAa,mCAJHA,OAAA",
|
|
6
6
|
"names": ["HeaderNavigationMenu", "HeaderNavigationBlockType", "HeaderNavigationActionBlockType"]
|
|
7
7
|
}
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @description Anker Innovations品牌标识栏组件,用于显示公司Logo和品牌信息
|
|
5
5
|
*/
|
|
6
|
-
declare const Board: ({ href }: {
|
|
6
|
+
declare const Board: ({ href, data, sizeClass }: {
|
|
7
7
|
href?: string;
|
|
8
|
+
data?: any;
|
|
9
|
+
sizeClass?: string;
|
|
8
10
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
9
11
|
export default Board;
|