@anker-in/headless-ui 1.3.29 → 1.3.30
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/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 +6 -0
- package/dist/cjs/biz-components/HeaderNavigation/types.js +1 -1
- package/dist/cjs/biz-components/HeaderNavigation/types.js.map +2 -2
- 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 +6 -0
- package/dist/esm/biz-components/HeaderNavigation/types.js +1 -1
- package/dist/esm/biz-components/HeaderNavigation/types.js.map +2 -2
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";"use client";var Me=Object.create;var Q=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var De=Object.getPrototypeOf,Ee=Object.prototype.hasOwnProperty;var Te=(n,r)=>{for(var i in r)Q(n,i,{get:r[i],enumerable:!0})},ie=(n,r,i,u)=>{if(r&&typeof r=="object"||typeof r=="function")for(let p of Pe(r))!Ee.call(n,p)&&p!==i&&Q(n,p,{get:()=>r[p],enumerable:!(u=Se(r,p))||u.enumerable});return n};var V=(n,r,i)=>(i=n!=null?Me(De(n)):{},ie(r||!n||!n.__esModule?Q(i,"default",{value:n,enumerable:!0}):i,n)),He=n=>ie(Q({},"__esModule",{value:!0}),n);var Ie={};Te(Ie,{default:()=>Re});module.exports=He(Ie);var e=require("react/jsx-runtime"),t=require("react"),l=require("../../components/index.js"),me=require("../../shared/Styles.js"),k=require("../../helpers/utils.js"),_=V(require("./NavProvider.js")),o=require("./types.js"),pe=V(require("jump.js")),X=require("@gsap/react"),Z=require("gsap"),w=require("./withCategory.js"),S=require("./icons/index.js"),fe=V(require("../NavigationSearch/index.js")),be=require("./ResourceSidebarDropdown.js"),ve=require("./MobileResourceSidebarMenu.js"),ge=require("./SidebarDropdown.js"),ee=require("./useScrollLock.js"),he=require("./MulticolDropdown.js"),ye=require("./SupportsDropdown.js"),Ne=require("./MobileSidebarMenu.js"),ke=require("./MobileSupportMenu.js"),xe=require("./MobileMulticolMenu.js"),te=require("./MobileMenuComponents.js"),ae=require("../AiuiProvider/index.js"),Ce=V(require("../../shared/throttle.js"));const le=(0,t.forwardRef)((n,r)=>{const{data:{header:i}={},buildProps:u,event:p,profile:h,theme:s="light",isTop:c=!1,searchResult:D,onSearch:d,isSearching:x,keywords:W,onPrimaryNavClick:C,onSeriesProductClick:b,onSidebarNavClick:G,headerId:H,cartCount:R,menuData:E,render:$,...I}=n,[L,z]=(0,t.useState)(!1),[A,f]=(0,t.useState)(!1),[K,B]=(0,t.useState)(!1),[O,y]=(0,t.useState)(!1),F=(0,t.useRef)(null),M=(0,t.useRef)(null),J=()=>{const N=document?.querySelector("body")?.offsetWidth||0;y(N<=1440)};(0,t.useEffect)(()=>(J(),window.addEventListener("resize",J),()=>{window.removeEventListener("resize",J)}),[]),(0,t.useImperativeHandle)(r,()=>M.current),(0,t.useEffect)(()=>{M.current&&c&&(0,pe.default)(M.current,{duration:0,offset:M.current?.getBoundingClientRect()?.bottom||0})},[c]),(0,t.useEffect)(()=>{if(c){f(!1),B(!1);return}let N=0,P=0,U=0;const a=()=>document?.documentElement?.scrollTop||document?.body?.scrollTop||0,m=a();N=m,f(m>300),B(m>30);const v=(0,Ce.default)(()=>{const g=a(),T=g-N;B(g>30),T>0?(P=0,U+=T,U>=300&&g>300&&f(!0)):T<0&&(U=0,P+=Math.abs(T),P>=300&&(f(!1),P=0)),N=g},100);return window.addEventListener("scroll",v,{passive:!0}),()=>window.removeEventListener("scroll",v)},[c]),(0,t.useEffect)(()=>{p&&(p.search=()=>z(!0))},[p]),(0,X.useGSAP)(()=>{F?.current&&L&&Z.gsap.fromTo(F.current,{height:0},{height:"auto",duration:.3})},[L]),(0,ee.useScrollLock)(L);const ne=(0,t.useMemo)(()=>i?.bar?.actions?.find(N=>N?.blockType===o.HeaderNavigationActionBlockType.Search)?.searchBar?.[0]||{},[i]),q=$?.mobileHeaderNavigation;return(0,e.jsx)(_.default,{buildProps:u,profile:h,isMobile:O,event:p,payloadData:i,onSidebarNavClick:G,onSeriesProductClick:b,cartCount:R,children:(0,e.jsx)("header",{...I,id:H||"header","data-ui-component-id":"HeaderNavigation",className:c?"relative z-[100] bg-white":(0,k.cn)("sticky top-0 z-[100] transition-transform duration-500 ease-in-out",{"translate-y-[-100%]":A}),ref:M,children:(0,e.jsxs)("div",{className:(0,k.cn)("hover:bg-white hover:text-black",s==="light"?"text-black":"text-white",{"!bg-white transition-all duration-500 ease-in-out":!c&&K},{"hover:!text-black":s==="dark","!text-black":!c&&K}),onClick:()=>!c&&B(!0),children:[(0,e.jsx)(se,{data:i,className:"desktop:block hidden !bg-white",theme:s,onNavItemClick:()=>!c&&B(!0),onPrimaryNavClick:C}),q?(0,e.jsx)(q,{className:"desktop:hidden block !bg-white",menuData:E,data:i,onPrimaryNavClick:C}):(0,e.jsx)(ce,{menuData:E,data:i,className:"desktop:hidden block !bg-white",onPrimaryNavClick:C}),L&&(0,e.jsxs)("div",{className:"absolute left-0 top-0 z-[60] flex w-full flex-col bg-black/70",style:{height:`calc(100dvh - ${M?.current?.getBoundingClientRect()?.top}px)`},role:"dialog","aria-modal":"true","aria-label":"Search",children:[(0,e.jsx)("div",{ref:F,className:(0,k.cn)("overflow-y-auto",{}),children:(0,e.jsx)(fe.default,{data:ne,keywords:W,isSearching:x,searchResult:D,onSearch:N=>{d?.(N)},onClose:()=>{d?.(),z(!1)}})}),(0,e.jsx)("div",{className:"flex-1 bg-transparent",onClick:()=>z(!1),role:"button",tabIndex:0,"aria-label":"Close search",onKeyDown:N=>{(N.key==="Enter"||N.key===" "||N.key==="Escape")&&(N.preventDefault(),z(!1))}})]})]})})})}),se=(0,t.forwardRef)((n,r)=>{const{data:i,onNavItemClick:u,className:p,theme:h,onPrimaryNavClick:s}=n,{event:c,profile:D}=(0,_.useNavContext)(),[d,x]=(0,t.useState)(!1),{locale:W="us"}=(0,ae.useAiuiContext)(),C=(0,t.useMemo)(()=>(0,w.WithGroupCategory)(i?.categories?.filter(a=>a?.pcShow)),[i]),[b,G]=(0,t.useState)(null),[H,R]=(0,t.useState)([]),E=(0,t.useRef)(null),[$,I]=(0,t.useState)(!1),L=(0,t.useRef)(null),z=(0,t.useRef)(null),A=(0,t.useRef)(C.map(a=>Array(a?.length||0).fill(null)));(0,t.useEffect)(()=>{C?.length&&R(C?.map((a,m)=>a?.map((v,g)=>({groupIndex:m,index:g,open:!1}))))},[C]);const f=(0,t.useMemo)(()=>{let a=null;for(const m of H){for(const v of m)if(v.open){a=v;break}if(a)break}return a},[H]);(0,ee.useScrollLock)(!!f?.open||$);const K=(a,m,v)=>{I(!1);const g=C[m][v];if(g?.components?.[0]?.blockType===o.HeaderNavigationBlockType.Links)g?.components?.[0]?.url&&window.open(g?.components?.[0]?.url,g?.components?.[0]?.target??"_blank");else{const T=C?.flat()||[],j=T?.findIndex(oe=>oe?.id===C[m][v]?.id);a.stopPropagation(),u?.(),s?.(T[j],j),G(g),R(oe=>oe.map(we=>we.map(Y=>Y.groupIndex===m&&Y.index===v?{...Y,open:!Y.open}:{...Y,open:!1})))}},B=(a,m,v)=>{a.key==="Enter"||a.key===" "?(a.preventDefault(),K(a,m,v)):a.key==="Escape"&&f?.groupIndex===m&&f?.index===v&&(a.preventDefault(),O())},O=()=>{R(a=>a.map(m=>m.map(v=>({...v,open:!1}))))},y=(0,t.useMemo)(()=>{if(b)return b?.components?.[0]?.blockType},[b]),F=(0,w.WithSidebar)(ge.SidebarDropdown,b),M=(0,w.WithResource)(be.ResourceSidebarDropdown,b),J=(0,w.WithMulticol)(he.MulticolDropdown,b),ne=(0,w.WithSupports)(ye.SupportsDropdown,{categoriesItem:b,currentNavItemRef:A.current?.[f?.groupIndex||0]?.[f?.index||0]}),q=(0,t.useMemo)(()=>{switch(y){case o.HeaderNavigationBlockType.Sidebar:return(0,e.jsx)(F,{});case o.HeaderNavigationBlockType.Resource:return(0,e.jsx)(M,{});case o.HeaderNavigationBlockType.Supports:return(0,e.jsx)(ne,{});case o.HeaderNavigationBlockType.Multicol:return(0,e.jsx)(J,{});default:return null}},[y,b]),N=(0,t.useMemo)(()=>i?.bar?.actions?.filter(a=>a?.pcShow),[i]),P=(0,t.useMemo)(()=>N?.find(a=>a?.blockType===o.HeaderNavigationActionBlockType.Profile),[N]),U=(0,t.useCallback)(()=>{I(a=>!a)},[]);return(0,t.useEffect)(()=>{if(E?.current){const a=E.current;return a.addEventListener("click",U),()=>{a.removeEventListener("click",U)}}},[U]),(0,X.useGSAP)(()=>{f?.open&&Z.gsap.fromTo(z?.current,{height:0},{height:"auto"})},[f?.open]),(0,e.jsxs)(l.Container,{className:(0,k.cn)("relative h-[96px]",p),children:[(0,e.jsxs)("div",{ref:L,onClick:O,className:"flex h-full flex-col justify-end gap-4",children:[(0,e.jsxs)("div",{className:"flex items-center justify-between",children:[(0,e.jsx)(ue,{}),(0,e.jsx)(re,{ref:E,actions:N,activeStatus:$})]}),(0,e.jsx)("nav",{className:"flex justify-between",role:"navigation","aria-label":"Primary navigation",children:C?.map((a,m)=>(0,e.jsx)("div",{className:"flex gap-3",children:a?.map((v,g)=>{const T=f?.groupIndex===m&&f?.index===g;return(0,e.jsx)("div",{ref:j=>{A.current[m][g]=j},className:"group",children:(0,e.jsxs)("div",{className:"relative",children:[(0,e.jsxs)("button",{className:"flex cursor-pointer items-center gap-1 border-0 bg-transparent pb-4",onClick:j=>K(j,m,g),onKeyDown:j=>B(j,m,g),"aria-expanded":T,"aria-haspopup":"true","aria-label":v.text,children:[(0,e.jsx)(l.Text,{html:v.text,className:"text-sm font-bold leading-[1.4]"}),(0,e.jsx)(S.DownArrow,{className:(0,k.cn)("size-4 opacity-0 transition-opacity duration-500 group-hover:opacity-100",{"rotate-180":f?.groupIndex===m&&f?.index===g,"opacity-100":d&&f?.groupIndex===m&&f?.index===g,invisible:!v?.components?.length||v?.components?.[0]?.blockType===o.HeaderNavigationBlockType.Links})})]}),(0,e.jsx)("div",{className:(0,k.cn)("absolute bottom-0 left-0 h-[2px] w-0 transition-all duration-500",{"w-[calc(100%-20px)]":T},h==="dark"?"bg-white":"bg-[#080A0F]"),"aria-hidden":"true"})]})},v.id)})},`groupCategory-${m}`))})]}),(0,e.jsxs)("div",{role:"menu","aria-hidden":!(f?.open&&b),className:(0,k.cn)("absolute left-0 top-full z-[999] flex w-full flex-col overflow-hidden border-t border-b-[#E4E5E6] bg-black/70 text-black",{hidden:!(f?.open&&b)}),onMouseEnter:()=>x(!0),onMouseLeave:()=>x(!1),style:{height:`calc(100dvh - ${L?.current?.getBoundingClientRect()?.bottom}px)`},children:[(0,e.jsx)("div",{ref:z,className:(0,k.cn)("relative z-50",{"overflow-hidden":y!==o.HeaderNavigationBlockType.Supports}),children:q}),(0,e.jsx)("div",{className:"flex-1 bg-transparent",onClick:O,role:"button",tabIndex:0,"aria-label":"Close menu",onKeyDown:a=>{(a.key==="Enter"||a.key===" "||a.key==="Escape")&&(a.preventDefault(),O())}})]}),$&&(0,e.jsxs)("div",{className:"absolute left-0 top-full z-[999] flex h-dvh w-full bg-black/70",role:"dialog","aria-modal":"true","aria-label":"User profile menu",children:[(0,e.jsx)("div",{className:"rounded-box absolute w-[272px] overflow-hidden bg-white p-4",style:{right:`calc(100% - ${E?.current?.getBoundingClientRect()?.right}px)`,top:"-36px"},children:D?.email?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(l.Text,{html:D?.nick_name||P?.welcome,className:"text-sm font-bold"}),(0,e.jsx)("div",{className:"mt-2 h-px bg-[#D9D9D9]","aria-hidden":"true"}),(0,e.jsx)("nav",{className:"mt-2",role:"navigation","aria-label":"Profile navigation",children:P?.profiles?.map(a=>(0,e.jsx)(te.MenuItem,{className:"py-2",label:a?.title,href:(0,k.getLocalizedPath)(a?.url,W)},a.id))})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(S.Polygon,{className:"absolute -top-2 right-[46px] z-30 text-white","aria-hidden":"true"}),(0,e.jsx)(l.Text,{html:P?.benefits_title,className:"text-sm font-bold leading-[1.4]"}),(0,e.jsx)("div",{className:"mt-2 flex flex-col gap-1",children:P?.benefits?.map(a=>(0,e.jsxs)("div",{className:"flex items-center gap-[6px]",children:[(0,e.jsx)(l.Picture,{source:a.benefitIcon?.url,className:"size-4",alt:a.benefit,width:16,height:16}),(0,e.jsx)(l.Text,{html:a.benefit,className:"text-sm font-bold leading-[1.4]"})]},a.id))}),(0,e.jsxs)("div",{className:"mt-4 flex items-center gap-2",children:[(0,e.jsx)(l.Button,{variant:"secondary",size:"lg",onClick:()=>c?.join?.(),children:(0,e.jsx)(l.Text,{html:P?.primaryButton||"Join Now",className:"font-bold"})}),(0,e.jsx)(l.Button,{variant:"primary",size:"lg",onClick:()=>c?.login?.(),children:(0,e.jsx)(l.Text,{html:P?.secondaryButton||"Log In",className:"font-bold"})})]})]})}),(0,e.jsx)("div",{className:"flex-1 bg-transparent",onClick:()=>I(!1),role:"button",tabIndex:0,"aria-label":"Close profile menu",onKeyDown:a=>{(a.key==="Enter"||a.key===" "||a.key==="Escape")&&(a.preventDefault(),I(!1))}})]})]})}),ce=(0,t.forwardRef)(({data:n,menuData:r,className:i,onPrimaryNavClick:u},p)=>{const h=(0,t.useMemo)(()=>(0,w.WithGroupCategory)(n?.categories?.filter(y=>y?.mobileShow)),[n]),{currentMenu:s,setCurrentMenu:c,subSubCategory:D}=(0,_.useNavContext)(),[d,x]=(0,t.useState)(!1),[W,C]=(0,t.useState)(0),[b,G]=(0,t.useState)(null),H=(0,t.useRef)(null);(0,t.useEffect)(()=>{if(H?.current&&d){const y=H?.current?.getBoundingClientRect();C(window?.innerHeight-(y?.bottom||0))}},[d]),(0,X.useGSAP)(()=>{Z.gsap.fromTo(H.current,{height:0},{height:W,duration:.3})},[W]),(0,ee.useScrollLock)(d);const R=(0,t.useMemo)(()=>b?.components?.[0]?.blockType,[b]),E=(0,w.WithSupports)(ke.MobileSupportMenu,{categoriesItem:b}),$=(0,w.WithSidebar)(Ne.MobileSidebarMenu,b),I=(0,w.WithResource)(ve.MobileResourceSidebarMenu,b),L=(0,w.WithMulticol)(xe.MobileMulticolMenu,b),z=(0,t.useMemo)(()=>{switch(R){case o.HeaderNavigationBlockType.Sidebar:return(0,e.jsx)($,{});case o.HeaderNavigationBlockType.Resource:return(0,e.jsx)(I,{});case o.HeaderNavigationBlockType.Supports:return(0,e.jsx)(E,{});case o.HeaderNavigationBlockType.Multicol:return(0,e.jsx)(L,{});default:return null}},[R,b,E]),A=(0,t.useCallback)(()=>{x(!1),C(0),c&&c(o.HeaderNavigationMenu.Primary)},[x,C,c]),f=(0,t.useMemo)(()=>n?.bar?.actions?.filter(y=>y?.mobileShow&&y?.blockType!==o.HeaderNavigationActionBlockType.Profile),[n]),K=(0,t.useMemo)(()=>n?.bar?.actions?.find(y=>y?.mobileShow&&y?.blockType===o.HeaderNavigationActionBlockType.Profile)||{},[n]),B=(0,t.useMemo)(()=>{switch(s){case o.HeaderNavigationMenu.Primary:return(0,e.jsx)(Be,{actions:f,menuOpen:d,onMenuOpenClose:()=>{x(!1),C(0)},onMenuOpenClick:()=>x(!0)});case o.HeaderNavigationMenu.Secondary:return(0,e.jsx)(de,{title:b?.text,onMenuOpenClose:A,onMenuBackClick:()=>c?.(o.HeaderNavigationMenu.Primary)});case o.HeaderNavigationMenu.Third:return(0,e.jsx)(de,{title:D?.label,onMenuOpenClose:A,onMenuBackClick:()=>c?.(o.HeaderNavigationMenu.Secondary)});default:return null}},[d,s,c,b,f,D,A]),O=(0,t.useCallback)((y,F)=>{const M=Array.isArray(h)?Array.isArray(h[y])?h[y][F]:{}:{};G(M),M?.components?.[0]?.blockType===o.HeaderNavigationBlockType.Links?M?.components?.[0]?.url&&window.open(M?.components?.[0]?.url,M?.components?.[0]?.target??"_blank"):c?.(o.HeaderNavigationMenu.Secondary)},[h,c]);return(0,e.jsxs)(l.Container,{className:(0,k.cn)("relative h-[52px]",i),children:[B,d&&(0,e.jsxs)("nav",{ref:H,className:"absolute left-0 top-full z-[999] w-full overflow-y-auto border-t border-[#E4E5E6] bg-white text-black",style:{height:W},role:"navigation","aria-label":"Mobile navigation menu",children:[s===o.HeaderNavigationMenu.Primary&&r?(0,e.jsx)("div",{className:"pt-4",children:(0,e.jsx)(l.BrandStrip,{data:r})}):null,s===o.HeaderNavigationMenu.Primary?(0,e.jsx)(Le,{categories:h,onPrimaryMenuClick:O,onPrimaryNavClick:u,profileAction:K}):z]})]})}),Le=({categories:n,onPrimaryMenuClick:r,profileAction:i,onPrimaryNavClick:u})=>(0,e.jsxs)("div",{className:"flex h-full flex-col justify-between",children:[(0,e.jsx)("div",{className:"tablet:px-8 laptop:px-16 p-4",children:n?.map((p,h)=>(0,e.jsxs)("div",{className:"",children:[(0,e.jsx)("div",{className:(0,k.cn)("my-2 h-px w-full bg-[#E5E5E7]")}),p?.map((s,c)=>(0,e.jsx)(te.MenuItem,{label:s.text,onClick:()=>{const d=(n?.flat()||[])?.findIndex(x=>x?.id===n[h][c]?.id);r(h,c),u?.(s,d)},icon:s.components?.[0]?.icon},s.id))]},`groupCategory-${h}`))}),(0,e.jsx)(ze,{profileAction:i})]}),ze=({profileAction:n})=>{const[r,i]=(0,t.useState)(!1),{profile:u,event:p}=(0,_.useNavContext)(),{locale:h="us"}=(0,ae.useAiuiContext)();return(0,e.jsxs)("div",{className:(0,k.cn)("tablet:px-8 laptop:px-16 bg-[#F5F5F7] px-4 py-6",{"p-4":r}),children:[(0,e.jsxs)("button",{className:"flex w-full cursor-pointer items-center justify-between border-0 bg-transparent",onClick:()=>i(!r),"aria-expanded":r,"aria-label":u?.nick_name||n?.welcome,children:[(0,e.jsxs)("div",{className:"flex items-center gap-[14px]",children:[(0,e.jsx)("div",{className:"flex size-[40px] shrink-0 items-center justify-center rounded-full bg-white",children:(0,e.jsx)(S.User,{"aria-hidden":"true"})}),(0,e.jsx)(l.Text,{html:u?.nick_name||n?.welcome,className:"text-base font-bold leading-[1.4]"})]}),!u?.email&&(0,e.jsx)(S.DownArrow,{"aria-hidden":"true",className:(0,k.cn)("laptop:size-4 size-5",{"rotate-180":r})})]}),u?.email&&(0,e.jsx)("nav",{className:"mt-4",role:"navigation","aria-label":"Profile menu",children:n?.profiles?.map(s=>(0,e.jsx)(te.MenuItem,{label:s?.title,href:(0,k.getLocalizedPath)(s?.url,h)},s.id))}),r&&!u?.email&&(0,e.jsxs)("div",{className:"mt-4",children:[(0,e.jsx)(l.Text,{html:n?.benefits_title,className:"text-sm font-bold leading-[1.4]"}),(0,e.jsx)("div",{className:"mt-2 flex flex-col gap-1",children:n?.benefits?.map(s=>(0,e.jsxs)("div",{className:"flex items-center gap-[6px]",children:[(0,e.jsx)(l.Picture,{source:s.benefitIcon?.url,className:"size-4",alt:s.benefit,width:16,height:16}),(0,e.jsx)(l.Text,{html:s.benefit,className:"text-sm font-bold leading-[1.4]"})]},s.id))})]}),!u?.email&&(0,e.jsxs)("div",{className:"mt-4 flex items-center gap-3",children:[(0,e.jsx)(l.Button,{className:"tablet:flex-none flex-1",variant:"secondary",size:"base",onClick:()=>p?.join?.(),children:(0,e.jsx)(l.Text,{html:n?.primaryButton||"Join Now",className:"text-sm font-bold leading-[1.4]"})}),(0,e.jsx)(l.Button,{className:"tablet:flex-none flex-1",variant:"primary",size:"base",onClick:()=>p?.login?.(),children:(0,e.jsx)(l.Text,{html:n?.secondaryButton||"Log In",className:"text-sm font-bold leading-[1.4]"})})]})]})},Be=({menuOpen:n,onMenuOpenClose:r,onMenuOpenClick:i,actions:u})=>(0,e.jsxs)("div",{className:"flex h-full items-center justify-between gap-4",children:[(0,e.jsx)(ue,{}),(0,e.jsxs)("div",{className:"desktop:gap-6 flex items-center gap-4",children:[(0,e.jsx)(re,{actions:u}),n?(0,e.jsx)("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>r(),"aria-label":"Close menu","aria-expanded":"true",children:(0,e.jsx)(S.Close,{className:"size-5","aria-hidden":"true"})}):(0,e.jsx)("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>i(),"aria-label":"Open menu","aria-expanded":"false","aria-haspopup":"true",children:(0,e.jsx)(S.Menu,{className:"size-5","aria-hidden":"true"})})]})]}),ue=()=>{const{payloadData:n,isMobile:r}=(0,_.useNavContext)(),{locale:i="us"}=(0,ae.useAiuiContext)();return(0,e.jsx)("a",{href:(0,k.getLocalizedPath)("/",i),className:"hover:text-brand-0 [&>svg]:w-full","aria-label":"Home",dangerouslySetInnerHTML:{__html:r?n?.bar?.mobileLogo:n?.bar?.desktopLogo}})},re=(0,t.forwardRef)(({actions:n,activeStatus:r=!1},i)=>{const{event:u,cartCount:p}=(0,_.useNavContext)(),[h,s]=(0,t.useState)(null),c=d=>{switch(d){case o.HeaderNavigationActionBlockType.Search:return"Search";case o.HeaderNavigationActionBlockType.Cart:return`Shopping cart${p>0?` (${p} items)`:""}`;case o.HeaderNavigationActionBlockType.Profile:return"User profile";case o.HeaderNavigationActionBlockType.Livestream:return"Livestream";default:return"Action"}},D=(0,t.useCallback)((d,x)=>{switch(s(x),d?.blockType){case o.HeaderNavigationActionBlockType.Search:u?.search?.();break;case o.HeaderNavigationActionBlockType.Cart:u?.cart?.();break;case o.HeaderNavigationActionBlockType.Profile:u?.profile?.();break;case o.HeaderNavigationActionBlockType.Livestream:u?.livestream?.();break;default:return()=>{}}},[u]);return(0,e.jsx)("div",{className:"desktop:gap-6 flex items-center gap-4",children:Array.isArray(n)&&n?.map((d,x)=>(0,e.jsxs)("button",{className:"relative cursor-pointer border-0 bg-transparent p-0",ref:d.blockType===o.HeaderNavigationActionBlockType.Profile?i:null,onClick:()=>D(d,x),"aria-label":c(d.blockType),"aria-pressed":r&&h===x,children:[(0,e.jsx)(l.Text,{html:d.icon,className:(0,k.cn)("size-5",{"text-brand-0":r&&h===x}),"aria-hidden":"true"}),d.blockType===o.HeaderNavigationActionBlockType.Cart&&p>0&&(0,e.jsx)("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]","aria-hidden":"true",children:(0,e.jsx)(l.Text,{html:p?.toString(),className:"text-sm font-bold leading-[1.2] text-white"})})]},d.id))})}),de=({title:n,onMenuOpenClose:r,onMenuBackClick:i})=>(0,e.jsxs)("div",{className:"flex h-full items-center gap-3",children:[(0,e.jsx)("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>i(),"aria-label":"Back to previous menu",children:(0,e.jsx)(S.LeftArrow,{className:"size-5","aria-hidden":"true"})}),(0,e.jsx)(l.Text,{html:n,className:"flex-1 text-center text-base font-bold leading-[1.4]"}),(0,e.jsx)("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>r(),"aria-label":"Close menu",children:(0,e.jsx)(S.Close,{className:"size-5","aria-hidden":"true"})})]});ce.displayName="MobileNavigation",re.displayName="Actions",le.displayName="HeaderNavigation",se.displayName="DesktopNavigation";var Re=(0,me.withLayout)(le);
|
|
1
|
+
"use strict";"use client";var Me=Object.create;var Q=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var De=Object.getPrototypeOf,Ee=Object.prototype.hasOwnProperty;var Te=(o,r)=>{for(var i in r)Q(o,i,{get:r[i],enumerable:!0})},ie=(o,r,i,c)=>{if(r&&typeof r=="object"||typeof r=="function")for(let u of Pe(r))!Ee.call(o,u)&&u!==i&&Q(o,u,{get:()=>r[u],enumerable:!(c=Se(r,u))||c.enumerable});return o};var V=(o,r,i)=>(i=o!=null?Me(De(o)):{},ie(r||!o||!o.__esModule?Q(i,"default",{value:o,enumerable:!0}):i,o)),He=o=>ie(Q({},"__esModule",{value:!0}),o);var Ie={};Te(Ie,{default:()=>Re});module.exports=He(Ie);var e=require("react/jsx-runtime"),t=require("react"),l=require("../../components/index.js"),me=require("../../shared/Styles.js"),h=require("../../helpers/utils.js"),W=V(require("./NavProvider.js")),n=require("./types.js"),pe=V(require("jump.js")),X=require("@gsap/react"),Z=require("gsap"),w=require("./withCategory.js"),S=require("./icons/index.js"),fe=V(require("../NavigationSearch/index.js")),be=require("./ResourceSidebarDropdown.js"),ve=require("./MobileResourceSidebarMenu.js"),ge=require("./SidebarDropdown.js"),ee=require("./useScrollLock.js"),he=require("./MulticolDropdown.js"),ye=require("./SupportsDropdown.js"),Ne=require("./MobileSidebarMenu.js"),ke=require("./MobileSupportMenu.js"),xe=require("./MobileMulticolMenu.js"),te=require("./MobileMenuComponents.js"),ae=require("../AiuiProvider/index.js"),Ce=V(require("../../shared/throttle.js"));const le=(0,t.forwardRef)((o,r)=>{const{data:{header:i}={},buildProps:c,event:u,profile:P,theme:s="light",isTop:m=!1,searchResult:k,onSearch:v,isSearching:g,keywords:O,onPrimaryNavClick:x,onSeriesProductClick:y,onSidebarNavClick:D,onMobileMenuToggle:F,headerId:H,cartCount:B,menuData:R,render:j,...U}=o,[I,A]=(0,t.useState)(!1),[f,L]=(0,t.useState)(!1),[G,T]=(0,t.useState)(!1),[$,C]=(0,t.useState)(!1),K=(0,t.useRef)(null),M=(0,t.useRef)(null),Y=()=>{const b=document?.querySelector("body")?.offsetWidth||0;C(b<=1440)};(0,t.useEffect)(()=>(Y(),window.addEventListener("resize",Y),()=>{window.removeEventListener("resize",Y)}),[]),(0,t.useImperativeHandle)(r,()=>M.current),(0,t.useEffect)(()=>{M.current&&m&&(0,pe.default)(M.current,{duration:0,offset:M.current?.getBoundingClientRect()?.bottom||0})},[m]),(0,t.useEffect)(()=>{if(m){L(!1),T(!1);return}let b=0,_=0,a=0;const d=()=>document?.documentElement?.scrollTop||document?.body?.scrollTop||0,p=d();b=p,L(p>300),T(p>30);const N=(0,Ce.default)(()=>{const z=d(),E=z-b;T(z>30),E>0?(_=0,a+=E,a>=300&&z>300&&L(!0)):E<0&&(a=0,_+=Math.abs(E),_>=300&&(L(!1),_=0)),b=z},100);return window.addEventListener("scroll",N,{passive:!0}),()=>window.removeEventListener("scroll",N)},[m]),(0,t.useEffect)(()=>{u&&(u.search=()=>A(!0))},[u]),(0,X.useGSAP)(()=>{K?.current&&I&&Z.gsap.fromTo(K.current,{height:0},{height:"auto",duration:.3})},[I]),(0,ee.useScrollLock)(I);const oe=(0,t.useMemo)(()=>i?.bar?.actions?.find(b=>b?.blockType===n.HeaderNavigationActionBlockType.Search)?.searchBar?.[0]||{},[i]),J=j?.mobileHeaderNavigation;return(0,e.jsx)(W.default,{buildProps:c,profile:P,isMobile:$,event:u,payloadData:i,onSidebarNavClick:D,onSeriesProductClick:y,cartCount:B,children:(0,e.jsx)("header",{...U,id:H||"header","data-ui-component-id":"HeaderNavigation",className:m?"relative z-[100] bg-white":(0,h.cn)("sticky top-0 z-[100] transition-transform duration-500 ease-in-out",{"translate-y-[-100%]":f}),ref:M,children:(0,e.jsxs)("div",{className:(0,h.cn)("hover:bg-white hover:text-black",s==="light"?"text-black":"text-white",{"!bg-white transition-all duration-500 ease-in-out":!m&&G},{"hover:!text-black":s==="dark","!text-black":!m&&G}),onClick:()=>!m&&T(!0),children:[(0,e.jsx)(se,{data:i,className:"desktop:block hidden !bg-white",theme:s,onNavItemClick:()=>!m&&T(!0),onPrimaryNavClick:x}),J?(0,e.jsx)(J,{className:"desktop:hidden block !bg-white",menuData:R,data:i,onPrimaryNavClick:x}):(0,e.jsx)(ce,{menuData:R,data:i,className:"desktop:hidden block !bg-white",onPrimaryNavClick:x,onMobileMenuToggle:F}),I&&(0,e.jsxs)("div",{className:"absolute left-0 top-0 z-[60] flex w-full flex-col bg-black/70",style:{height:`calc(100dvh - ${M?.current?.getBoundingClientRect()?.top}px)`},role:"dialog","aria-modal":"true","aria-label":"Search",children:[(0,e.jsx)("div",{ref:K,className:(0,h.cn)("overflow-y-auto",{}),children:(0,e.jsx)(fe.default,{data:oe,keywords:O,isSearching:g,searchResult:k,onSearch:b=>{v?.(b)},onClose:()=>{v?.(),A(!1)}})}),(0,e.jsx)("div",{className:"flex-1 bg-transparent",onClick:()=>A(!1),role:"button",tabIndex:0,"aria-label":"Close search",onKeyDown:b=>{(b.key==="Enter"||b.key===" "||b.key==="Escape")&&(b.preventDefault(),A(!1))}})]})]})})})}),se=(0,t.forwardRef)((o,r)=>{const{data:i,onNavItemClick:c,className:u,theme:P,onPrimaryNavClick:s}=o,{event:m,profile:k}=(0,W.useNavContext)(),[v,g]=(0,t.useState)(!1),{locale:O="us"}=(0,ae.useAiuiContext)(),x=(0,t.useMemo)(()=>(0,w.WithGroupCategory)(i?.categories?.filter(a=>a?.pcShow)),[i]),[y,D]=(0,t.useState)(null),[F,H]=(0,t.useState)([]),B=(0,t.useRef)(null),[R,j]=(0,t.useState)(!1),U=(0,t.useRef)(null),I=(0,t.useRef)(null),A=(0,t.useRef)(x.map(a=>Array(a?.length||0).fill(null)));(0,t.useEffect)(()=>{x?.length&&H(x?.map((a,d)=>a?.map((p,N)=>({groupIndex:d,index:N,open:!1}))))},[x]);const f=(0,t.useMemo)(()=>{let a=null;for(const d of F){for(const p of d)if(p.open){a=p;break}if(a)break}return a},[F]);(0,ee.useScrollLock)(!!f?.open||R);const L=(a,d,p)=>{j(!1);const N=x[d][p];if(N?.components?.[0]?.blockType===n.HeaderNavigationBlockType.Links)N?.components?.[0]?.url&&window.open(N?.components?.[0]?.url,N?.components?.[0]?.target??"_blank");else{const z=x?.flat()||[],E=z?.findIndex(ne=>ne?.id===x[d][p]?.id);a.stopPropagation(),c?.(),s?.(z[E],E),D(N),H(ne=>ne.map(we=>we.map(q=>q.groupIndex===d&&q.index===p?{...q,open:!q.open}:{...q,open:!1})))}},G=(a,d,p)=>{a.key==="Enter"||a.key===" "?(a.preventDefault(),L(a,d,p)):a.key==="Escape"&&f?.groupIndex===d&&f?.index===p&&(a.preventDefault(),T())},T=()=>{H(a=>a.map(d=>d.map(p=>({...p,open:!1}))))},$=(0,t.useMemo)(()=>{if(y)return y?.components?.[0]?.blockType},[y]),C=(0,w.WithSidebar)(ge.SidebarDropdown,y),K=(0,w.WithResource)(be.ResourceSidebarDropdown,y),M=(0,w.WithMulticol)(he.MulticolDropdown,y),Y=(0,w.WithSupports)(ye.SupportsDropdown,{categoriesItem:y,currentNavItemRef:A.current?.[f?.groupIndex||0]?.[f?.index||0]}),oe=(0,t.useMemo)(()=>{switch($){case n.HeaderNavigationBlockType.Sidebar:return(0,e.jsx)(C,{});case n.HeaderNavigationBlockType.Resource:return(0,e.jsx)(K,{});case n.HeaderNavigationBlockType.Supports:return(0,e.jsx)(Y,{});case n.HeaderNavigationBlockType.Multicol:return(0,e.jsx)(M,{});default:return null}},[$,y]),J=(0,t.useMemo)(()=>i?.bar?.actions?.filter(a=>a?.pcShow),[i]),b=(0,t.useMemo)(()=>J?.find(a=>a?.blockType===n.HeaderNavigationActionBlockType.Profile),[J]),_=(0,t.useCallback)(()=>{j(a=>!a)},[]);return(0,t.useEffect)(()=>{if(B?.current){const a=B.current;return a.addEventListener("click",_),()=>{a.removeEventListener("click",_)}}},[_]),(0,X.useGSAP)(()=>{f?.open&&Z.gsap.fromTo(I?.current,{height:0},{height:"auto"})},[f?.open]),(0,e.jsxs)(l.Container,{className:(0,h.cn)("relative h-[96px]",u),children:[(0,e.jsxs)("div",{ref:U,onClick:T,className:"flex h-full flex-col justify-end gap-4",children:[(0,e.jsxs)("div",{className:"flex items-center justify-between",children:[(0,e.jsx)(ue,{}),(0,e.jsx)(re,{ref:B,actions:J,activeStatus:R})]}),(0,e.jsx)("nav",{className:"flex justify-between",role:"navigation","aria-label":"Primary navigation",children:x?.map((a,d)=>(0,e.jsx)("div",{className:"flex gap-3",children:a?.map((p,N)=>{const z=f?.groupIndex===d&&f?.index===N;return(0,e.jsx)("div",{ref:E=>{A.current[d][N]=E},className:"group",children:(0,e.jsxs)("div",{className:"relative",children:[(0,e.jsxs)("button",{className:"flex cursor-pointer items-center gap-1 border-0 bg-transparent pb-4",onClick:E=>L(E,d,N),onKeyDown:E=>G(E,d,N),"aria-expanded":z,"aria-haspopup":"true","aria-label":p.text,children:[(0,e.jsx)(l.Text,{html:p.text,className:"text-sm font-bold leading-[1.4]"}),(0,e.jsx)(S.DownArrow,{className:(0,h.cn)("size-4 opacity-0 transition-opacity duration-500 group-hover:opacity-100",{"rotate-180":f?.groupIndex===d&&f?.index===N,"opacity-100":v&&f?.groupIndex===d&&f?.index===N,invisible:!p?.components?.length||p?.components?.[0]?.blockType===n.HeaderNavigationBlockType.Links})})]}),(0,e.jsx)("div",{className:(0,h.cn)("absolute bottom-0 left-0 h-[2px] w-0 transition-all duration-500",{"w-[calc(100%-20px)]":z},P==="dark"?"bg-white":"bg-[#080A0F]"),"aria-hidden":"true"})]})},p.id)})},`groupCategory-${d}`))})]}),(0,e.jsxs)("div",{role:"menu","aria-hidden":!(f?.open&&y),className:(0,h.cn)("absolute left-0 top-full z-[999] flex w-full flex-col overflow-hidden border-t border-b-[#E4E5E6] bg-black/70 text-black",{hidden:!(f?.open&&y)}),onMouseEnter:()=>g(!0),onMouseLeave:()=>g(!1),style:{height:`calc(100dvh - ${U?.current?.getBoundingClientRect()?.bottom}px)`},children:[(0,e.jsx)("div",{ref:I,className:(0,h.cn)("relative z-50",{"overflow-hidden":$!==n.HeaderNavigationBlockType.Supports}),children:oe}),(0,e.jsx)("div",{className:"flex-1 bg-transparent",onClick:T,role:"button",tabIndex:0,"aria-label":"Close menu",onKeyDown:a=>{(a.key==="Enter"||a.key===" "||a.key==="Escape")&&(a.preventDefault(),T())}})]}),R&&(0,e.jsxs)("div",{className:"absolute left-0 top-full z-[999] flex h-dvh w-full bg-black/70",role:"dialog","aria-modal":"true","aria-label":"User profile menu",children:[(0,e.jsx)("div",{className:"rounded-box absolute w-[272px] overflow-hidden bg-white p-4",style:{right:`calc(100% - ${B?.current?.getBoundingClientRect()?.right}px)`,top:"-36px"},children:k?.email?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(l.Text,{html:k?.nick_name||b?.welcome,className:"text-sm font-bold"}),(0,e.jsx)("div",{className:"mt-2 h-px bg-[#D9D9D9]","aria-hidden":"true"}),(0,e.jsx)("nav",{className:"mt-2",role:"navigation","aria-label":"Profile navigation",children:b?.profiles?.map(a=>(0,e.jsx)(te.MenuItem,{className:"py-2",label:a?.title,href:(0,h.getLocalizedPath)(a?.url,O)},a.id))})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(S.Polygon,{className:"absolute -top-2 right-[46px] z-30 text-white","aria-hidden":"true"}),(0,e.jsx)(l.Text,{html:b?.benefits_title,className:"text-sm font-bold leading-[1.4]"}),(0,e.jsx)("div",{className:"mt-2 flex flex-col gap-1",children:b?.benefits?.map(a=>(0,e.jsxs)("div",{className:"flex items-center gap-[6px]",children:[(0,e.jsx)(l.Picture,{source:a.benefitIcon?.url,className:"size-4",alt:a.benefit,width:16,height:16}),(0,e.jsx)(l.Text,{html:a.benefit,className:"text-sm font-bold leading-[1.4]"})]},a.id))}),(0,e.jsxs)("div",{className:"mt-4 flex items-center gap-2",children:[(0,e.jsx)(l.Button,{variant:"secondary",size:"lg",onClick:()=>m?.join?.(),children:(0,e.jsx)(l.Text,{html:b?.primaryButton||"Join Now",className:"font-bold"})}),(0,e.jsx)(l.Button,{variant:"primary",size:"lg",onClick:()=>m?.login?.(),children:(0,e.jsx)(l.Text,{html:b?.secondaryButton||"Log In",className:"font-bold"})})]})]})}),(0,e.jsx)("div",{className:"flex-1 bg-transparent",onClick:()=>j(!1),role:"button",tabIndex:0,"aria-label":"Close profile menu",onKeyDown:a=>{(a.key==="Enter"||a.key===" "||a.key==="Escape")&&(a.preventDefault(),j(!1))}})]})]})}),ce=(0,t.forwardRef)(({data:o,menuData:r,className:i,onPrimaryNavClick:c,onMobileMenuToggle:u},P)=>{const s=(0,t.useMemo)(()=>(0,w.WithGroupCategory)(o?.categories?.filter(C=>C?.mobileShow)),[o]),{currentMenu:m,setCurrentMenu:k,subSubCategory:v}=(0,W.useNavContext)(),[g,O]=(0,t.useState)(!1),[x,y]=(0,t.useState)(0),[D,F]=(0,t.useState)(null),H=(0,t.useRef)(null);(0,t.useEffect)(()=>{if(H?.current&&g){const C=H?.current?.getBoundingClientRect();y(window?.innerHeight-(C?.bottom||0))}u?.({open:g})},[g,u]),(0,X.useGSAP)(()=>{Z.gsap.fromTo(H.current,{height:0},{height:x,duration:.3})},[x]),(0,ee.useScrollLock)(g);const B=(0,t.useMemo)(()=>D?.components?.[0]?.blockType,[D]),R=(0,w.WithSupports)(ke.MobileSupportMenu,{categoriesItem:D}),j=(0,w.WithSidebar)(Ne.MobileSidebarMenu,D),U=(0,w.WithResource)(ve.MobileResourceSidebarMenu,D),I=(0,w.WithMulticol)(xe.MobileMulticolMenu,D),A=(0,t.useMemo)(()=>{switch(B){case n.HeaderNavigationBlockType.Sidebar:return(0,e.jsx)(j,{});case n.HeaderNavigationBlockType.Resource:return(0,e.jsx)(U,{});case n.HeaderNavigationBlockType.Supports:return(0,e.jsx)(R,{});case n.HeaderNavigationBlockType.Multicol:return(0,e.jsx)(I,{});default:return null}},[B,D,R]),f=(0,t.useCallback)(()=>{O(!1),y(0),k&&k(n.HeaderNavigationMenu.Primary)},[O,y,k]),L=(0,t.useMemo)(()=>o?.bar?.actions?.filter(C=>C?.mobileShow&&C?.blockType!==n.HeaderNavigationActionBlockType.Profile),[o]),G=(0,t.useMemo)(()=>o?.bar?.actions?.find(C=>C?.mobileShow&&C?.blockType===n.HeaderNavigationActionBlockType.Profile)||{},[o]),T=(0,t.useMemo)(()=>{switch(m){case n.HeaderNavigationMenu.Primary:return(0,e.jsx)(Be,{actions:L,menuOpen:g,onMenuOpenClose:()=>{O(!1),y(0)},onMenuOpenClick:()=>O(!0)});case n.HeaderNavigationMenu.Secondary:return(0,e.jsx)(de,{title:D?.text,onMenuOpenClose:f,onMenuBackClick:()=>k?.(n.HeaderNavigationMenu.Primary)});case n.HeaderNavigationMenu.Third:return(0,e.jsx)(de,{title:v?.label,onMenuOpenClose:f,onMenuBackClick:()=>k?.(n.HeaderNavigationMenu.Secondary)});default:return null}},[g,m,k,D,L,v,f]),$=(0,t.useCallback)((C,K)=>{const M=Array.isArray(s)?Array.isArray(s[C])?s[C][K]:{}:{};F(M),M?.components?.[0]?.blockType===n.HeaderNavigationBlockType.Links?M?.components?.[0]?.url&&window.open(M?.components?.[0]?.url,M?.components?.[0]?.target??"_blank"):k?.(n.HeaderNavigationMenu.Secondary)},[s,k]);return(0,e.jsxs)(l.Container,{className:(0,h.cn)("relative h-[52px]",i),children:[T,g&&(0,e.jsxs)("nav",{ref:H,className:"absolute left-0 top-full z-[999] w-full overflow-y-auto border-t border-[#E4E5E6] bg-white text-black",style:{height:x},role:"navigation","aria-label":"Mobile navigation menu",children:[m===n.HeaderNavigationMenu.Primary&&r?(0,e.jsx)("div",{className:"pt-4",children:(0,e.jsx)(l.BrandStrip,{data:r})}):null,m===n.HeaderNavigationMenu.Primary?(0,e.jsx)(Le,{categories:s,onPrimaryMenuClick:$,onPrimaryNavClick:c,profileAction:G}):A]})]})}),Le=({categories:o,onPrimaryMenuClick:r,profileAction:i,onPrimaryNavClick:c})=>(0,e.jsxs)("div",{className:"flex h-full flex-col justify-between",children:[(0,e.jsx)("div",{className:"tablet:px-8 laptop:px-16 p-4",children:o?.map((u,P)=>(0,e.jsxs)("div",{className:"",children:[(0,e.jsx)("div",{className:(0,h.cn)("my-2 h-px w-full bg-[#E5E5E7]")}),u?.map((s,m)=>(0,e.jsx)(te.MenuItem,{label:s.text,onClick:()=>{const v=(o?.flat()||[])?.findIndex(g=>g?.id===o[P][m]?.id);r(P,m),c?.(s,v)},icon:s.components?.[0]?.icon},s.id))]},`groupCategory-${P}`))}),(0,e.jsx)(ze,{profileAction:i})]}),ze=({profileAction:o})=>{const[r,i]=(0,t.useState)(!1),{profile:c,event:u}=(0,W.useNavContext)(),{locale:P="us"}=(0,ae.useAiuiContext)();return(0,e.jsxs)("div",{className:(0,h.cn)("tablet:px-8 laptop:px-16 bg-[#F5F5F7] px-4 py-6",{"p-4":r}),children:[(0,e.jsxs)("button",{className:"flex w-full cursor-pointer items-center justify-between border-0 bg-transparent",onClick:()=>i(!r),"aria-expanded":r,"aria-label":c?.nick_name||o?.welcome,children:[(0,e.jsxs)("div",{className:"flex items-center gap-[14px]",children:[(0,e.jsx)("div",{className:"flex size-[40px] shrink-0 items-center justify-center rounded-full bg-white",children:(0,e.jsx)(S.User,{"aria-hidden":"true"})}),(0,e.jsx)(l.Text,{html:c?.nick_name||o?.welcome,className:"text-base font-bold leading-[1.4]"})]}),!c?.email&&(0,e.jsx)(S.DownArrow,{"aria-hidden":"true",className:(0,h.cn)("laptop:size-4 size-5",{"rotate-180":r})})]}),c?.email&&(0,e.jsx)("nav",{className:"mt-4",role:"navigation","aria-label":"Profile menu",children:o?.profiles?.map(s=>(0,e.jsx)(te.MenuItem,{label:s?.title,href:(0,h.getLocalizedPath)(s?.url,P)},s.id))}),r&&!c?.email&&(0,e.jsxs)("div",{className:"mt-4",children:[(0,e.jsx)(l.Text,{html:o?.benefits_title,className:"text-sm font-bold leading-[1.4]"}),(0,e.jsx)("div",{className:"mt-2 flex flex-col gap-1",children:o?.benefits?.map(s=>(0,e.jsxs)("div",{className:"flex items-center gap-[6px]",children:[(0,e.jsx)(l.Picture,{source:s.benefitIcon?.url,className:"size-4",alt:s.benefit,width:16,height:16}),(0,e.jsx)(l.Text,{html:s.benefit,className:"text-sm font-bold leading-[1.4]"})]},s.id))})]}),!c?.email&&(0,e.jsxs)("div",{className:"mt-4 flex items-center gap-3",children:[(0,e.jsx)(l.Button,{className:"tablet:flex-none flex-1",variant:"secondary",size:"base",onClick:()=>u?.join?.(),children:(0,e.jsx)(l.Text,{html:o?.primaryButton||"Join Now",className:"text-sm font-bold leading-[1.4]"})}),(0,e.jsx)(l.Button,{className:"tablet:flex-none flex-1",variant:"primary",size:"base",onClick:()=>u?.login?.(),children:(0,e.jsx)(l.Text,{html:o?.secondaryButton||"Log In",className:"text-sm font-bold leading-[1.4]"})})]})]})},Be=({menuOpen:o,onMenuOpenClose:r,onMenuOpenClick:i,actions:c})=>(0,e.jsxs)("div",{className:"flex h-full items-center justify-between gap-4",children:[(0,e.jsx)(ue,{}),(0,e.jsxs)("div",{className:"desktop:gap-6 flex items-center gap-4",children:[(0,e.jsx)(re,{actions:c}),o?(0,e.jsx)("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>r(),"aria-label":"Close menu","aria-expanded":"true",children:(0,e.jsx)(S.Close,{className:"size-5","aria-hidden":"true"})}):(0,e.jsx)("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>i(),"aria-label":"Open menu","aria-expanded":"false","aria-haspopup":"true",children:(0,e.jsx)(S.Menu,{className:"size-5","aria-hidden":"true"})})]})]}),ue=()=>{const{payloadData:o,isMobile:r}=(0,W.useNavContext)(),{locale:i="us"}=(0,ae.useAiuiContext)();return(0,e.jsx)("a",{href:(0,h.getLocalizedPath)("/",i),className:"hover:text-brand-0 [&>svg]:w-full","aria-label":"Home",dangerouslySetInnerHTML:{__html:r?o?.bar?.mobileLogo:o?.bar?.desktopLogo}})},re=(0,t.forwardRef)(({actions:o,activeStatus:r=!1},i)=>{const{event:c,cartCount:u}=(0,W.useNavContext)(),[P,s]=(0,t.useState)(null),m=v=>{switch(v){case n.HeaderNavigationActionBlockType.Search:return"Search";case n.HeaderNavigationActionBlockType.Cart:return`Shopping cart${u>0?` (${u} items)`:""}`;case n.HeaderNavigationActionBlockType.Profile:return"User profile";case n.HeaderNavigationActionBlockType.Livestream:return"Livestream";default:return"Action"}},k=(0,t.useCallback)((v,g)=>{switch(s(g),v?.blockType){case n.HeaderNavigationActionBlockType.Search:c?.search?.();break;case n.HeaderNavigationActionBlockType.Cart:c?.cart?.();break;case n.HeaderNavigationActionBlockType.Profile:c?.profile?.();break;case n.HeaderNavigationActionBlockType.Livestream:c?.livestream?.();break;default:return()=>{}}},[c]);return(0,e.jsx)("div",{className:"desktop:gap-6 flex items-center gap-4",children:Array.isArray(o)&&o?.map((v,g)=>(0,e.jsxs)("button",{className:"relative cursor-pointer border-0 bg-transparent p-0",ref:v.blockType===n.HeaderNavigationActionBlockType.Profile?i:null,onClick:()=>k(v,g),"aria-label":m(v.blockType),"aria-pressed":r&&P===g,children:[(0,e.jsx)(l.Text,{html:v.icon,className:(0,h.cn)("size-5",{"text-brand-0":r&&P===g}),"aria-hidden":"true"}),v.blockType===n.HeaderNavigationActionBlockType.Cart&&u>0&&(0,e.jsx)("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]","aria-hidden":"true",children:(0,e.jsx)(l.Text,{html:u?.toString(),className:"text-sm font-bold leading-[1.2] text-white"})})]},v.id))})}),de=({title:o,onMenuOpenClose:r,onMenuBackClick:i})=>(0,e.jsxs)("div",{className:"flex h-full items-center gap-3",children:[(0,e.jsx)("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>i(),"aria-label":"Back to previous menu",children:(0,e.jsx)(S.LeftArrow,{className:"size-5","aria-hidden":"true"})}),(0,e.jsx)(l.Text,{html:o,className:"flex-1 text-center text-base font-bold leading-[1.4]"}),(0,e.jsx)("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>r(),"aria-label":"Close menu",children:(0,e.jsx)(S.Close,{className:"size-5","aria-hidden":"true"})})]});ce.displayName="MobileNavigation",re.displayName="Actions",le.displayName="HeaderNavigation",se.displayName="DesktopNavigation";var Re=(0,me.withLayout)(le);
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -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, BrandStrip } from '../../components/index.js'\n\nimport { withLayout } from '../../shared/Styles.js'\n\nimport { cn, getLocalizedPath } 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 jump from 'jump.js'\n\nimport { useGSAP } from '@gsap/react'\nimport { gsap } from 'gsap'\n\nimport { WithSidebar, WithSupports, WithMulticol, WithGroupCategory, WithResource } from './withCategory.js'\n\nimport { Menu, Close, User, LeftArrow, DownArrow, Polygon } from './icons/index.js'\n\nimport NavigationSearch from '../NavigationSearch/index.js'\nimport { ResourceSidebarDropdown } from './ResourceSidebarDropdown.js'\nimport { MobileResourceSidebarMenu } from './MobileResourceSidebarMenu.js'\nimport { SidebarDropdown } from './SidebarDropdown.js'\nimport { useScrollLock } from './useScrollLock.js'\nimport { MulticolDropdown } from './MulticolDropdown.js'\nimport { SupportsDropdown } from './SupportsDropdown.js'\nimport { MobileSidebarMenu } from './MobileSidebarMenu.js'\nimport { MobileSupportMenu } from './MobileSupportMenu.js'\nimport { MobileMulticolMenu } from './MobileMulticolMenu.js'\nimport { MenuItem } from './MobileMenuComponents.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport throttle from '../../shared/throttle.js'\n\nconst HeaderNavigation = forwardRef<HTMLDivElement, HeaderNavigationProps>((props, ref) => {\n const {\n data: { header } = {},\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 render,\n ...rest\n } = props\n\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 const searchRef = useRef<HTMLDivElement>(null)\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 // \u5982\u679C isTop \u4E3A true\uFF0C\u4E0D\u9700\u8981\u6EDA\u52A8\u76D1\u542C\u548C\u52A8\u6548\n if (isTop) {\n setHeaderHidden(false)\n setChangeHeaderBackground(false)\n return\n }\n\n let lastScrollY = 0\n let upwardDistance = 0\n let downwardDistance = 0\n\n const getScrollTop = () => {\n return document?.documentElement?.scrollTop || document?.body?.scrollTop || 0\n }\n\n // \u521D\u59CB\u5316\u72B6\u6001\n const initialScrollTop = getScrollTop()\n lastScrollY = initialScrollTop\n setHeaderHidden(initialScrollTop > 300)\n setChangeHeaderBackground(initialScrollTop > 30)\n\n const handleScroll = throttle(() => {\n const currentScrollY = getScrollTop()\n const delta = currentScrollY - lastScrollY\n\n // \u66F4\u65B0\u80CC\u666F\u72B6\u6001\n setChangeHeaderBackground(currentScrollY > 30)\n\n if (delta > 0) {\n // \u5411\u4E0B\u6EDA\u52A8\n upwardDistance = 0 // \u91CD\u7F6E\u5411\u4E0A\u7D2F\u8BA1\n downwardDistance += delta\n\n if (downwardDistance >= 300 && currentScrollY > 300) {\n setHeaderHidden(true)\n }\n } else if (delta < 0) {\n // \u5411\u4E0A\u6EDA\u52A8\n downwardDistance = 0 // \u91CD\u7F6E\u5411\u4E0B\u7D2F\u8BA1\n upwardDistance += Math.abs(delta)\n\n if (upwardDistance >= 300) {\n setHeaderHidden(false)\n upwardDistance = 0\n }\n }\n\n lastScrollY = currentScrollY\n }, 100)\n\n window.addEventListener('scroll', handleScroll, { passive: true })\n return () => window.removeEventListener('scroll', handleScroll)\n }, [isTop])\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 useScrollLock(searchOpen)\n\n const searchPage = useMemo(() => {\n return (\n header?.bar?.actions?.find((item: any) => item?.blockType === HeaderNavigationActionBlockType.Search)\n ?.searchBar?.[0] || {}\n )\n }, [header])\n\n const CustomMobileHeaderNavigation = render?.mobileHeaderNavigation\n\n return (\n <NavProvider\n buildProps={buildProps}\n profile={profile}\n isMobile={isMobile}\n event={event}\n payloadData={header}\n onSidebarNavClick={onSidebarNavClick}\n onSeriesProductClick={onSeriesProductClick}\n cartCount={cartCount}\n >\n <header\n {...rest}\n id={headerId || 'header'}\n data-ui-component-id=\"HeaderNavigation\"\n className={\n isTop\n ? 'relative z-[100] bg-white'\n : cn('sticky top-0 z-[100] transition-transform duration-500 ease-in-out', {\n ['translate-y-[-100%]']: headerHidden,\n })\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']: !isTop && changeHeaderBackground,\n },\n {\n ['hover:!text-black']: theme === 'dark',\n ['!text-black']: !isTop && changeHeaderBackground,\n }\n )}\n onClick={() => !isTop && setChangeHeaderBackground(true)}\n >\n <DesktopNavigation\n data={header}\n className=\"desktop:block hidden !bg-white\"\n theme={theme}\n onNavItemClick={() => !isTop && setChangeHeaderBackground(true)}\n onPrimaryNavClick={onPrimaryNavClick}\n />\n {CustomMobileHeaderNavigation ? (\n <CustomMobileHeaderNavigation\n className=\"desktop:hidden block !bg-white\"\n menuData={menuData}\n data={header}\n onPrimaryNavClick={onPrimaryNavClick}\n />\n ) : (\n <MobileNavigation\n menuData={menuData}\n data={header}\n className=\"desktop:hidden block !bg-white\"\n onPrimaryNavClick={onPrimaryNavClick}\n />\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 role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Search\"\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\n className=\"flex-1 bg-transparent\"\n onClick={() => setSearchOpen(false)}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close search\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n setSearchOpen(false)\n }\n }}\n />\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 const { locale = 'us' } = useAiuiContext()\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<HTMLButtonElement>(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 useScrollLock(!!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 const currentCategoriesItem = groupCategories[groupIndex][index]\n if (currentCategoriesItem?.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 currentCategoriesItem?.components?.[0]?.url &&\n window.open(\n currentCategoriesItem?.components?.[0]?.url,\n currentCategoriesItem?.components?.[0]?.target ?? '_blank'\n )\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 setCategoriesItem(currentCategoriesItem)\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 handleNavItemKeyDown = (e: React.KeyboardEvent, groupIndex: number, index: number) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleNavItemClick(e, groupIndex, index)\n } else if (e.key === 'Escape' && currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index) {\n e.preventDefault()\n handleNavMenuClose()\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 ResourceSidebarDropdownComp = WithResource(ResourceSidebarDropdown, 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.Resource:\n return <ResourceSidebarDropdownComp />\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?.bar?.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 HTMLButtonElement\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 <nav className=\"flex justify-between\" role=\"navigation\" aria-label=\"Primary navigation\">\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 const isExpanded = currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index\n return (\n <div\n key={item.id}\n ref={(el: HTMLDivElement) => {\n navItemRefs.current[groupIndex][index] = el\n }}\n className=\"group\"\n >\n <div className=\"relative\">\n <button\n className=\"flex cursor-pointer items-center gap-1 border-0 bg-transparent pb-4\"\n onClick={e => handleNavItemClick(e, groupIndex, index)}\n onKeyDown={e => handleNavItemKeyDown(e, groupIndex, index)}\n aria-expanded={isExpanded}\n aria-haspopup=\"true\"\n aria-label={item.text}\n >\n <Text html={item.text} className=\"text-sm font-bold leading-[1.4]\" />\n {/* <DownArrow\n aria-hidden=\"true\"\n className={cn('size-4 opacity-0 transition-opacity duration-500 group-hover:opacity-100', {\n ['rotate-180']: isExpanded,\n ['opacity-100']: downdownHover && isExpanded,\n })}\n /> */}\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 ['invisible']:\n !item?.components?.length ||\n item?.components?.[0]?.blockType === HeaderNavigationBlockType.Links,\n })}\n />\n </button>\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)]': isExpanded,\n },\n theme === 'dark' ? 'bg-white' : 'bg-[#080A0F]'\n )}\n aria-hidden=\"true\"\n />\n </div>\n </div>\n )\n })}\n </div>\n )\n })}\n </nav>\n </div>\n <div\n role=\"menu\"\n aria-hidden={!(currentNavItem?.open && categoriesItem)}\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\n className=\"flex-1 bg-transparent\"\n onClick={handleNavMenuClose}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close menu\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n handleNavMenuClose()\n }\n }}\n />\n </div>\n {userProfileOpen && (\n <div\n className=\"absolute left-0 top-full z-[999] flex h-dvh w-full bg-black/70\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"User profile menu\"\n // style={{\n // height: `calc(100dvh - ${profileRef?.current?.getBoundingClientRect()?.bottom}px)`,\n // top: `calc(96px)`,\n // }}\n >\n <div\n className=\"rounded-box absolute w-[272px] overflow-hidden 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]\" aria-hidden=\"true\" />\n <nav className=\"mt-2\" role=\"navigation\" aria-label=\"Profile navigation\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem\n className=\"py-2\"\n key={item.id}\n label={item?.title}\n href={getLocalizedPath(item?.url, locale)}\n />\n ))}\n </nav>\n </>\n ) : (\n <>\n <Polygon className=\"absolute -top-2 right-[46px] z-30 text-white\" aria-hidden=\"true\" />\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\n className=\"flex-1 bg-transparent\"\n onClick={() => setUserProfileOpen(false)}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close profile menu\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n setUserProfileOpen(false)\n }\n }}\n />\n </div>\n )}\n </Container>\n )\n})\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 useScrollLock(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 MobileResourceSidebarMenuComp = WithResource(MobileResourceSidebarMenu, 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.Resource:\n return <MobileResourceSidebarMenuComp />\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?.bar?.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?.bar?.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 &&\n window.open(categoriesItem?.components?.[0]?.url, categoriesItem?.components?.[0]?.target ?? '_blank')\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 <nav\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 role=\"navigation\"\n aria-label=\"Mobile navigation menu\"\n >\n {currentMenu === HeaderNavigationMenu.Primary && menuData ? (\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 </nav>\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 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 ProfileComp = ({ profileAction }: { profileAction: any }) => {\n const [profileOpen, setProfileOpen] = useState(false)\n const { profile, event } = useNavContext()\n const { locale = 'us' } = useAiuiContext()\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 <button\n className=\"flex w-full cursor-pointer items-center justify-between border-0 bg-transparent\"\n onClick={() => setProfileOpen(!profileOpen)}\n aria-expanded={profileOpen}\n aria-label={profile?.nick_name || profileAction?.welcome}\n >\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 aria-hidden=\"true\" />\n </div>\n <Text html={profile?.nick_name || profileAction?.welcome} className=\"text-base font-bold leading-[1.4]\" />\n </div>\n {!profile?.email && (\n <DownArrow aria-hidden=\"true\" className={cn('laptop:size-4 size-5', { 'rotate-180': profileOpen })} />\n )}\n </button>\n {profile?.email && (\n <nav className=\"mt-4\" role=\"navigation\" aria-label=\"Profile menu\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem key={item.id} label={item?.title} href={getLocalizedPath(item?.url, locale)} />\n ))}\n </nav>\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 <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClose()}\n aria-label=\"Close menu\"\n aria-expanded=\"true\"\n >\n <Close className=\"size-5\" aria-hidden=\"true\" />\n </button>\n ) : (\n <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClick()}\n aria-label=\"Open menu\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\"\n >\n <Menu className=\"size-5\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n </div>\n )\n}\n\nconst Logo = () => {\n const { payloadData, isMobile } = useNavContext()\n const { locale = 'us' } = useAiuiContext()\n return (\n <a\n href={getLocalizedPath('/', locale)}\n className=\"hover:text-brand-0 [&>svg]:w-full\"\n aria-label=\"Home\"\n dangerouslySetInnerHTML={{\n __html: isMobile ? payloadData?.bar?.mobileLogo : payloadData?.bar?.desktopLogo,\n }}\n />\n )\n}\n\nconst Actions = forwardRef<HTMLButtonElement, { actions: any; activeStatus?: boolean }>(\n ({ actions, activeStatus = false }, ref) => {\n const { event, cartCount } = useNavContext()\n const [activeAction, setActiveAction] = useState<any>(null)\n\n const getActionLabel = (blockType: string) => {\n switch (blockType) {\n case HeaderNavigationActionBlockType.Search:\n return 'Search'\n case HeaderNavigationActionBlockType.Cart:\n return `Shopping cart${cartCount > 0 ? ` (${cartCount} items)` : ''}`\n case HeaderNavigationActionBlockType.Profile:\n return 'User profile'\n case HeaderNavigationActionBlockType.Livestream:\n return 'Livestream'\n default:\n return 'Action'\n }\n }\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 <button\n className=\"relative cursor-pointer border-0 bg-transparent p-0\"\n key={action.id}\n ref={action.blockType === HeaderNavigationActionBlockType.Profile ? ref : null}\n onClick={() => handleActionClick(action, index)}\n aria-label={getActionLabel(action.blockType)}\n aria-pressed={activeStatus && activeAction === index}\n >\n <Text\n html={action.icon}\n className={cn('size-5', { 'text-brand-0': activeStatus && activeAction === index })}\n aria-hidden=\"true\"\n />\n {action.blockType === HeaderNavigationActionBlockType.Cart && cartCount > 0 && (\n <div\n 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 aria-hidden=\"true\"\n >\n <Text html={cartCount?.toString()} className=\"text-sm font-bold leading-[1.2] text-white\" />\n </div>\n )}\n </button>\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 <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuBackClick()}\n aria-label=\"Back to previous menu\"\n >\n <LeftArrow className=\"size-5\" aria-hidden=\"true\" />\n </button>\n <Text html={title} className=\"flex-1 text-center text-base font-bold leading-[1.4]\" />\n <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClose()}\n aria-label=\"Close menu\"\n >\n <Close className=\"size-5\" aria-hidden=\"true\" />\n </button>\n </div>\n )\n}\n\nMobileNavigation.displayName = 'MobileNavigation'\nActions.displayName = 'Actions'\nHeaderNavigation.displayName = 'HeaderNavigation'\nDesktopNavigation.displayName = 'DesktopNavigation'\n\nexport default withLayout(HeaderNavigation)\n"],
|
|
5
|
-
"mappings": "slBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,aAAAE,KAAA,eAAAC,GAAAH,IA4NU,IAAAI,EAAA,6BA3NVC,EAA0G,iBAE1GC,EAA6D,qCAE7DC,GAA2B,kCAE3BC,EAAqC,kCASrCC,EAA2C,+BAE3CC,EAAiG,sBAEjGC,GAAiB,sBAEjBN,EAAwB,uBACxBO,EAAqB,gBAErBC,EAAyF,6BAEzFC,EAAiE,4BAEjEC,GAA6B,2CAC7BC,GAAwC,wCACxCC,GAA0C,0CAC1CC,GAAgC,gCAChCC,GAA8B,8BAC9BC,GAAiC,iCACjCC,GAAiC,iCACjCC,GAAkC,kCAClCC,GAAkC,kCAClCC,GAAmC,mCACnCC,GAAyB,qCACzBC,GAA+B,oCAC/BC,GAAqB,uCAErB,MAAMC,MAAmB,cAAkD,CAACC,EAAOC,IAAQ,CACzF,KAAM,CACJ,KAAM,CAAE,OAAAC,CAAO,EAAI,CAAC,EACpB,WAAAC,EACA,MAAAC,EACA,QAAAC,EACA,MAAAC,EAAQ,QACR,MAAAC,EAAQ,GACR,aAAAC,EACA,SAAAC,EACA,YAAAC,EACA,SAAAC,EACA,kBAAAC,EACA,qBAAAC,EACA,kBAAAC,EACA,SAAAC,EACA,UAAAC,EACA,SAAAC,EACA,OAAAC,EACA,GAAGC,CACL,EAAInB,EAEE,CAACoB,EAAYC,CAAa,KAAI,YAAS,EAAK,EAC5C,CAACC,EAAcC,CAAe,KAAI,YAAS,EAAK,EAChD,CAACC,EAAwBC,CAAyB,KAAI,YAAS,EAAK,EACpE,CAACC,EAAUC,CAAW,KAAI,YAAS,EAAK,EACxCC,KAAY,UAAuB,IAAI,EAEvCC,KAAY,UAAuB,IAAI,EAEvCC,EAAe,IAAM,CACzB,MAAMC,EAAc,UAAU,cAAc,MAAM,GAAG,aAAe,EACpEJ,EAAYI,GAAe,IAAI,CACjC,KAEA,aAAU,KACRD,EAAa,EACb,OAAO,iBAAiB,SAAUA,CAAY,EACvC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAY,CACnD,GACC,CAAC,CAAC,KAEL,uBAAoB7B,EAAK,IAAM4B,EAAU,OAAyB,KAElE,aAAU,IAAM,CACVA,EAAU,SAAWtB,MACvB,GAAAyB,SAAKH,EAAU,QAAS,CAAE,SAAU,EAAG,OAAQA,EAAU,SAAS,sBAAsB,GAAG,QAAU,CAAE,CAAC,CAE5G,EAAG,CAACtB,CAAK,CAAC,KAEV,aAAU,IAAM,CAEd,GAAIA,EAAO,CACTgB,EAAgB,EAAK,EACrBE,EAA0B,EAAK,EAC/B,MACF,CAEA,IAAIQ,EAAc,EACdC,EAAiB,EACjBC,EAAmB,EAEvB,MAAMC,EAAe,IACZ,UAAU,iBAAiB,WAAa,UAAU,MAAM,WAAa,EAIxEC,EAAmBD,EAAa,EACtCH,EAAcI,EACdd,EAAgBc,EAAmB,GAAG,EACtCZ,EAA0BY,EAAmB,EAAE,EAE/C,MAAMC,KAAe,GAAAC,SAAS,IAAM,CAClC,MAAMC,EAAiBJ,EAAa,EAC9BK,EAAQD,EAAiBP,EAG/BR,EAA0Be,EAAiB,EAAE,EAEzCC,EAAQ,GAEVP,EAAiB,EACjBC,GAAoBM,EAEhBN,GAAoB,KAAOK,EAAiB,KAC9CjB,EAAgB,EAAI,GAEbkB,EAAQ,IAEjBN,EAAmB,EACnBD,GAAkB,KAAK,IAAIO,CAAK,EAE5BP,GAAkB,MACpBX,EAAgB,EAAK,EACrBW,EAAiB,IAIrBD,EAAcO,CAChB,EAAG,GAAG,EAEN,cAAO,iBAAiB,SAAUF,EAAc,CAAE,QAAS,EAAK,CAAC,EAC1D,IAAM,OAAO,oBAAoB,SAAUA,CAAY,CAChE,EAAG,CAAC/B,CAAK,CAAC,KAEV,aAAU,IAAM,CACVH,IACFA,EAAM,OAAS,IAAMiB,EAAc,EAAI,EAE3C,EAAG,CAACjB,CAAK,CAAC,KAEV,WAAQ,IAAM,CACRwB,GAAW,SAAWR,GACxB,OAAK,OACHQ,EAAU,QACV,CACE,OAAQ,CACV,EACA,CACE,OAAQ,OACR,SAAU,EACZ,CACF,CAEJ,EAAG,CAACR,CAAU,CAAC,KAEf,kBAAcA,CAAU,EAExB,MAAMsB,MAAa,WAAQ,IAEvBxC,GAAQ,KAAK,SAAS,KAAMyC,GAAcA,GAAM,YAAc,kCAAgC,MAAM,GAChG,YAAY,CAAC,GAAK,CAAC,EAExB,CAACzC,CAAM,CAAC,EAEL0C,EAA+B1B,GAAQ,uBAE7C,SACE,OAAC,EAAA2B,QAAA,CACC,WAAY1C,EACZ,QAASE,EACT,SAAUqB,EACV,MAAOtB,EACP,YAAaF,EACb,kBAAmBY,EACnB,qBAAsBD,EACtB,UAAWG,EAEX,mBAAC,UACE,GAAGG,EACJ,GAAIJ,GAAY,SAChB,uBAAqB,mBACrB,UACER,EACI,+BACA,MAAG,qEAAsE,CACtE,sBAAwBe,CAC3B,CAAC,EAGP,IAAKO,EAEL,oBAAC,OACC,aAAW,MACT,kCACAvB,IAAU,QAAU,aAAe,aACnC,CACG,oDAAsD,CAACC,GAASiB,CACnE,EACA,CACG,oBAAsBlB,IAAU,OAChC,cAAgB,CAACC,GAASiB,CAC7B,CACF,EACA,QAAS,IAAM,CAACjB,GAASkB,EAA0B,EAAI,EAEvD,oBAACqB,GAAA,CACC,KAAM5C,EACN,UAAU,iCACV,MAAOI,EACP,eAAgB,IAAM,CAACC,GAASkB,EAA0B,EAAI,EAC9D,kBAAmBb,EACrB,EACCgC,KACC,OAACA,EAAA,CACC,UAAU,iCACV,SAAU3B,EACV,KAAMf,EACN,kBAAmBU,EACrB,KAEA,OAACmC,GAAA,CACC,SAAU9B,EACV,KAAMf,EACN,UAAU,iCACV,kBAAmBU,EACrB,EAEDQ,MACC,QAAC,OACC,UAAU,gEACV,MAAO,CAAE,OAAQ,iBAAiBS,GAAW,SAAS,sBAAsB,GAAG,GAAG,KAAM,EACxF,KAAK,SACL,aAAW,OACX,aAAW,SAEX,oBAAC,OAAI,IAAKD,EAAW,aAAW,MAAG,kBAAmB,CAAC,CAAC,EACtD,mBAAC,GAAAoB,QAAA,CACC,KAAMN,GACN,SAAU/B,EACV,YAAaD,EACb,aAAcF,EACd,SAAWyC,GAAkB,CAC3BxC,IAAWwC,CAAK,CAClB,EACA,QAAS,IAAM,CACbxC,IAAW,EACXY,EAAc,EAAK,CACrB,EACF,EACF,KACA,OAAC,OACC,UAAU,wBACV,QAAS,IAAMA,EAAc,EAAK,EAClC,KAAK,SACL,SAAU,EACV,aAAW,eACX,UAAW6B,GAAK,EACVA,EAAE,MAAQ,SAAWA,EAAE,MAAQ,KAAOA,EAAE,MAAQ,YAClDA,EAAE,eAAe,EACjB7B,EAAc,EAAK,EAEvB,EACF,GACF,GAEJ,EACF,EACF,CAEJ,CAAC,EAEKyB,MAAoB,cAAmD,CAAC9C,EAAOC,IAAQ,CAC3F,KAAM,CAAE,KAAAkD,EAAM,eAAAC,EAAgB,UAAAC,EAAW,MAAA/C,EAAO,kBAAAM,CAAkB,EAAIZ,EAChE,CAAE,MAAAI,EAAO,QAAAC,CAAQ,KAAI,iBAAc,EACnC,CAACiD,EAAeC,CAAgB,KAAI,YAAS,EAAK,EAClD,CAAE,OAAAC,EAAS,IAAK,KAAI,mBAAe,EAEnCC,KAAkB,WAAQ,OACvB,qBAAkBN,GAAM,YAAY,OAAQR,GAAcA,GAAM,MAAM,CAAC,EAC7E,CAACQ,CAAI,CAAC,EAEH,CAACO,EAAgBC,CAAiB,KAAI,YAAc,IAAI,EACxD,CAACC,EAAgBC,CAAiB,KAAI,YAAmE,CAAC,CAAC,EAC3GC,KAAa,UAA0B,IAAI,EAC3C,CAACC,EAAiBC,CAAkB,KAAI,YAAS,EAAK,EACtDnC,KAAY,UAAuB,IAAI,EACvCoC,KAAc,UAAuB,IAAI,EACzCC,KAAc,UAClBT,EAAgB,IAAKU,GAAoB,MAAMA,GAAY,QAAU,CAAC,EAAE,KAAK,IAAI,CAAC,CACpF,KAEA,aAAU,IAAM,CACVV,GAAiB,QACnBI,EACEJ,GAAiB,IAAI,CAACW,EAAgBC,IAC7BD,GAAW,IAAI,CAACE,EAAQC,KAAmB,CAAE,WAAAF,EAAY,MAAAE,EAAO,KAAM,EAAM,EAAE,CACtF,CACH,CAEJ,EAAG,CAACd,CAAe,CAAC,EAEpB,MAAMe,KAAiB,WAAQ,IAAM,CACnC,IAAIA,EAA8E,KAClF,UAAWJ,KAAaR,EAAgB,CACtC,UAAWjB,KAAQyB,EACjB,GAAIzB,EAAK,KAAM,CACb6B,EAAiB7B,EACjB,KACF,CAEF,GAAI6B,EAAgB,KACtB,CACA,OAAOA,CACT,EAAG,CAACZ,CAAc,CAAC,KAEnB,kBAAc,CAAC,CAACY,GAAgB,MAAQT,CAAe,EAEvD,MAAMU,EAAqB,CAACvB,EAAQmB,EAAoBE,IAAkB,CACxEP,EAAmB,EAAK,EAExB,MAAMU,EAAwBjB,EAAgBY,CAAU,EAAEE,CAAK,EAC/D,GAAIG,GAAuB,aAAa,CAAC,GAAG,YAAc,4BAA0B,MAGlFA,GAAuB,aAAa,CAAC,GAAG,KACtC,OAAO,KACLA,GAAuB,aAAa,CAAC,GAAG,IACxCA,GAAuB,aAAa,CAAC,GAAG,QAAU,QACpD,MACG,CACL,MAAMP,EAAaV,GAAiB,KAAK,GAAK,CAAC,EACzCkB,EAAWR,GAAY,UAAUxB,IAAQA,IAAM,KAAOc,EAAgBY,CAAU,EAAEE,CAAK,GAAG,EAAE,EAClGrB,EAAE,gBAAgB,EAClBE,IAAiB,EACjBxC,IAAoBuD,EAAWQ,CAAQ,EAAGA,CAAQ,EAElDhB,EAAkBe,CAAqB,EACvCb,EAAkBe,IAChBA,GAAK,IAAIR,IACPA,GAAU,IAAIzB,GACZA,EAAK,aAAe0B,GAAc1B,EAAK,QAAU4B,EAC7C,CAAE,GAAG5B,EAAM,KAAM,CAACA,EAAK,IAAK,EAC5B,CAAE,GAAGA,EAAM,KAAM,EAAM,CAC7B,CACF,CACF,CACF,CACF,EAEMkC,EAAuB,CAAC3B,EAAwBmB,EAAoBE,IAAkB,CACtFrB,EAAE,MAAQ,SAAWA,EAAE,MAAQ,KACjCA,EAAE,eAAe,EACjBuB,EAAmBvB,EAAGmB,EAAYE,CAAK,GAC9BrB,EAAE,MAAQ,UAAYsB,GAAgB,aAAeH,GAAcG,GAAgB,QAAUD,IACtGrB,EAAE,eAAe,EACjB4B,EAAmB,EAEvB,EAEMA,EAAqB,IAAM,CAC/BjB,EAAkBe,GAAQA,EAAK,IAAIR,GAAaA,EAAU,IAAIzB,IAAS,CAAE,GAAGA,EAAM,KAAM,EAAM,EAAE,CAAC,CAAC,CACpG,EAEMoC,KAA6B,WAAQ,IAAM,CAC/C,GAAIrB,EAAgB,OAAOA,GAAgB,aAAa,CAAC,GAAG,SAC9D,EAAG,CAACA,CAAc,CAAC,EAEbsB,KAAsB,eAAY,mBAAiBtB,CAAc,EACjEuB,KAA8B,gBAAa,2BAAyBvB,CAAc,EAClFwB,KAAuB,gBAAa,oBAAkBxB,CAAc,EACpEyB,MAAuB,gBAAa,oBAAkB,CAC1D,eAAAzB,EACA,kBAAmBQ,EAAY,UAAUM,GAAgB,YAAc,CAAC,IAAIA,GAAgB,OAAS,CAAC,CACxG,CAAC,EAEKY,KAAe,WAAQ,IAAM,CACjC,OAAQL,EAA4B,CAClC,KAAK,4BAA0B,QAC7B,SAAO,OAACC,EAAA,EAAoB,EAC9B,KAAK,4BAA0B,SAC7B,SAAO,OAACC,EAAA,EAA4B,EACtC,KAAK,4BAA0B,SAC7B,SAAO,OAACE,GAAA,EAAqB,EAC/B,KAAK,4BAA0B,SAC7B,SAAO,OAACD,EAAA,EAAqB,EAC/B,QACE,OAAO,IACX,CACF,EAAG,CAACH,EAA4BrB,CAAc,CAAC,EAEzC2B,KAAU,WAAQ,IACflC,GAAM,KAAK,SAAS,OAAQR,GAAcA,GAAM,MAAM,EAC5D,CAACQ,CAAI,CAAC,EAEHmC,KAAgB,WAAQ,IACrBD,GAAS,KAAM1C,GAAcA,GAAM,YAAc,kCAAgC,OAAO,EAC9F,CAAC0C,CAAO,CAAC,EAENE,KAAqB,eAAY,IAAM,CAC3CvB,EAAmBY,GAAQ,CAACA,CAAI,CAClC,EAAG,CAAC,CAAC,EAEL,sBAAU,IAAM,CACd,GAAId,GAAY,QAAS,CACvB,MAAM0B,EAAoB1B,EAAW,QACrC,OAAA0B,EAAkB,iBAAiB,QAASD,CAAkB,EAEvD,IAAM,CACXC,EAAkB,oBAAoB,QAASD,CAAkB,CACnE,CACF,CACF,EAAG,CAACA,CAAkB,CAAC,KAEvB,WAAQ,IAAM,CACRf,GAAgB,MAClB,OAAK,OACHP,GAAa,QACb,CACE,OAAQ,CACV,EACA,CACE,OAAQ,MACV,CACF,CAEJ,EAAG,CAACO,GAAgB,IAAI,CAAC,KAGvB,QAAC,aAAU,aAAW,MAAG,oBAAqBnB,CAAS,EACrD,qBAAC,OAAI,IAAKxB,EAAW,QAASiD,EAAoB,UAAU,yCAC1D,qBAAC,OAAI,UAAU,oCACb,oBAACW,GAAA,EAAK,KACN,OAACC,GAAA,CAAQ,IAAK5B,EAAY,QAASuB,EAAS,aAActB,EAAiB,GAC7E,KACA,OAAC,OAAI,UAAU,uBAAuB,KAAK,aAAa,aAAW,qBAChE,SAAAN,GAAiB,IAAI,CAACW,EAAgBC,OAEnC,OAAC,OAAwC,UAAU,aAChD,SAAAD,GAAW,IAAI,CAACzB,EAAW4B,IAAkB,CAC5C,MAAMoB,EAAanB,GAAgB,aAAeH,GAAcG,GAAgB,QAAUD,EAC1F,SACE,OAAC,OAEC,IAAMqB,GAAuB,CAC3B1B,EAAY,QAAQG,CAAU,EAAEE,CAAK,EAAIqB,CAC3C,EACA,UAAU,QAEV,oBAAC,OAAI,UAAU,WACb,qBAAC,UACC,UAAU,sEACV,QAAS1C,GAAKuB,EAAmBvB,EAAGmB,EAAYE,CAAK,EACrD,UAAWrB,GAAK2B,EAAqB3B,EAAGmB,EAAYE,CAAK,EACzD,gBAAeoB,EACf,gBAAc,OACd,aAAYhD,EAAK,KAEjB,oBAAC,QAAK,KAAMA,EAAK,KAAM,UAAU,kCAAkC,KAQnE,OAAC,aACC,aAAW,MAAG,2EAA4E,CACvF,aACC6B,GAAgB,aAAeH,GAAcG,GAAgB,QAAUD,EACxE,cACCjB,GACAkB,GAAgB,aAAeH,GAC/BG,GAAgB,QAAUD,EAC3B,UACC,CAAC5B,GAAM,YAAY,QACnBA,GAAM,aAAa,CAAC,GAAG,YAAc,4BAA0B,KACnE,CAAC,EACH,GACF,KACA,OAAC,OACC,aAAW,MACT,mEACA,CACE,sBAAuBgD,CACzB,EACArF,IAAU,OAAS,WAAa,cAClC,EACA,cAAY,OACd,GACF,GA/CKqC,EAAK,EAgDZ,CAEJ,CAAC,GAvDO,iBAAiB0B,CAAU,EAwDrC,CAEH,EACH,GACF,KACA,QAAC,OACC,KAAK,OACL,cAAa,EAAEG,GAAgB,MAAQd,GACvC,aAAW,MACT,2HACA,CACE,OAAQ,EAAEc,GAAgB,MAAQd,EACpC,CACF,EACA,aAAc,IAAMH,EAAiB,EAAI,EACzC,aAAc,IAAMA,EAAiB,EAAK,EAC1C,MAAO,CAAE,OAAQ,iBAAiB1B,GAAW,SAAS,sBAAsB,GAAG,MAAM,KAAM,EAE3F,oBAAC,OACC,IAAKoC,EACL,aAAW,MAAG,gBAAiB,CAC7B,kBAAmBc,IAA+B,4BAA0B,QAC9E,CAAC,EAEA,SAAAK,EACH,KACA,OAAC,OACC,UAAU,wBACV,QAASN,EACT,KAAK,SACL,SAAU,EACV,aAAW,aACX,UAAW5B,GAAK,EACVA,EAAE,MAAQ,SAAWA,EAAE,MAAQ,KAAOA,EAAE,MAAQ,YAClDA,EAAE,eAAe,EACjB4B,EAAmB,EAEvB,EACF,GACF,EACCf,MACC,QAAC,OACC,UAAU,iEACV,KAAK,SACL,aAAW,OACX,aAAW,oBAMX,oBAAC,OACC,UAAU,8DACV,MAAO,CACL,MAAO,eAAeD,GAAY,SAAS,sBAAsB,GAAG,KAAK,MACzE,IAAK,OACP,EAEC,SAAAzD,GAAS,SACR,oBACE,oBAAC,QAAK,KAAMA,GAAS,WAAaiF,GAAe,QAAS,UAAU,oBAAoB,KACxF,OAAC,OAAI,UAAU,yBAAyB,cAAY,OAAO,KAC3D,OAAC,OAAI,UAAU,OAAO,KAAK,aAAa,aAAW,qBAChD,SAAAA,GAAe,UAAU,IAAK3C,MAC7B,OAAC,aACC,UAAU,OAEV,MAAOA,GAAM,MACb,QAAM,oBAAiBA,GAAM,IAAKa,CAAM,GAFnCb,EAAK,EAGZ,CACD,EACH,GACF,KAEA,oBACE,oBAAC,WAAQ,UAAU,+CAA+C,cAAY,OAAO,KACrF,OAAC,QAAK,KAAM2C,GAAe,eAAgB,UAAU,kCAAkC,KACvF,OAAC,OAAI,UAAU,2BACZ,SAAAA,GAAe,UAAU,IAAK3C,MAC7B,QAAC,OAAkB,UAAU,8BAC3B,oBAAC,WACC,OAAQA,EAAK,aAAa,IAC1B,UAAU,SACV,IAAKA,EAAK,QACV,MAAO,GACP,OAAQ,GACV,KACA,OAAC,QAAK,KAAMA,EAAK,QAAS,UAAU,kCAAkC,IAR9DA,EAAK,EASf,CACD,EACH,KACA,QAAC,OAAI,UAAU,+BACb,oBAAC,UAAO,QAAQ,YAAY,KAAK,KAAK,QAAS,IAAMvC,GAAO,OAAO,EACjE,mBAAC,QAAK,KAAMkF,GAAe,eAAiB,WAAY,UAAU,YAAY,EAChF,KACA,OAAC,UAAO,QAAQ,UAAU,KAAK,KAAK,QAAS,IAAMlF,GAAO,QAAQ,EAChE,mBAAC,QAAK,KAAMkF,GAAe,iBAAmB,SAAU,UAAU,YAAY,EAChF,GACF,GACF,EAEJ,KACA,OAAC,OACC,UAAU,wBACV,QAAS,IAAMtB,EAAmB,EAAK,EACvC,KAAK,SACL,SAAU,EACV,aAAW,qBACX,UAAWd,GAAK,EACVA,EAAE,MAAQ,SAAWA,EAAE,MAAQ,KAAOA,EAAE,MAAQ,YAClDA,EAAE,eAAe,EACjBc,EAAmB,EAAK,EAE5B,EACF,GACF,GAEJ,CAEJ,CAAC,EAEKjB,MAAmB,cACvB,CAAC,CAAE,KAAAI,EAAM,SAAAlC,EAAU,UAAAoC,EAAW,kBAAAzC,CAAkB,EAAGX,IAAQ,CACzD,MAAMwD,KAAkB,WAAQ,OACvB,qBAAkBN,GAAM,YAAY,OAAQR,GAAcA,GAAM,UAAU,CAAC,EACjF,CAACQ,CAAI,CAAC,EAEH,CAAE,YAAA0C,EAAa,eAAAC,EAAgB,eAAAC,CAAe,KAAI,iBAAc,EAChE,CAACC,EAAgBC,CAAiB,KAAI,YAAS,EAAK,EACpD,CAACC,EAAiBC,CAAkB,KAAI,YAAS,CAAC,EAClD,CAACzC,EAAgBC,CAAiB,KAAI,YAAc,IAAI,EAExDyC,KAAgB,UAAuB,IAAI,KAEjD,aAAU,IAAM,CACd,GAAIA,GAAe,SAAWJ,EAAgB,CAC5C,MAAMK,EAAOD,GAAe,SAAS,sBAAsB,EAC3DD,EAAmB,QAAQ,aAAeE,GAAM,QAAU,EAAE,CAC9D,CACF,EAAG,CAACL,CAAc,CAAC,KAEnB,WAAQ,IAAM,CACZ,OAAK,OACHI,EAAc,QACd,CACE,OAAQ,CACV,EACA,CACE,OAAQF,EACR,SAAU,EACZ,CACF,CACF,EAAG,CAACA,CAAe,CAAC,KAEpB,kBAAcF,CAAc,EAE5B,MAAMjB,KAA6B,WAAQ,IAClCrB,GAAgB,aAAa,CAAC,GAAG,UACvC,CAACA,CAAc,CAAC,EAEb4C,KAAwB,gBAAa,qBAAmB,CAC5D,eAAA5C,CACF,CAAC,EAEK6C,KAAwB,eAAY,qBAAmB7C,CAAc,EACrE8C,KAAgC,gBAAa,6BAA2B9C,CAAc,EACtF+C,KAAyB,gBAAa,sBAAoB/C,CAAc,EAExEgD,KAA2B,WAAQ,IAAM,CAC7C,OAAQ3B,EAA4B,CAClC,KAAK,4BAA0B,QAC7B,SAAO,OAACwB,EAAA,EAAsB,EAChC,KAAK,4BAA0B,SAC7B,SAAO,OAACC,EAAA,EAA8B,EACxC,KAAK,4BAA0B,SAC7B,SAAO,OAACF,EAAA,EAAsB,EAChC,KAAK,4BAA0B,SAC7B,SAAO,OAACG,EAAA,EAAuB,EACjC,QACE,OAAO,IACX,CACF,EAAG,CAAC1B,EAA4BrB,EAAgB4C,CAAqB,CAAC,EAEhEK,KAA2B,eAAY,IAAM,CACjDV,EAAkB,EAAK,EACvBE,EAAmB,CAAC,EACpBL,GAAkBA,EAAe,uBAAqB,OAAO,CAC/D,EAAG,CAACG,EAAmBE,EAAoBL,CAAc,CAAC,EAEpDc,KAAc,WAAQ,IACnBzD,GAAM,KAAK,SAAS,OACxBR,GAAcA,GAAM,YAAcA,GAAM,YAAc,kCAAgC,OACzF,EACC,CAACQ,CAAI,CAAC,EAEHmC,KAAgB,WAAQ,IAE1BnC,GAAM,KAAK,SAAS,KACjBR,GAAcA,GAAM,YAAcA,GAAM,YAAc,kCAAgC,OACzF,GAAK,CAAC,EAEP,CAACQ,CAAI,CAAC,EAEH0D,KAA6B,WAAQ,IAAM,CAC/C,OAAQhB,EAAa,CACnB,KAAK,uBAAqB,QACxB,SACE,OAACiB,GAAA,CACC,QAASF,EACT,SAAUZ,EACV,gBAAiB,IAAM,CACrBC,EAAkB,EAAK,EACvBE,EAAmB,CAAC,CACtB,EACA,gBAAiB,IAAMF,EAAkB,EAAI,EAC/C,EAEJ,KAAK,uBAAqB,UACxB,SACE,OAACc,GAAA,CACC,MAAOrD,GAAgB,KACvB,gBAAiBiD,EACjB,gBAAiB,IAAMb,IAAiB,uBAAqB,OAAO,EACtE,EAEJ,KAAK,uBAAqB,MACxB,SACE,OAACiB,GAAA,CACC,MAAOhB,GAAgB,MACvB,gBAAiBY,EACjB,gBAAiB,IAAMb,IAAiB,uBAAqB,SAAS,EACxE,EAEJ,QACE,OAAO,IACX,CACF,EAAG,CACDE,EACAH,EACAC,EACApC,EACAkD,EACAb,EACAY,CACF,CAAC,EAEKK,KAAyB,eAC7B,CAAC3C,EAAoBE,IAAkB,CACrC,MAAMb,EAAiB,MAAM,QAAQD,CAAe,EAChD,MAAM,QAAQA,EAAgBY,CAAU,CAAC,EAEvCZ,EAAgBY,CAAU,EAAEE,CAAK,EACjC,CAAC,EACH,CAAC,EACLZ,EAAkBD,CAAc,EAC5BA,GAAgB,aAAa,CAAC,GAAG,YAAc,4BAA0B,MAE3EA,GAAgB,aAAa,CAAC,GAAG,KAC/B,OAAO,KAAKA,GAAgB,aAAa,CAAC,GAAG,IAAKA,GAAgB,aAAa,CAAC,GAAG,QAAU,QAAQ,EAEvGoC,IAAiB,uBAAqB,SAAS,CAEnD,EACA,CAACrC,EAAiBqC,CAAc,CAClC,EAEA,SACE,QAAC,aAAU,aAAW,MAAG,oBAAqBzC,CAAS,EAEpD,UAAAwD,EACAb,MACC,QAAC,OACC,IAAKI,EACL,UAAU,wGACV,MAAO,CAAE,OAAQF,CAAgB,EACjC,KAAK,aACL,aAAW,yBAEV,UAAAL,IAAgB,uBAAqB,SAAW5E,KAC/C,OAAC,OAAI,UAAU,OACb,mBAAC,cAAW,KAAMA,EAAU,EAC9B,EACE,KACH4E,IAAgB,uBAAqB,WACpC,OAACoB,GAAA,CACC,WAAYxD,EACZ,mBAAoBuD,EACpB,kBAAmBpG,EACnB,cAAe0E,EACjB,EAEAoB,GAEJ,GAEJ,CAEJ,CACF,EAOMO,GAAoB,CAAC,CACzB,WAAA9C,EACA,mBAAA+C,EACA,cAAA5B,EACA,kBAAA1E,CACF,OAOI,QAAC,OAAI,UAAU,uCACb,oBAAC,OAAI,UAAU,+BACZ,SAAAuD,GAAY,IAAI,CAACC,EAAgBC,OAChC,QAAC,OAAwC,UAAU,GACjD,oBAAC,OAAI,aAAW,MAAG,+BAA+B,EAAG,EACpDD,GAAW,IAAI,CAACzB,EAAW4B,OAC1B,OAAC,aAEC,MAAO5B,EAAK,KACZ,QAAS,IAAM,CAEb,MAAMgC,GADiBR,GAAY,KAAK,GAAK,CAAC,IACb,UAC9BxB,GAAcA,GAAM,KAAOwB,EAAWE,CAAU,EAAEE,CAAK,GAAG,EAC7D,EACA2C,EAAmB7C,EAAYE,CAAK,EACpC3D,IAAoB+B,EAAMgC,CAAQ,CACpC,EACA,KAAMhC,EAAK,aAAa,CAAC,GAAG,MAVvBA,EAAK,EAWZ,CACD,IAhBO,iBAAiB0B,CAAU,EAiBrC,CACD,EACH,KACA,OAAC8C,GAAA,CAAY,cAAe7B,EAAe,GAC7C,EASE6B,GAAc,CAAC,CAAE,cAAA7B,CAAc,IAA8B,CACjE,KAAM,CAAC8B,EAAaC,CAAc,KAAI,YAAS,EAAK,EAC9C,CAAE,QAAAhH,EAAS,MAAAD,CAAM,KAAI,iBAAc,EACnC,CAAE,OAAAoD,EAAS,IAAK,KAAI,mBAAe,EACzC,SACE,QAAC,OACC,aAAW,MAAG,kDAAmD,CAC/D,MAAO4D,CACT,CAAC,EAED,qBAAC,UACC,UAAU,kFACV,QAAS,IAAMC,EAAe,CAACD,CAAW,EAC1C,gBAAeA,EACf,aAAY/G,GAAS,WAAaiF,GAAe,QAEjD,qBAAC,OAAI,UAAU,+BACb,oBAAC,OAAI,UAAU,8EACb,mBAAC,QAAK,cAAY,OAAO,EAC3B,KACA,OAAC,QAAK,KAAMjF,GAAS,WAAaiF,GAAe,QAAS,UAAU,oCAAoC,GAC1G,EACC,CAACjF,GAAS,UACT,OAAC,aAAU,cAAY,OAAO,aAAW,MAAG,uBAAwB,CAAE,aAAc+G,CAAY,CAAC,EAAG,GAExG,EACC/G,GAAS,UACR,OAAC,OAAI,UAAU,OAAO,KAAK,aAAa,aAAW,eAChD,SAAAiF,GAAe,UAAU,IAAK3C,MAC7B,OAAC,aAAuB,MAAOA,GAAM,MAAO,QAAM,oBAAiBA,GAAM,IAAKa,CAAM,GAArEb,EAAK,EAAmE,CACxF,EACH,EAEDyE,GAAe,CAAC/G,GAAS,UACxB,QAAC,OAAI,UAAU,OACb,oBAAC,QAAK,KAAMiF,GAAe,eAAgB,UAAU,kCAAkC,KACvF,OAAC,OAAI,UAAU,2BACZ,SAAAA,GAAe,UAAU,IAAK3C,MAC7B,QAAC,OAAkB,UAAU,8BAC3B,oBAAC,WAAQ,OAAQA,EAAK,aAAa,IAAK,UAAU,SAAS,IAAKA,EAAK,QAAS,MAAO,GAAI,OAAQ,GAAI,KACrG,OAAC,QAAK,KAAMA,EAAK,QAAS,UAAU,kCAAkC,IAF9DA,EAAK,EAGf,CACD,EACH,GACF,EAED,CAACtC,GAAS,UACT,QAAC,OAAI,UAAU,+BACb,oBAAC,UAAO,UAAU,0BAA0B,QAAQ,YAAY,KAAK,OAAO,QAAS,IAAMD,GAAO,OAAO,EACvG,mBAAC,QAAK,KAAMkF,GAAe,eAAiB,WAAY,UAAU,kCAAkC,EACtG,KACA,OAAC,UAAO,UAAU,0BAA0B,QAAQ,UAAU,KAAK,OAAO,QAAS,IAAMlF,GAAO,QAAQ,EACtG,mBAAC,QAAK,KAAMkF,GAAe,iBAAmB,SAAU,UAAU,kCAAkC,EACtG,GACF,GAEJ,CAEJ,EAEMwB,GAAgB,CAAC,CAAE,SAAAQ,EAAU,gBAAAC,EAAiB,gBAAAC,EAAiB,QAAAnC,CAAQ,OAEzE,QAAC,OAAI,UAAU,iDACb,oBAACI,GAAA,EAAK,KACN,QAAC,OAAI,UAAU,wCACb,oBAACC,GAAA,CAAQ,QAASL,EAAS,EAC1BiC,KACC,OAAC,UACC,UAAU,6CACV,QAAS,IAAMC,EAAgB,EAC/B,aAAW,aACX,gBAAc,OAEd,mBAAC,SAAM,UAAU,SAAS,cAAY,OAAO,EAC/C,KAEA,OAAC,UACC,UAAU,6CACV,QAAS,IAAMC,EAAgB,EAC/B,aAAW,YACX,gBAAc,QACd,gBAAc,OAEd,mBAAC,QAAK,UAAU,SAAS,cAAY,OAAO,EAC9C,GAEJ,GACF,EAIE/B,GAAO,IAAM,CACjB,KAAM,CAAE,YAAAgC,EAAa,SAAA/F,CAAS,KAAI,iBAAc,EAC1C,CAAE,OAAA8B,EAAS,IAAK,KAAI,mBAAe,EACzC,SACE,OAAC,KACC,QAAM,oBAAiB,IAAKA,CAAM,EAClC,UAAU,oCACV,aAAW,OACX,wBAAyB,CACvB,OAAQ9B,EAAW+F,GAAa,KAAK,WAAaA,GAAa,KAAK,WACtE,EACF,CAEJ,EAEM/B,MAAU,cACd,CAAC,CAAE,QAAAL,EAAS,aAAAqC,EAAe,EAAM,EAAGzH,IAAQ,CAC1C,KAAM,CAAE,MAAAG,EAAO,UAAAY,CAAU,KAAI,iBAAc,EACrC,CAAC2G,EAAcC,CAAe,KAAI,YAAc,IAAI,EAEpDC,EAAkBC,GAAsB,CAC5C,OAAQA,EAAW,CACjB,KAAK,kCAAgC,OACnC,MAAO,SACT,KAAK,kCAAgC,KACnC,MAAO,gBAAgB9G,EAAY,EAAI,KAAKA,CAAS,UAAY,EAAE,GACrE,KAAK,kCAAgC,QACnC,MAAO,eACT,KAAK,kCAAgC,WACnC,MAAO,aACT,QACE,MAAO,QACX,CACF,EAEM+G,KAAoB,eACxB,CAACC,EAAazD,IAAkB,CAE9B,OADAqD,EAAgBrD,CAAK,EACbyD,GAAQ,UAAW,CACzB,KAAK,kCAAgC,OACnC5H,GAAO,SAAS,EAChB,MACF,KAAK,kCAAgC,KACnCA,GAAO,OAAO,EACd,MACF,KAAK,kCAAgC,QACnCA,GAAO,UAAU,EACjB,MACF,KAAK,kCAAgC,WACnCA,GAAO,aAAa,EACpB,MACF,QACE,MAAO,IAAM,CAAC,CAClB,CACF,EACA,CAACA,CAAK,CACR,EAEA,SACE,OAAC,OAAI,UAAU,wCACZ,eAAM,QAAQiF,CAAO,GACpBA,GAAS,IAAI,CAAC2C,EAAazD,OACzB,QAAC,UACC,UAAU,sDAEV,IAAKyD,EAAO,YAAc,kCAAgC,QAAU/H,EAAM,KAC1E,QAAS,IAAM8H,EAAkBC,EAAQzD,CAAK,EAC9C,aAAYsD,EAAeG,EAAO,SAAS,EAC3C,eAAcN,GAAgBC,IAAiBpD,EAE/C,oBAAC,QACC,KAAMyD,EAAO,KACb,aAAW,MAAG,SAAU,CAAE,eAAgBN,GAAgBC,IAAiBpD,CAAM,CAAC,EAClF,cAAY,OACd,EACCyD,EAAO,YAAc,kCAAgC,MAAQhH,EAAY,MACxE,OAAC,OACC,UAAU,uIACV,cAAY,OAEZ,mBAAC,QAAK,KAAMA,GAAW,SAAS,EAAG,UAAU,6CAA6C,EAC5F,IAjBGgH,EAAO,EAmBd,CACD,EACL,CAEJ,CACF,EAEMjB,GAAkB,CAAC,CAAE,MAAAkB,EAAO,gBAAAV,EAAiB,gBAAAW,CAAgB,OAE/D,QAAC,OAAI,UAAU,iCACb,oBAAC,UACC,UAAU,6CACV,QAAS,IAAMA,EAAgB,EAC/B,aAAW,wBAEX,mBAAC,aAAU,UAAU,SAAS,cAAY,OAAO,EACnD,KACA,OAAC,QAAK,KAAMD,EAAO,UAAU,uDAAuD,KACpF,OAAC,UACC,UAAU,6CACV,QAAS,IAAMV,EAAgB,EAC/B,aAAW,aAEX,mBAAC,SAAM,UAAU,SAAS,cAAY,OAAO,EAC/C,GACF,EAIJxE,GAAiB,YAAc,mBAC/B2C,GAAQ,YAAc,UACtB3F,GAAiB,YAAc,mBAC/B+C,GAAkB,YAAc,oBAEhC,IAAOzE,MAAQ,eAAW0B,EAAgB",
|
|
6
|
-
"names": ["HeaderNavigation_exports", "__export", "HeaderNavigation_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_components", "import_Styles", "import_utils", "import_NavProvider", "import_types", "import_jump", "import_gsap", "import_withCategory", "import_icons", "import_NavigationSearch", "import_ResourceSidebarDropdown", "import_MobileResourceSidebarMenu", "import_SidebarDropdown", "import_useScrollLock", "import_MulticolDropdown", "import_SupportsDropdown", "import_MobileSidebarMenu", "import_MobileSupportMenu", "import_MobileMulticolMenu", "import_MobileMenuComponents", "import_AiuiProvider", "import_throttle", "HeaderNavigation", "props", "ref", "header", "buildProps", "event", "profile", "theme", "isTop", "searchResult", "onSearch", "isSearching", "keywords", "onPrimaryNavClick", "onSeriesProductClick", "onSidebarNavClick", "headerId", "cartCount", "menuData", "render", "rest", "searchOpen", "setSearchOpen", "headerHidden", "setHeaderHidden", "changeHeaderBackground", "setChangeHeaderBackground", "isMobile", "setIsMobile", "searchRef", "headerRef", "resizeWindow", "offsetWidth", "jump", "lastScrollY", "upwardDistance", "downwardDistance", "getScrollTop", "initialScrollTop", "handleScroll", "throttle", "currentScrollY", "delta", "searchPage", "item", "CustomMobileHeaderNavigation", "NavProvider", "DesktopNavigation", "MobileNavigation", "NavigationSearch", "value", "e", "data", "onNavItemClick", "className", "downdownHover", "setDowndownHover", "locale", "groupCategories", "categoriesItem", "setCategoriesItem", "navStatusArray", "setNavStatusArray", "profileRef", "userProfileOpen", "setUserProfileOpen", "dropdownRef", "navItemRefs", "categories", "groupItem", "groupIndex", "_", "index", "currentNavItem", "handleNavItemClick", "currentCategoriesItem", "position", "prev", "handleNavItemKeyDown", "handleNavMenuClose", "currentBlockTypeCategories", "SidebarDropdownComp", "ResourceSidebarDropdownComp", "MulticolDropdownComp", "SupportsDropdownComp", "DropdownComp", "actions", "profileAction", "handleProfileClick", "profileRefElement", "Logo", "Actions", "isExpanded", "el", "currentMenu", "setCurrentMenu", "subSubCategory", "mobileMenuOpen", "setMobileMenuOpen", "menuInnerHeight", "setMenuInnerHeight", "mobileMenuRef", "rect", "MobileSupportMenuComp", "MobileSidebarMenuComp", "MobileResourceSidebarMenuComp", "MobileMulticolMenuComp", "MobileCategoriesMenuComp", "handleSecondaryMenuClose", "menuActions", "MobileCategoriesHeaderComp", "PrimaryHeader", "SecondaryHeader", "handlePrimaryMenuClick", "MobilePrimaryMenu", "onPrimaryMenuClick", "ProfileComp", "profileOpen", "setProfileOpen", "menuOpen", "onMenuOpenClose", "onMenuOpenClick", "payloadData", "activeStatus", "activeAction", "setActiveAction", "getActionLabel", "blockType", "handleActionClick", "action", "title", "onMenuBackClick"]
|
|
4
|
+
"sourcesContent": ["'use client'\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport { Picture, Text, Button, Container, BrandStrip } from '../../components/index.js'\n\nimport { withLayout } from '../../shared/Styles.js'\n\nimport { cn, getLocalizedPath } 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 jump from 'jump.js'\n\nimport { useGSAP } from '@gsap/react'\nimport { gsap } from 'gsap'\n\nimport { WithSidebar, WithSupports, WithMulticol, WithGroupCategory, WithResource } from './withCategory.js'\n\nimport { Menu, Close, User, LeftArrow, DownArrow, Polygon } from './icons/index.js'\n\nimport NavigationSearch from '../NavigationSearch/index.js'\nimport { ResourceSidebarDropdown } from './ResourceSidebarDropdown.js'\nimport { MobileResourceSidebarMenu } from './MobileResourceSidebarMenu.js'\nimport { SidebarDropdown } from './SidebarDropdown.js'\nimport { useScrollLock } from './useScrollLock.js'\nimport { MulticolDropdown } from './MulticolDropdown.js'\nimport { SupportsDropdown } from './SupportsDropdown.js'\nimport { MobileSidebarMenu } from './MobileSidebarMenu.js'\nimport { MobileSupportMenu } from './MobileSupportMenu.js'\nimport { MobileMulticolMenu } from './MobileMulticolMenu.js'\nimport { MenuItem } from './MobileMenuComponents.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport throttle from '../../shared/throttle.js'\n\nconst HeaderNavigation = forwardRef<HTMLDivElement, HeaderNavigationProps>((props, ref) => {\n const {\n data: { header } = {},\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 onMobileMenuToggle,\n headerId,\n cartCount,\n menuData,\n render,\n ...rest\n } = props\n\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 const searchRef = useRef<HTMLDivElement>(null)\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 // \u5982\u679C isTop \u4E3A true\uFF0C\u4E0D\u9700\u8981\u6EDA\u52A8\u76D1\u542C\u548C\u52A8\u6548\n if (isTop) {\n setHeaderHidden(false)\n setChangeHeaderBackground(false)\n return\n }\n\n let lastScrollY = 0\n let upwardDistance = 0\n let downwardDistance = 0\n\n const getScrollTop = () => {\n return document?.documentElement?.scrollTop || document?.body?.scrollTop || 0\n }\n\n // \u521D\u59CB\u5316\u72B6\u6001\n const initialScrollTop = getScrollTop()\n lastScrollY = initialScrollTop\n setHeaderHidden(initialScrollTop > 300)\n setChangeHeaderBackground(initialScrollTop > 30)\n\n const handleScroll = throttle(() => {\n const currentScrollY = getScrollTop()\n const delta = currentScrollY - lastScrollY\n\n // \u66F4\u65B0\u80CC\u666F\u72B6\u6001\n setChangeHeaderBackground(currentScrollY > 30)\n\n if (delta > 0) {\n // \u5411\u4E0B\u6EDA\u52A8\n upwardDistance = 0 // \u91CD\u7F6E\u5411\u4E0A\u7D2F\u8BA1\n downwardDistance += delta\n\n if (downwardDistance >= 300 && currentScrollY > 300) {\n setHeaderHidden(true)\n }\n } else if (delta < 0) {\n // \u5411\u4E0A\u6EDA\u52A8\n downwardDistance = 0 // \u91CD\u7F6E\u5411\u4E0B\u7D2F\u8BA1\n upwardDistance += Math.abs(delta)\n\n if (upwardDistance >= 300) {\n setHeaderHidden(false)\n upwardDistance = 0\n }\n }\n\n lastScrollY = currentScrollY\n }, 100)\n\n window.addEventListener('scroll', handleScroll, { passive: true })\n return () => window.removeEventListener('scroll', handleScroll)\n }, [isTop])\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 useScrollLock(searchOpen)\n\n const searchPage = useMemo(() => {\n return (\n header?.bar?.actions?.find((item: any) => item?.blockType === HeaderNavigationActionBlockType.Search)\n ?.searchBar?.[0] || {}\n )\n }, [header])\n\n const CustomMobileHeaderNavigation = render?.mobileHeaderNavigation\n\n return (\n <NavProvider\n buildProps={buildProps}\n profile={profile}\n isMobile={isMobile}\n event={event}\n payloadData={header}\n onSidebarNavClick={onSidebarNavClick}\n onSeriesProductClick={onSeriesProductClick}\n cartCount={cartCount}\n >\n <header\n {...rest}\n id={headerId || 'header'}\n data-ui-component-id=\"HeaderNavigation\"\n className={\n isTop\n ? 'relative z-[100] bg-white'\n : cn('sticky top-0 z-[100] transition-transform duration-500 ease-in-out', {\n ['translate-y-[-100%]']: headerHidden,\n })\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']: !isTop && changeHeaderBackground,\n },\n {\n ['hover:!text-black']: theme === 'dark',\n ['!text-black']: !isTop && changeHeaderBackground,\n }\n )}\n onClick={() => !isTop && setChangeHeaderBackground(true)}\n >\n <DesktopNavigation\n data={header}\n className=\"desktop:block hidden !bg-white\"\n theme={theme}\n onNavItemClick={() => !isTop && setChangeHeaderBackground(true)}\n onPrimaryNavClick={onPrimaryNavClick}\n />\n {CustomMobileHeaderNavigation ? (\n <CustomMobileHeaderNavigation\n className=\"desktop:hidden block !bg-white\"\n menuData={menuData}\n data={header}\n onPrimaryNavClick={onPrimaryNavClick}\n />\n ) : (\n <MobileNavigation\n menuData={menuData}\n data={header}\n className=\"desktop:hidden block !bg-white\"\n onPrimaryNavClick={onPrimaryNavClick}\n onMobileMenuToggle={onMobileMenuToggle}\n />\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 role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Search\"\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\n className=\"flex-1 bg-transparent\"\n onClick={() => setSearchOpen(false)}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close search\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n setSearchOpen(false)\n }\n }}\n />\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 const { locale = 'us' } = useAiuiContext()\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<HTMLButtonElement>(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 useScrollLock(!!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 const currentCategoriesItem = groupCategories[groupIndex][index]\n if (currentCategoriesItem?.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 currentCategoriesItem?.components?.[0]?.url &&\n window.open(\n currentCategoriesItem?.components?.[0]?.url,\n currentCategoriesItem?.components?.[0]?.target ?? '_blank'\n )\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 setCategoriesItem(currentCategoriesItem)\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 handleNavItemKeyDown = (e: React.KeyboardEvent, groupIndex: number, index: number) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleNavItemClick(e, groupIndex, index)\n } else if (e.key === 'Escape' && currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index) {\n e.preventDefault()\n handleNavMenuClose()\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 ResourceSidebarDropdownComp = WithResource(ResourceSidebarDropdown, 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.Resource:\n return <ResourceSidebarDropdownComp />\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?.bar?.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 HTMLButtonElement\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 <nav className=\"flex justify-between\" role=\"navigation\" aria-label=\"Primary navigation\">\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 const isExpanded = currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index\n return (\n <div\n key={item.id}\n ref={(el: HTMLDivElement) => {\n navItemRefs.current[groupIndex][index] = el\n }}\n className=\"group\"\n >\n <div className=\"relative\">\n <button\n className=\"flex cursor-pointer items-center gap-1 border-0 bg-transparent pb-4\"\n onClick={e => handleNavItemClick(e, groupIndex, index)}\n onKeyDown={e => handleNavItemKeyDown(e, groupIndex, index)}\n aria-expanded={isExpanded}\n aria-haspopup=\"true\"\n aria-label={item.text}\n >\n <Text html={item.text} className=\"text-sm font-bold leading-[1.4]\" />\n {/* <DownArrow\n aria-hidden=\"true\"\n className={cn('size-4 opacity-0 transition-opacity duration-500 group-hover:opacity-100', {\n ['rotate-180']: isExpanded,\n ['opacity-100']: downdownHover && isExpanded,\n })}\n /> */}\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 ['invisible']:\n !item?.components?.length ||\n item?.components?.[0]?.blockType === HeaderNavigationBlockType.Links,\n })}\n />\n </button>\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)]': isExpanded,\n },\n theme === 'dark' ? 'bg-white' : 'bg-[#080A0F]'\n )}\n aria-hidden=\"true\"\n />\n </div>\n </div>\n )\n })}\n </div>\n )\n })}\n </nav>\n </div>\n <div\n role=\"menu\"\n aria-hidden={!(currentNavItem?.open && categoriesItem)}\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\n className=\"flex-1 bg-transparent\"\n onClick={handleNavMenuClose}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close menu\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n handleNavMenuClose()\n }\n }}\n />\n </div>\n {userProfileOpen && (\n <div\n className=\"absolute left-0 top-full z-[999] flex h-dvh w-full bg-black/70\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"User profile menu\"\n // style={{\n // height: `calc(100dvh - ${profileRef?.current?.getBoundingClientRect()?.bottom}px)`,\n // top: `calc(96px)`,\n // }}\n >\n <div\n className=\"rounded-box absolute w-[272px] overflow-hidden 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]\" aria-hidden=\"true\" />\n <nav className=\"mt-2\" role=\"navigation\" aria-label=\"Profile navigation\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem\n className=\"py-2\"\n key={item.id}\n label={item?.title}\n href={getLocalizedPath(item?.url, locale)}\n />\n ))}\n </nav>\n </>\n ) : (\n <>\n <Polygon className=\"absolute -top-2 right-[46px] z-30 text-white\" aria-hidden=\"true\" />\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\n className=\"flex-1 bg-transparent\"\n onClick={() => setUserProfileOpen(false)}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close profile menu\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n setUserProfileOpen(false)\n }\n }}\n />\n </div>\n )}\n </Container>\n )\n})\n\nconst MobileNavigation = forwardRef<HTMLDivElement, MobileNavigationProps>(\n ({ data, menuData, className, onPrimaryNavClick, onMobileMenuToggle }, 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\n onMobileMenuToggle?.({ open: mobileMenuOpen })\n }, [mobileMenuOpen, onMobileMenuToggle])\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 useScrollLock(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 MobileResourceSidebarMenuComp = WithResource(MobileResourceSidebarMenu, 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.Resource:\n return <MobileResourceSidebarMenuComp />\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?.bar?.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?.bar?.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 &&\n window.open(categoriesItem?.components?.[0]?.url, categoriesItem?.components?.[0]?.target ?? '_blank')\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 <nav\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 role=\"navigation\"\n aria-label=\"Mobile navigation menu\"\n >\n {currentMenu === HeaderNavigationMenu.Primary && menuData ? (\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 </nav>\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 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 ProfileComp = ({ profileAction }: { profileAction: any }) => {\n const [profileOpen, setProfileOpen] = useState(false)\n const { profile, event } = useNavContext()\n const { locale = 'us' } = useAiuiContext()\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 <button\n className=\"flex w-full cursor-pointer items-center justify-between border-0 bg-transparent\"\n onClick={() => setProfileOpen(!profileOpen)}\n aria-expanded={profileOpen}\n aria-label={profile?.nick_name || profileAction?.welcome}\n >\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 aria-hidden=\"true\" />\n </div>\n <Text html={profile?.nick_name || profileAction?.welcome} className=\"text-base font-bold leading-[1.4]\" />\n </div>\n {!profile?.email && (\n <DownArrow aria-hidden=\"true\" className={cn('laptop:size-4 size-5', { 'rotate-180': profileOpen })} />\n )}\n </button>\n {profile?.email && (\n <nav className=\"mt-4\" role=\"navigation\" aria-label=\"Profile menu\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem key={item.id} label={item?.title} href={getLocalizedPath(item?.url, locale)} />\n ))}\n </nav>\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 <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClose()}\n aria-label=\"Close menu\"\n aria-expanded=\"true\"\n >\n <Close className=\"size-5\" aria-hidden=\"true\" />\n </button>\n ) : (\n <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClick()}\n aria-label=\"Open menu\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\"\n >\n <Menu className=\"size-5\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n </div>\n )\n}\n\nconst Logo = () => {\n const { payloadData, isMobile } = useNavContext()\n const { locale = 'us' } = useAiuiContext()\n return (\n <a\n href={getLocalizedPath('/', locale)}\n className=\"hover:text-brand-0 [&>svg]:w-full\"\n aria-label=\"Home\"\n dangerouslySetInnerHTML={{\n __html: isMobile ? payloadData?.bar?.mobileLogo : payloadData?.bar?.desktopLogo,\n }}\n />\n )\n}\n\nconst Actions = forwardRef<HTMLButtonElement, { actions: any; activeStatus?: boolean }>(\n ({ actions, activeStatus = false }, ref) => {\n const { event, cartCount } = useNavContext()\n const [activeAction, setActiveAction] = useState<any>(null)\n\n const getActionLabel = (blockType: string) => {\n switch (blockType) {\n case HeaderNavigationActionBlockType.Search:\n return 'Search'\n case HeaderNavigationActionBlockType.Cart:\n return `Shopping cart${cartCount > 0 ? ` (${cartCount} items)` : ''}`\n case HeaderNavigationActionBlockType.Profile:\n return 'User profile'\n case HeaderNavigationActionBlockType.Livestream:\n return 'Livestream'\n default:\n return 'Action'\n }\n }\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 <button\n className=\"relative cursor-pointer border-0 bg-transparent p-0\"\n key={action.id}\n ref={action.blockType === HeaderNavigationActionBlockType.Profile ? ref : null}\n onClick={() => handleActionClick(action, index)}\n aria-label={getActionLabel(action.blockType)}\n aria-pressed={activeStatus && activeAction === index}\n >\n <Text\n html={action.icon}\n className={cn('size-5', { 'text-brand-0': activeStatus && activeAction === index })}\n aria-hidden=\"true\"\n />\n {action.blockType === HeaderNavigationActionBlockType.Cart && cartCount > 0 && (\n <div\n 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 aria-hidden=\"true\"\n >\n <Text html={cartCount?.toString()} className=\"text-sm font-bold leading-[1.2] text-white\" />\n </div>\n )}\n </button>\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 <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuBackClick()}\n aria-label=\"Back to previous menu\"\n >\n <LeftArrow className=\"size-5\" aria-hidden=\"true\" />\n </button>\n <Text html={title} className=\"flex-1 text-center text-base font-bold leading-[1.4]\" />\n <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClose()}\n aria-label=\"Close menu\"\n >\n <Close className=\"size-5\" aria-hidden=\"true\" />\n </button>\n </div>\n )\n}\n\nMobileNavigation.displayName = 'MobileNavigation'\nActions.displayName = 'Actions'\nHeaderNavigation.displayName = 'HeaderNavigation'\nDesktopNavigation.displayName = 'DesktopNavigation'\n\nexport default withLayout(HeaderNavigation)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["HeaderNavigation_exports", "__export", "HeaderNavigation_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_components", "import_Styles", "import_utils", "import_NavProvider", "import_types", "import_jump", "import_gsap", "import_withCategory", "import_icons", "import_NavigationSearch", "import_ResourceSidebarDropdown", "import_MobileResourceSidebarMenu", "import_SidebarDropdown", "import_useScrollLock", "import_MulticolDropdown", "import_SupportsDropdown", "import_MobileSidebarMenu", "import_MobileSupportMenu", "import_MobileMulticolMenu", "import_MobileMenuComponents", "import_AiuiProvider", "import_throttle", "HeaderNavigation", "props", "ref", "header", "buildProps", "event", "profile", "theme", "isTop", "searchResult", "onSearch", "isSearching", "keywords", "onPrimaryNavClick", "onSeriesProductClick", "onSidebarNavClick", "onMobileMenuToggle", "headerId", "cartCount", "menuData", "render", "rest", "searchOpen", "setSearchOpen", "headerHidden", "setHeaderHidden", "changeHeaderBackground", "setChangeHeaderBackground", "isMobile", "setIsMobile", "searchRef", "headerRef", "resizeWindow", "offsetWidth", "jump", "lastScrollY", "upwardDistance", "downwardDistance", "getScrollTop", "initialScrollTop", "handleScroll", "throttle", "currentScrollY", "delta", "searchPage", "item", "CustomMobileHeaderNavigation", "NavProvider", "DesktopNavigation", "MobileNavigation", "NavigationSearch", "value", "e", "data", "onNavItemClick", "className", "downdownHover", "setDowndownHover", "locale", "groupCategories", "categoriesItem", "setCategoriesItem", "navStatusArray", "setNavStatusArray", "profileRef", "userProfileOpen", "setUserProfileOpen", "dropdownRef", "navItemRefs", "categories", "groupItem", "groupIndex", "_", "index", "currentNavItem", "handleNavItemClick", "currentCategoriesItem", "position", "prev", "handleNavItemKeyDown", "handleNavMenuClose", "currentBlockTypeCategories", "SidebarDropdownComp", "ResourceSidebarDropdownComp", "MulticolDropdownComp", "SupportsDropdownComp", "DropdownComp", "actions", "profileAction", "handleProfileClick", "profileRefElement", "Logo", "Actions", "isExpanded", "el", "currentMenu", "setCurrentMenu", "subSubCategory", "mobileMenuOpen", "setMobileMenuOpen", "menuInnerHeight", "setMenuInnerHeight", "mobileMenuRef", "rect", "MobileSupportMenuComp", "MobileSidebarMenuComp", "MobileResourceSidebarMenuComp", "MobileMulticolMenuComp", "MobileCategoriesMenuComp", "handleSecondaryMenuClose", "menuActions", "MobileCategoriesHeaderComp", "PrimaryHeader", "SecondaryHeader", "handlePrimaryMenuClick", "MobilePrimaryMenu", "onPrimaryMenuClick", "ProfileComp", "profileOpen", "setProfileOpen", "menuOpen", "onMenuOpenClose", "onMenuOpenClick", "payloadData", "activeStatus", "activeAction", "setActiveAction", "getActionLabel", "blockType", "handleActionClick", "action", "title", "onMenuBackClick"]
|
|
7
7
|
}
|
|
@@ -6,6 +6,9 @@ export interface HeaderNavigationProps extends Omit<React.HTMLAttributes<HTMLEle
|
|
|
6
6
|
onPrimaryNavClick?: (_category: any, _position: number) => void;
|
|
7
7
|
onSidebarNavClick?: (_series: any, _index: number) => void;
|
|
8
8
|
onSeriesProductClick?: (_product: any, _position: number, _seriesLabel?: string) => void;
|
|
9
|
+
onMobileMenuToggle?: (data: {
|
|
10
|
+
open?: boolean;
|
|
11
|
+
}) => void;
|
|
9
12
|
searchResult?: any;
|
|
10
13
|
onSearch?: (_value?: string) => void;
|
|
11
14
|
isSearching?: boolean;
|
|
@@ -70,6 +73,9 @@ export interface MobileNavigationProps {
|
|
|
70
73
|
menuData: any;
|
|
71
74
|
className?: string;
|
|
72
75
|
onPrimaryNavClick?: (_category: any, _position: number) => void;
|
|
76
|
+
onMobileMenuToggle?: (data: {
|
|
77
|
+
open?: boolean;
|
|
78
|
+
}) => void;
|
|
73
79
|
}
|
|
74
80
|
export interface DesktopNavigationProps {
|
|
75
81
|
data: any;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var a=Object.defineProperty;var
|
|
1
|
+
"use strict";var a=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var l=(e,i)=>{for(var t in i)a(e,t,{get:i[t],enumerable:!0})},g=(e,i,t,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let n of m(i))!u.call(e,n)&&n!==t&&a(e,n,{get:()=>i[n],enumerable:!(r=p(i,n))||r.enumerable});return e};var b=e=>g(a({},"__esModule",{value:!0}),e);var v={};l(v,{HeaderNavigationActionBlockType:()=>d,HeaderNavigationBlockType:()=>c,HeaderNavigationMenu:()=>s});module.exports=b(v);var s=(r=>(r.Primary="primary",r.Secondary="secondary",r.Third="third",r))(s||{}),c=(o=>(o.Sidebar="ipc-navigation-sidebar",o.Supports="ipc-navigation-supports",o.Multicol="ipc-navigation-multicol",o.Links="ipc-navigation-links",o.Resource="ipc-navigation-resource",o))(c||{}),d=(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))(d||{});
|
|
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 React from 'react'\nimport type { Product } from '../../cpn-components/CpnProductCard/types.js'\n\nexport interface HeaderNavigationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'className'> {\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, _seriesLabel?: string) => 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 render?: {\n mobileHeaderNavigation?: (props: MobileNavigationProps) => React.ReactNode\n }\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 Resource = 'ipc-navigation-resource',\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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qCAAAE,EAAA,8BAAAC,EAAA,yBAAAC,IAAA,eAAAC,EAAAL,
|
|
4
|
+
"sourcesContent": ["import type React from 'react'\nimport type { Product } from '../../cpn-components/CpnProductCard/types.js'\n\nexport interface HeaderNavigationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'className'> {\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, _seriesLabel?: string) => void\n onMobileMenuToggle?: (data: { open?: boolean }) => 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 render?: {\n mobileHeaderNavigation?: (props: MobileNavigationProps) => React.ReactNode\n }\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 Resource = 'ipc-navigation-resource',\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 onMobileMenuToggle?: (data: { open?: boolean }) => 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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qCAAAE,EAAA,8BAAAC,EAAA,yBAAAC,IAAA,eAAAC,EAAAL,GAsDO,IAAKI,OACVA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,MAAQ,QAHEA,OAAA,IAMAD,OACVA,EAAA,QAAU,yBACVA,EAAA,SAAW,0BACXA,EAAA,SAAW,0BACXA,EAAA,MAAQ,uBACRA,EAAA,SAAW,0BALDA,OAAA,IAQAD,OACVA,EAAA,OAAS,+BACTA,EAAA,KAAO,6BACPA,EAAA,QAAU,gCACVA,EAAA,WAAa,mCAJHA,OAAA",
|
|
6
6
|
"names": ["types_exports", "__export", "HeaderNavigationActionBlockType", "HeaderNavigationBlockType", "HeaderNavigationMenu", "__toCommonJS"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{Fragment as Se,jsx as e,jsxs as n}from"react/jsx-runtime";import{forwardRef as ee,useCallback as te,useEffect as J,useImperativeHandle as De,useMemo as w,useRef as Y,useState as M}from"react";import{Picture as me,Text as x,Button as ae,Container as pe,BrandStrip as Ee}from"../../components/index.js";import{withLayout as Te}from"../../shared/Styles.js";import{cn as S,getLocalizedPath as re}from"../../helpers/utils.js";import He,{useNavContext as X}from"./NavProvider.js";import{HeaderNavigationMenu as I,HeaderNavigationBlockType as P,HeaderNavigationActionBlockType as C}from"./types.js";import Le from"jump.js";import{useGSAP as ie}from"@gsap/react";import{gsap as le}from"gsap";import{WithSidebar as fe,WithSupports as be,WithMulticol as ve,WithGroupCategory as ge,WithResource as he}from"./withCategory.js";import{Menu as ze,Close as ye,User as Be,LeftArrow as Re,DownArrow as Ne,Polygon as Ie}from"./icons/index.js";import Ae from"../NavigationSearch/index.js";import{ResourceSidebarDropdown as Oe}from"./ResourceSidebarDropdown.js";import{MobileResourceSidebarMenu as je}from"./MobileResourceSidebarMenu.js";import{SidebarDropdown as _e}from"./SidebarDropdown.js";import{useScrollLock as se}from"./useScrollLock.js";import{MulticolDropdown as We}from"./MulticolDropdown.js";import{SupportsDropdown as $e}from"./SupportsDropdown.js";import{MobileSidebarMenu as Ke}from"./MobileSidebarMenu.js";import{MobileSupportMenu as Fe}from"./MobileSupportMenu.js";import{MobileMulticolMenu as Ue}from"./MobileMulticolMenu.js";import{MenuItem as ce}from"./MobileMenuComponents.js";import{useAiuiContext as ue}from"../AiuiProvider/index.js";import Ge from"../../shared/throttle.js";const ke=ee((a,u)=>{const{data:{header:i}={},buildProps:d,event:h,profile:b,theme:o="light",isTop:r=!1,searchResult:E,onSearch:l,isSearching:y,keywords:$,onPrimaryNavClick:N,onSeriesProductClick:m,onSidebarNavClick:q,headerId:L,cartCount:A,menuData:T,render:K,...O}=a,[z,B]=M(!1),[j,c]=M(!1),[F,R]=M(!1),[_,v]=M(!1),U=Y(null),k=Y(null),Q=()=>{const g=document?.querySelector("body")?.offsetWidth||0;v(g<=1440)};J(()=>(Q(),window.addEventListener("resize",Q),()=>{window.removeEventListener("resize",Q)}),[]),De(u,()=>k.current),J(()=>{k.current&&r&&Le(k.current,{duration:0,offset:k.current?.getBoundingClientRect()?.bottom||0})},[r]),J(()=>{if(r){c(!1),R(!1);return}let g=0,D=0,G=0;const t=()=>document?.documentElement?.scrollTop||document?.body?.scrollTop||0,s=t();g=s,c(s>300),R(s>30);const p=Ge(()=>{const f=t(),H=f-g;R(f>30),H>0?(D=0,G+=H,G>=300&&f>300&&c(!0)):H<0&&(G=0,D+=Math.abs(H),D>=300&&(c(!1),D=0)),g=f},100);return window.addEventListener("scroll",p,{passive:!0}),()=>window.removeEventListener("scroll",p)},[r]),J(()=>{h&&(h.search=()=>B(!0))},[h]),ie(()=>{U?.current&&z&&le.fromTo(U.current,{height:0},{height:"auto",duration:.3})},[z]),se(z);const ne=w(()=>i?.bar?.actions?.find(g=>g?.blockType===C.Search)?.searchBar?.[0]||{},[i]),Z=K?.mobileHeaderNavigation;return e(He,{buildProps:d,profile:b,isMobile:_,event:h,payloadData:i,onSidebarNavClick:q,onSeriesProductClick:m,cartCount:A,children:e("header",{...O,id:L||"header","data-ui-component-id":"HeaderNavigation",className:r?"relative z-[100] bg-white":S("sticky top-0 z-[100] transition-transform duration-500 ease-in-out",{"translate-y-[-100%]":j}),ref:k,children:n("div",{className:S("hover:bg-white hover:text-black",o==="light"?"text-black":"text-white",{"!bg-white transition-all duration-500 ease-in-out":!r&&F},{"hover:!text-black":o==="dark","!text-black":!r&&F}),onClick:()=>!r&&R(!0),children:[e(xe,{data:i,className:"desktop:block hidden !bg-white",theme:o,onNavItemClick:()=>!r&&R(!0),onPrimaryNavClick:N}),Z?e(Z,{className:"desktop:hidden block !bg-white",menuData:T,data:i,onPrimaryNavClick:N}):e(Ce,{menuData:T,data:i,className:"desktop:hidden block !bg-white",onPrimaryNavClick:N}),z&&n("div",{className:"absolute left-0 top-0 z-[60] flex w-full flex-col bg-black/70",style:{height:`calc(100dvh - ${k?.current?.getBoundingClientRect()?.top}px)`},role:"dialog","aria-modal":"true","aria-label":"Search",children:[e("div",{ref:U,className:S("overflow-y-auto",{}),children:e(Ae,{data:ne,keywords:$,isSearching:y,searchResult:E,onSearch:g=>{l?.(g)},onClose:()=>{l?.(),B(!1)}})}),e("div",{className:"flex-1 bg-transparent",onClick:()=>B(!1),role:"button",tabIndex:0,"aria-label":"Close search",onKeyDown:g=>{(g.key==="Enter"||g.key===" "||g.key==="Escape")&&(g.preventDefault(),B(!1))}})]})]})})})}),xe=ee((a,u)=>{const{data:i,onNavItemClick:d,className:h,theme:b,onPrimaryNavClick:o}=a,{event:r,profile:E}=X(),[l,y]=M(!1),{locale:$="us"}=ue(),N=w(()=>ge(i?.categories?.filter(t=>t?.pcShow)),[i]),[m,q]=M(null),[L,A]=M([]),T=Y(null),[K,O]=M(!1),z=Y(null),B=Y(null),j=Y(N.map(t=>Array(t?.length||0).fill(null)));J(()=>{N?.length&&A(N?.map((t,s)=>t?.map((p,f)=>({groupIndex:s,index:f,open:!1}))))},[N]);const c=w(()=>{let t=null;for(const s of L){for(const p of s)if(p.open){t=p;break}if(t)break}return t},[L]);se(!!c?.open||K);const F=(t,s,p)=>{O(!1);const f=N[s][p];if(f?.components?.[0]?.blockType===P.Links)f?.components?.[0]?.url&&window.open(f?.components?.[0]?.url,f?.components?.[0]?.target??"_blank");else{const H=N?.flat()||[],W=H?.findIndex(oe=>oe?.id===N[s][p]?.id);t.stopPropagation(),d?.(),o?.(H[W],W),q(f),A(oe=>oe.map(Pe=>Pe.map(V=>V.groupIndex===s&&V.index===p?{...V,open:!V.open}:{...V,open:!1})))}},R=(t,s,p)=>{t.key==="Enter"||t.key===" "?(t.preventDefault(),F(t,s,p)):t.key==="Escape"&&c?.groupIndex===s&&c?.index===p&&(t.preventDefault(),_())},_=()=>{A(t=>t.map(s=>s.map(p=>({...p,open:!1}))))},v=w(()=>{if(m)return m?.components?.[0]?.blockType},[m]),U=fe(_e,m),k=he(Oe,m),Q=ve(We,m),ne=be($e,{categoriesItem:m,currentNavItemRef:j.current?.[c?.groupIndex||0]?.[c?.index||0]}),Z=w(()=>{switch(v){case P.Sidebar:return e(U,{});case P.Resource:return e(k,{});case P.Supports:return e(ne,{});case P.Multicol:return e(Q,{});default:return null}},[v,m]),g=w(()=>i?.bar?.actions?.filter(t=>t?.pcShow),[i]),D=w(()=>g?.find(t=>t?.blockType===C.Profile),[g]),G=te(()=>{O(t=>!t)},[]);return J(()=>{if(T?.current){const t=T.current;return t.addEventListener("click",G),()=>{t.removeEventListener("click",G)}}},[G]),ie(()=>{c?.open&&le.fromTo(B?.current,{height:0},{height:"auto"})},[c?.open]),n(pe,{className:S("relative h-[96px]",h),children:[n("div",{ref:z,onClick:_,className:"flex h-full flex-col justify-end gap-4",children:[n("div",{className:"flex items-center justify-between",children:[e(we,{}),e(de,{ref:T,actions:g,activeStatus:K})]}),e("nav",{className:"flex justify-between",role:"navigation","aria-label":"Primary navigation",children:N?.map((t,s)=>e("div",{className:"flex gap-3",children:t?.map((p,f)=>{const H=c?.groupIndex===s&&c?.index===f;return e("div",{ref:W=>{j.current[s][f]=W},className:"group",children:n("div",{className:"relative",children:[n("button",{className:"flex cursor-pointer items-center gap-1 border-0 bg-transparent pb-4",onClick:W=>F(W,s,f),onKeyDown:W=>R(W,s,f),"aria-expanded":H,"aria-haspopup":"true","aria-label":p.text,children:[e(x,{html:p.text,className:"text-sm font-bold leading-[1.4]"}),e(Ne,{className:S("size-4 opacity-0 transition-opacity duration-500 group-hover:opacity-100",{"rotate-180":c?.groupIndex===s&&c?.index===f,"opacity-100":l&&c?.groupIndex===s&&c?.index===f,invisible:!p?.components?.length||p?.components?.[0]?.blockType===P.Links})})]}),e("div",{className:S("absolute bottom-0 left-0 h-[2px] w-0 transition-all duration-500",{"w-[calc(100%-20px)]":H},b==="dark"?"bg-white":"bg-[#080A0F]"),"aria-hidden":"true"})]})},p.id)})},`groupCategory-${s}`))})]}),n("div",{role:"menu","aria-hidden":!(c?.open&&m),className:S("absolute left-0 top-full z-[999] flex w-full flex-col overflow-hidden border-t border-b-[#E4E5E6] bg-black/70 text-black",{hidden:!(c?.open&&m)}),onMouseEnter:()=>y(!0),onMouseLeave:()=>y(!1),style:{height:`calc(100dvh - ${z?.current?.getBoundingClientRect()?.bottom}px)`},children:[e("div",{ref:B,className:S("relative z-50",{"overflow-hidden":v!==P.Supports}),children:Z}),e("div",{className:"flex-1 bg-transparent",onClick:_,role:"button",tabIndex:0,"aria-label":"Close menu",onKeyDown:t=>{(t.key==="Enter"||t.key===" "||t.key==="Escape")&&(t.preventDefault(),_())}})]}),K&&n("div",{className:"absolute left-0 top-full z-[999] flex h-dvh w-full bg-black/70",role:"dialog","aria-modal":"true","aria-label":"User profile menu",children:[e("div",{className:"rounded-box absolute w-[272px] overflow-hidden bg-white p-4",style:{right:`calc(100% - ${T?.current?.getBoundingClientRect()?.right}px)`,top:"-36px"},children:E?.email?n(Se,{children:[e(x,{html:E?.nick_name||D?.welcome,className:"text-sm font-bold"}),e("div",{className:"mt-2 h-px bg-[#D9D9D9]","aria-hidden":"true"}),e("nav",{className:"mt-2",role:"navigation","aria-label":"Profile navigation",children:D?.profiles?.map(t=>e(ce,{className:"py-2",label:t?.title,href:re(t?.url,$)},t.id))})]}):n(Se,{children:[e(Ie,{className:"absolute -top-2 right-[46px] z-30 text-white","aria-hidden":"true"}),e(x,{html:D?.benefits_title,className:"text-sm font-bold leading-[1.4]"}),e("div",{className:"mt-2 flex flex-col gap-1",children:D?.benefits?.map(t=>n("div",{className:"flex items-center gap-[6px]",children:[e(me,{source:t.benefitIcon?.url,className:"size-4",alt:t.benefit,width:16,height:16}),e(x,{html:t.benefit,className:"text-sm font-bold leading-[1.4]"})]},t.id))}),n("div",{className:"mt-4 flex items-center gap-2",children:[e(ae,{variant:"secondary",size:"lg",onClick:()=>r?.join?.(),children:e(x,{html:D?.primaryButton||"Join Now",className:"font-bold"})}),e(ae,{variant:"primary",size:"lg",onClick:()=>r?.login?.(),children:e(x,{html:D?.secondaryButton||"Log In",className:"font-bold"})})]})]})}),e("div",{className:"flex-1 bg-transparent",onClick:()=>O(!1),role:"button",tabIndex:0,"aria-label":"Close profile menu",onKeyDown:t=>{(t.key==="Enter"||t.key===" "||t.key==="Escape")&&(t.preventDefault(),O(!1))}})]})]})}),Ce=ee(({data:a,menuData:u,className:i,onPrimaryNavClick:d},h)=>{const b=w(()=>ge(a?.categories?.filter(v=>v?.mobileShow)),[a]),{currentMenu:o,setCurrentMenu:r,subSubCategory:E}=X(),[l,y]=M(!1),[$,N]=M(0),[m,q]=M(null),L=Y(null);J(()=>{if(L?.current&&l){const v=L?.current?.getBoundingClientRect();N(window?.innerHeight-(v?.bottom||0))}},[l]),ie(()=>{le.fromTo(L.current,{height:0},{height:$,duration:.3})},[$]),se(l);const A=w(()=>m?.components?.[0]?.blockType,[m]),T=be(Fe,{categoriesItem:m}),K=fe(Ke,m),O=he(je,m),z=ve(Ue,m),B=w(()=>{switch(A){case P.Sidebar:return e(K,{});case P.Resource:return e(O,{});case P.Supports:return e(T,{});case P.Multicol:return e(z,{});default:return null}},[A,m,T]),j=te(()=>{y(!1),N(0),r&&r(I.Primary)},[y,N,r]),c=w(()=>a?.bar?.actions?.filter(v=>v?.mobileShow&&v?.blockType!==C.Profile),[a]),F=w(()=>a?.bar?.actions?.find(v=>v?.mobileShow&&v?.blockType===C.Profile)||{},[a]),R=w(()=>{switch(o){case I.Primary:return e(qe,{actions:c,menuOpen:l,onMenuOpenClose:()=>{y(!1),N(0)},onMenuOpenClick:()=>y(!0)});case I.Secondary:return e(Me,{title:m?.text,onMenuOpenClose:j,onMenuBackClick:()=>r?.(I.Primary)});case I.Third:return e(Me,{title:E?.label,onMenuOpenClose:j,onMenuBackClick:()=>r?.(I.Secondary)});default:return null}},[l,o,r,m,c,E,j]),_=te((v,U)=>{const k=Array.isArray(b)?Array.isArray(b[v])?b[v][U]:{}:{};q(k),k?.components?.[0]?.blockType===P.Links?k?.components?.[0]?.url&&window.open(k?.components?.[0]?.url,k?.components?.[0]?.target??"_blank"):r?.(I.Secondary)},[b,r]);return n(pe,{className:S("relative h-[52px]",i),children:[R,l&&n("nav",{ref:L,className:"absolute left-0 top-full z-[999] w-full overflow-y-auto border-t border-[#E4E5E6] bg-white text-black",style:{height:$},role:"navigation","aria-label":"Mobile navigation menu",children:[o===I.Primary&&u?e("div",{className:"pt-4",children:e(Ee,{data:u})}):null,o===I.Primary?e(Je,{categories:b,onPrimaryMenuClick:_,onPrimaryNavClick:d,profileAction:F}):B]})]})}),Je=({categories:a,onPrimaryMenuClick:u,profileAction:i,onPrimaryNavClick:d})=>n("div",{className:"flex h-full flex-col justify-between",children:[e("div",{className:"tablet:px-8 laptop:px-16 p-4",children:a?.map((h,b)=>n("div",{className:"",children:[e("div",{className:S("my-2 h-px w-full bg-[#E5E5E7]")}),h?.map((o,r)=>e(ce,{label:o.text,onClick:()=>{const l=(a?.flat()||[])?.findIndex(y=>y?.id===a[b][r]?.id);u(b,r),d?.(o,l)},icon:o.components?.[0]?.icon},o.id))]},`groupCategory-${b}`))}),e(Ye,{profileAction:i})]}),Ye=({profileAction:a})=>{const[u,i]=M(!1),{profile:d,event:h}=X(),{locale:b="us"}=ue();return n("div",{className:S("tablet:px-8 laptop:px-16 bg-[#F5F5F7] px-4 py-6",{"p-4":u}),children:[n("button",{className:"flex w-full cursor-pointer items-center justify-between border-0 bg-transparent",onClick:()=>i(!u),"aria-expanded":u,"aria-label":d?.nick_name||a?.welcome,children:[n("div",{className:"flex items-center gap-[14px]",children:[e("div",{className:"flex size-[40px] shrink-0 items-center justify-center rounded-full bg-white",children:e(Be,{"aria-hidden":"true"})}),e(x,{html:d?.nick_name||a?.welcome,className:"text-base font-bold leading-[1.4]"})]}),!d?.email&&e(Ne,{"aria-hidden":"true",className:S("laptop:size-4 size-5",{"rotate-180":u})})]}),d?.email&&e("nav",{className:"mt-4",role:"navigation","aria-label":"Profile menu",children:a?.profiles?.map(o=>e(ce,{label:o?.title,href:re(o?.url,b)},o.id))}),u&&!d?.email&&n("div",{className:"mt-4",children:[e(x,{html:a?.benefits_title,className:"text-sm font-bold leading-[1.4]"}),e("div",{className:"mt-2 flex flex-col gap-1",children:a?.benefits?.map(o=>n("div",{className:"flex items-center gap-[6px]",children:[e(me,{source:o.benefitIcon?.url,className:"size-4",alt:o.benefit,width:16,height:16}),e(x,{html:o.benefit,className:"text-sm font-bold leading-[1.4]"})]},o.id))})]}),!d?.email&&n("div",{className:"mt-4 flex items-center gap-3",children:[e(ae,{className:"tablet:flex-none flex-1",variant:"secondary",size:"base",onClick:()=>h?.join?.(),children:e(x,{html:a?.primaryButton||"Join Now",className:"text-sm font-bold leading-[1.4]"})}),e(ae,{className:"tablet:flex-none flex-1",variant:"primary",size:"base",onClick:()=>h?.login?.(),children:e(x,{html:a?.secondaryButton||"Log In",className:"text-sm font-bold leading-[1.4]"})})]})]})},qe=({menuOpen:a,onMenuOpenClose:u,onMenuOpenClick:i,actions:d})=>n("div",{className:"flex h-full items-center justify-between gap-4",children:[e(we,{}),n("div",{className:"desktop:gap-6 flex items-center gap-4",children:[e(de,{actions:d}),a?e("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>u(),"aria-label":"Close menu","aria-expanded":"true",children:e(ye,{className:"size-5","aria-hidden":"true"})}):e("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>i(),"aria-label":"Open menu","aria-expanded":"false","aria-haspopup":"true",children:e(ze,{className:"size-5","aria-hidden":"true"})})]})]}),we=()=>{const{payloadData:a,isMobile:u}=X(),{locale:i="us"}=ue();return e("a",{href:re("/",i),className:"hover:text-brand-0 [&>svg]:w-full","aria-label":"Home",dangerouslySetInnerHTML:{__html:u?a?.bar?.mobileLogo:a?.bar?.desktopLogo}})},de=ee(({actions:a,activeStatus:u=!1},i)=>{const{event:d,cartCount:h}=X(),[b,o]=M(null),r=l=>{switch(l){case C.Search:return"Search";case C.Cart:return`Shopping cart${h>0?` (${h} items)`:""}`;case C.Profile:return"User profile";case C.Livestream:return"Livestream";default:return"Action"}},E=te((l,y)=>{switch(o(y),l?.blockType){case C.Search:d?.search?.();break;case C.Cart:d?.cart?.();break;case C.Profile:d?.profile?.();break;case C.Livestream:d?.livestream?.();break;default:return()=>{}}},[d]);return e("div",{className:"desktop:gap-6 flex items-center gap-4",children:Array.isArray(a)&&a?.map((l,y)=>n("button",{className:"relative cursor-pointer border-0 bg-transparent p-0",ref:l.blockType===C.Profile?i:null,onClick:()=>E(l,y),"aria-label":r(l.blockType),"aria-pressed":u&&b===y,children:[e(x,{html:l.icon,className:S("size-5",{"text-brand-0":u&&b===y}),"aria-hidden":"true"}),l.blockType===C.Cart&&h>0&&e("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]","aria-hidden":"true",children:e(x,{html:h?.toString(),className:"text-sm font-bold leading-[1.2] text-white"})})]},l.id))})}),Me=({title:a,onMenuOpenClose:u,onMenuBackClick:i})=>n("div",{className:"flex h-full items-center gap-3",children:[e("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>i(),"aria-label":"Back to previous menu",children:e(Re,{className:"size-5","aria-hidden":"true"})}),e(x,{html:a,className:"flex-1 text-center text-base font-bold leading-[1.4]"}),e("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>u(),"aria-label":"Close menu",children:e(ye,{className:"size-5","aria-hidden":"true"})})]});Ce.displayName="MobileNavigation",de.displayName="Actions",ke.displayName="HeaderNavigation",xe.displayName="DesktopNavigation";var kt=Te(ke);export{kt as default};
|
|
1
|
+
"use client";import{Fragment as Se,jsx as e,jsxs as n}from"react/jsx-runtime";import{forwardRef as ee,useCallback as te,useEffect as U,useImperativeHandle as De,useMemo as P,useRef as G,useState as D}from"react";import{Picture as me,Text as x,Button as ae,Container as pe,BrandStrip as Ee}from"../../components/index.js";import{withLayout as Te}from"../../shared/Styles.js";import{cn as E,getLocalizedPath as re}from"../../helpers/utils.js";import He,{useNavContext as Z}from"./NavProvider.js";import{HeaderNavigationMenu as j,HeaderNavigationBlockType as H,HeaderNavigationActionBlockType as C}from"./types.js";import Le from"jump.js";import{useGSAP as ie}from"@gsap/react";import{gsap as le}from"gsap";import{WithSidebar as fe,WithSupports as be,WithMulticol as ve,WithGroupCategory as ge,WithResource as he}from"./withCategory.js";import{Menu as ze,Close as ye,User as Be,LeftArrow as Re,DownArrow as Ne,Polygon as Ie}from"./icons/index.js";import Ae from"../NavigationSearch/index.js";import{ResourceSidebarDropdown as Oe}from"./ResourceSidebarDropdown.js";import{MobileResourceSidebarMenu as je}from"./MobileResourceSidebarMenu.js";import{SidebarDropdown as _e}from"./SidebarDropdown.js";import{useScrollLock as se}from"./useScrollLock.js";import{MulticolDropdown as We}from"./MulticolDropdown.js";import{SupportsDropdown as $e}from"./SupportsDropdown.js";import{MobileSidebarMenu as Ke}from"./MobileSidebarMenu.js";import{MobileSupportMenu as Fe}from"./MobileSupportMenu.js";import{MobileMulticolMenu as Ue}from"./MobileMulticolMenu.js";import{MenuItem as ce}from"./MobileMenuComponents.js";import{useAiuiContext as ue}from"../AiuiProvider/index.js";import Ge from"../../shared/throttle.js";const ke=ee((a,l)=>{const{data:{header:r}={},buildProps:s,event:b,profile:w,theme:o="light",isTop:c=!1,searchResult:h,onSearch:p,isSearching:f,keywords:_,onPrimaryNavClick:y,onSeriesProductClick:v,onSidebarNavClick:M,onMobileMenuToggle:J,headerId:L,cartCount:R,menuData:I,render:W,...Y}=a,[A,O]=D(!1),[d,z]=D(!1),[q,T]=D(!1),[K,N]=D(!1),F=G(null),k=G(null),V=()=>{const m=document?.querySelector("body")?.offsetWidth||0;N(m<=1440)};U(()=>(V(),window.addEventListener("resize",V),()=>{window.removeEventListener("resize",V)}),[]),De(l,()=>k.current),U(()=>{k.current&&c&&Le(k.current,{duration:0,offset:k.current?.getBoundingClientRect()?.bottom||0})},[c]),U(()=>{if(c){z(!1),T(!1);return}let m=0,$=0,t=0;const i=()=>document?.documentElement?.scrollTop||document?.body?.scrollTop||0,u=i();m=u,z(u>300),T(u>30);const g=Ge(()=>{const B=i(),S=B-m;T(B>30),S>0?($=0,t+=S,t>=300&&B>300&&z(!0)):S<0&&(t=0,$+=Math.abs(S),$>=300&&(z(!1),$=0)),m=B},100);return window.addEventListener("scroll",g,{passive:!0}),()=>window.removeEventListener("scroll",g)},[c]),U(()=>{b&&(b.search=()=>O(!0))},[b]),ie(()=>{F?.current&&A&&le.fromTo(F.current,{height:0},{height:"auto",duration:.3})},[A]),se(A);const oe=P(()=>r?.bar?.actions?.find(m=>m?.blockType===C.Search)?.searchBar?.[0]||{},[r]),Q=W?.mobileHeaderNavigation;return e(He,{buildProps:s,profile:w,isMobile:K,event:b,payloadData:r,onSidebarNavClick:M,onSeriesProductClick:v,cartCount:R,children:e("header",{...Y,id:L||"header","data-ui-component-id":"HeaderNavigation",className:c?"relative z-[100] bg-white":E("sticky top-0 z-[100] transition-transform duration-500 ease-in-out",{"translate-y-[-100%]":d}),ref:k,children:n("div",{className:E("hover:bg-white hover:text-black",o==="light"?"text-black":"text-white",{"!bg-white transition-all duration-500 ease-in-out":!c&&q},{"hover:!text-black":o==="dark","!text-black":!c&&q}),onClick:()=>!c&&T(!0),children:[e(xe,{data:r,className:"desktop:block hidden !bg-white",theme:o,onNavItemClick:()=>!c&&T(!0),onPrimaryNavClick:y}),Q?e(Q,{className:"desktop:hidden block !bg-white",menuData:I,data:r,onPrimaryNavClick:y}):e(Ce,{menuData:I,data:r,className:"desktop:hidden block !bg-white",onPrimaryNavClick:y,onMobileMenuToggle:J}),A&&n("div",{className:"absolute left-0 top-0 z-[60] flex w-full flex-col bg-black/70",style:{height:`calc(100dvh - ${k?.current?.getBoundingClientRect()?.top}px)`},role:"dialog","aria-modal":"true","aria-label":"Search",children:[e("div",{ref:F,className:E("overflow-y-auto",{}),children:e(Ae,{data:oe,keywords:_,isSearching:f,searchResult:h,onSearch:m=>{p?.(m)},onClose:()=>{p?.(),O(!1)}})}),e("div",{className:"flex-1 bg-transparent",onClick:()=>O(!1),role:"button",tabIndex:0,"aria-label":"Close search",onKeyDown:m=>{(m.key==="Enter"||m.key===" "||m.key==="Escape")&&(m.preventDefault(),O(!1))}})]})]})})})}),xe=ee((a,l)=>{const{data:r,onNavItemClick:s,className:b,theme:w,onPrimaryNavClick:o}=a,{event:c,profile:h}=Z(),[p,f]=D(!1),{locale:_="us"}=ue(),y=P(()=>ge(r?.categories?.filter(t=>t?.pcShow)),[r]),[v,M]=D(null),[J,L]=D([]),R=G(null),[I,W]=D(!1),Y=G(null),A=G(null),O=G(y.map(t=>Array(t?.length||0).fill(null)));U(()=>{y?.length&&L(y?.map((t,i)=>t?.map((u,g)=>({groupIndex:i,index:g,open:!1}))))},[y]);const d=P(()=>{let t=null;for(const i of J){for(const u of i)if(u.open){t=u;break}if(t)break}return t},[J]);se(!!d?.open||I);const z=(t,i,u)=>{W(!1);const g=y[i][u];if(g?.components?.[0]?.blockType===H.Links)g?.components?.[0]?.url&&window.open(g?.components?.[0]?.url,g?.components?.[0]?.target??"_blank");else{const B=y?.flat()||[],S=B?.findIndex(ne=>ne?.id===y[i][u]?.id);t.stopPropagation(),s?.(),o?.(B[S],S),M(g),L(ne=>ne.map(Pe=>Pe.map(X=>X.groupIndex===i&&X.index===u?{...X,open:!X.open}:{...X,open:!1})))}},q=(t,i,u)=>{t.key==="Enter"||t.key===" "?(t.preventDefault(),z(t,i,u)):t.key==="Escape"&&d?.groupIndex===i&&d?.index===u&&(t.preventDefault(),T())},T=()=>{L(t=>t.map(i=>i.map(u=>({...u,open:!1}))))},K=P(()=>{if(v)return v?.components?.[0]?.blockType},[v]),N=fe(_e,v),F=he(Oe,v),k=ve(We,v),V=be($e,{categoriesItem:v,currentNavItemRef:O.current?.[d?.groupIndex||0]?.[d?.index||0]}),oe=P(()=>{switch(K){case H.Sidebar:return e(N,{});case H.Resource:return e(F,{});case H.Supports:return e(V,{});case H.Multicol:return e(k,{});default:return null}},[K,v]),Q=P(()=>r?.bar?.actions?.filter(t=>t?.pcShow),[r]),m=P(()=>Q?.find(t=>t?.blockType===C.Profile),[Q]),$=te(()=>{W(t=>!t)},[]);return U(()=>{if(R?.current){const t=R.current;return t.addEventListener("click",$),()=>{t.removeEventListener("click",$)}}},[$]),ie(()=>{d?.open&&le.fromTo(A?.current,{height:0},{height:"auto"})},[d?.open]),n(pe,{className:E("relative h-[96px]",b),children:[n("div",{ref:Y,onClick:T,className:"flex h-full flex-col justify-end gap-4",children:[n("div",{className:"flex items-center justify-between",children:[e(we,{}),e(de,{ref:R,actions:Q,activeStatus:I})]}),e("nav",{className:"flex justify-between",role:"navigation","aria-label":"Primary navigation",children:y?.map((t,i)=>e("div",{className:"flex gap-3",children:t?.map((u,g)=>{const B=d?.groupIndex===i&&d?.index===g;return e("div",{ref:S=>{O.current[i][g]=S},className:"group",children:n("div",{className:"relative",children:[n("button",{className:"flex cursor-pointer items-center gap-1 border-0 bg-transparent pb-4",onClick:S=>z(S,i,g),onKeyDown:S=>q(S,i,g),"aria-expanded":B,"aria-haspopup":"true","aria-label":u.text,children:[e(x,{html:u.text,className:"text-sm font-bold leading-[1.4]"}),e(Ne,{className:E("size-4 opacity-0 transition-opacity duration-500 group-hover:opacity-100",{"rotate-180":d?.groupIndex===i&&d?.index===g,"opacity-100":p&&d?.groupIndex===i&&d?.index===g,invisible:!u?.components?.length||u?.components?.[0]?.blockType===H.Links})})]}),e("div",{className:E("absolute bottom-0 left-0 h-[2px] w-0 transition-all duration-500",{"w-[calc(100%-20px)]":B},w==="dark"?"bg-white":"bg-[#080A0F]"),"aria-hidden":"true"})]})},u.id)})},`groupCategory-${i}`))})]}),n("div",{role:"menu","aria-hidden":!(d?.open&&v),className:E("absolute left-0 top-full z-[999] flex w-full flex-col overflow-hidden border-t border-b-[#E4E5E6] bg-black/70 text-black",{hidden:!(d?.open&&v)}),onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),style:{height:`calc(100dvh - ${Y?.current?.getBoundingClientRect()?.bottom}px)`},children:[e("div",{ref:A,className:E("relative z-50",{"overflow-hidden":K!==H.Supports}),children:oe}),e("div",{className:"flex-1 bg-transparent",onClick:T,role:"button",tabIndex:0,"aria-label":"Close menu",onKeyDown:t=>{(t.key==="Enter"||t.key===" "||t.key==="Escape")&&(t.preventDefault(),T())}})]}),I&&n("div",{className:"absolute left-0 top-full z-[999] flex h-dvh w-full bg-black/70",role:"dialog","aria-modal":"true","aria-label":"User profile menu",children:[e("div",{className:"rounded-box absolute w-[272px] overflow-hidden bg-white p-4",style:{right:`calc(100% - ${R?.current?.getBoundingClientRect()?.right}px)`,top:"-36px"},children:h?.email?n(Se,{children:[e(x,{html:h?.nick_name||m?.welcome,className:"text-sm font-bold"}),e("div",{className:"mt-2 h-px bg-[#D9D9D9]","aria-hidden":"true"}),e("nav",{className:"mt-2",role:"navigation","aria-label":"Profile navigation",children:m?.profiles?.map(t=>e(ce,{className:"py-2",label:t?.title,href:re(t?.url,_)},t.id))})]}):n(Se,{children:[e(Ie,{className:"absolute -top-2 right-[46px] z-30 text-white","aria-hidden":"true"}),e(x,{html:m?.benefits_title,className:"text-sm font-bold leading-[1.4]"}),e("div",{className:"mt-2 flex flex-col gap-1",children:m?.benefits?.map(t=>n("div",{className:"flex items-center gap-[6px]",children:[e(me,{source:t.benefitIcon?.url,className:"size-4",alt:t.benefit,width:16,height:16}),e(x,{html:t.benefit,className:"text-sm font-bold leading-[1.4]"})]},t.id))}),n("div",{className:"mt-4 flex items-center gap-2",children:[e(ae,{variant:"secondary",size:"lg",onClick:()=>c?.join?.(),children:e(x,{html:m?.primaryButton||"Join Now",className:"font-bold"})}),e(ae,{variant:"primary",size:"lg",onClick:()=>c?.login?.(),children:e(x,{html:m?.secondaryButton||"Log In",className:"font-bold"})})]})]})}),e("div",{className:"flex-1 bg-transparent",onClick:()=>W(!1),role:"button",tabIndex:0,"aria-label":"Close profile menu",onKeyDown:t=>{(t.key==="Enter"||t.key===" "||t.key==="Escape")&&(t.preventDefault(),W(!1))}})]})]})}),Ce=ee(({data:a,menuData:l,className:r,onPrimaryNavClick:s,onMobileMenuToggle:b},w)=>{const o=P(()=>ge(a?.categories?.filter(N=>N?.mobileShow)),[a]),{currentMenu:c,setCurrentMenu:h,subSubCategory:p}=Z(),[f,_]=D(!1),[y,v]=D(0),[M,J]=D(null),L=G(null);U(()=>{if(L?.current&&f){const N=L?.current?.getBoundingClientRect();v(window?.innerHeight-(N?.bottom||0))}b?.({open:f})},[f,b]),ie(()=>{le.fromTo(L.current,{height:0},{height:y,duration:.3})},[y]),se(f);const R=P(()=>M?.components?.[0]?.blockType,[M]),I=be(Fe,{categoriesItem:M}),W=fe(Ke,M),Y=he(je,M),A=ve(Ue,M),O=P(()=>{switch(R){case H.Sidebar:return e(W,{});case H.Resource:return e(Y,{});case H.Supports:return e(I,{});case H.Multicol:return e(A,{});default:return null}},[R,M,I]),d=te(()=>{_(!1),v(0),h&&h(j.Primary)},[_,v,h]),z=P(()=>a?.bar?.actions?.filter(N=>N?.mobileShow&&N?.blockType!==C.Profile),[a]),q=P(()=>a?.bar?.actions?.find(N=>N?.mobileShow&&N?.blockType===C.Profile)||{},[a]),T=P(()=>{switch(c){case j.Primary:return e(qe,{actions:z,menuOpen:f,onMenuOpenClose:()=>{_(!1),v(0)},onMenuOpenClick:()=>_(!0)});case j.Secondary:return e(Me,{title:M?.text,onMenuOpenClose:d,onMenuBackClick:()=>h?.(j.Primary)});case j.Third:return e(Me,{title:p?.label,onMenuOpenClose:d,onMenuBackClick:()=>h?.(j.Secondary)});default:return null}},[f,c,h,M,z,p,d]),K=te((N,F)=>{const k=Array.isArray(o)?Array.isArray(o[N])?o[N][F]:{}:{};J(k),k?.components?.[0]?.blockType===H.Links?k?.components?.[0]?.url&&window.open(k?.components?.[0]?.url,k?.components?.[0]?.target??"_blank"):h?.(j.Secondary)},[o,h]);return n(pe,{className:E("relative h-[52px]",r),children:[T,f&&n("nav",{ref:L,className:"absolute left-0 top-full z-[999] w-full overflow-y-auto border-t border-[#E4E5E6] bg-white text-black",style:{height:y},role:"navigation","aria-label":"Mobile navigation menu",children:[c===j.Primary&&l?e("div",{className:"pt-4",children:e(Ee,{data:l})}):null,c===j.Primary?e(Je,{categories:o,onPrimaryMenuClick:K,onPrimaryNavClick:s,profileAction:q}):O]})]})}),Je=({categories:a,onPrimaryMenuClick:l,profileAction:r,onPrimaryNavClick:s})=>n("div",{className:"flex h-full flex-col justify-between",children:[e("div",{className:"tablet:px-8 laptop:px-16 p-4",children:a?.map((b,w)=>n("div",{className:"",children:[e("div",{className:E("my-2 h-px w-full bg-[#E5E5E7]")}),b?.map((o,c)=>e(ce,{label:o.text,onClick:()=>{const p=(a?.flat()||[])?.findIndex(f=>f?.id===a[w][c]?.id);l(w,c),s?.(o,p)},icon:o.components?.[0]?.icon},o.id))]},`groupCategory-${w}`))}),e(Ye,{profileAction:r})]}),Ye=({profileAction:a})=>{const[l,r]=D(!1),{profile:s,event:b}=Z(),{locale:w="us"}=ue();return n("div",{className:E("tablet:px-8 laptop:px-16 bg-[#F5F5F7] px-4 py-6",{"p-4":l}),children:[n("button",{className:"flex w-full cursor-pointer items-center justify-between border-0 bg-transparent",onClick:()=>r(!l),"aria-expanded":l,"aria-label":s?.nick_name||a?.welcome,children:[n("div",{className:"flex items-center gap-[14px]",children:[e("div",{className:"flex size-[40px] shrink-0 items-center justify-center rounded-full bg-white",children:e(Be,{"aria-hidden":"true"})}),e(x,{html:s?.nick_name||a?.welcome,className:"text-base font-bold leading-[1.4]"})]}),!s?.email&&e(Ne,{"aria-hidden":"true",className:E("laptop:size-4 size-5",{"rotate-180":l})})]}),s?.email&&e("nav",{className:"mt-4",role:"navigation","aria-label":"Profile menu",children:a?.profiles?.map(o=>e(ce,{label:o?.title,href:re(o?.url,w)},o.id))}),l&&!s?.email&&n("div",{className:"mt-4",children:[e(x,{html:a?.benefits_title,className:"text-sm font-bold leading-[1.4]"}),e("div",{className:"mt-2 flex flex-col gap-1",children:a?.benefits?.map(o=>n("div",{className:"flex items-center gap-[6px]",children:[e(me,{source:o.benefitIcon?.url,className:"size-4",alt:o.benefit,width:16,height:16}),e(x,{html:o.benefit,className:"text-sm font-bold leading-[1.4]"})]},o.id))})]}),!s?.email&&n("div",{className:"mt-4 flex items-center gap-3",children:[e(ae,{className:"tablet:flex-none flex-1",variant:"secondary",size:"base",onClick:()=>b?.join?.(),children:e(x,{html:a?.primaryButton||"Join Now",className:"text-sm font-bold leading-[1.4]"})}),e(ae,{className:"tablet:flex-none flex-1",variant:"primary",size:"base",onClick:()=>b?.login?.(),children:e(x,{html:a?.secondaryButton||"Log In",className:"text-sm font-bold leading-[1.4]"})})]})]})},qe=({menuOpen:a,onMenuOpenClose:l,onMenuOpenClick:r,actions:s})=>n("div",{className:"flex h-full items-center justify-between gap-4",children:[e(we,{}),n("div",{className:"desktop:gap-6 flex items-center gap-4",children:[e(de,{actions:s}),a?e("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>l(),"aria-label":"Close menu","aria-expanded":"true",children:e(ye,{className:"size-5","aria-hidden":"true"})}):e("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>r(),"aria-label":"Open menu","aria-expanded":"false","aria-haspopup":"true",children:e(ze,{className:"size-5","aria-hidden":"true"})})]})]}),we=()=>{const{payloadData:a,isMobile:l}=Z(),{locale:r="us"}=ue();return e("a",{href:re("/",r),className:"hover:text-brand-0 [&>svg]:w-full","aria-label":"Home",dangerouslySetInnerHTML:{__html:l?a?.bar?.mobileLogo:a?.bar?.desktopLogo}})},de=ee(({actions:a,activeStatus:l=!1},r)=>{const{event:s,cartCount:b}=Z(),[w,o]=D(null),c=p=>{switch(p){case C.Search:return"Search";case C.Cart:return`Shopping cart${b>0?` (${b} items)`:""}`;case C.Profile:return"User profile";case C.Livestream:return"Livestream";default:return"Action"}},h=te((p,f)=>{switch(o(f),p?.blockType){case C.Search:s?.search?.();break;case C.Cart:s?.cart?.();break;case C.Profile:s?.profile?.();break;case C.Livestream:s?.livestream?.();break;default:return()=>{}}},[s]);return e("div",{className:"desktop:gap-6 flex items-center gap-4",children:Array.isArray(a)&&a?.map((p,f)=>n("button",{className:"relative cursor-pointer border-0 bg-transparent p-0",ref:p.blockType===C.Profile?r:null,onClick:()=>h(p,f),"aria-label":c(p.blockType),"aria-pressed":l&&w===f,children:[e(x,{html:p.icon,className:E("size-5",{"text-brand-0":l&&w===f}),"aria-hidden":"true"}),p.blockType===C.Cart&&b>0&&e("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]","aria-hidden":"true",children:e(x,{html:b?.toString(),className:"text-sm font-bold leading-[1.2] text-white"})})]},p.id))})}),Me=({title:a,onMenuOpenClose:l,onMenuBackClick:r})=>n("div",{className:"flex h-full items-center gap-3",children:[e("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>r(),"aria-label":"Back to previous menu",children:e(Re,{className:"size-5","aria-hidden":"true"})}),e(x,{html:a,className:"flex-1 text-center text-base font-bold leading-[1.4]"}),e("button",{className:"cursor-pointer border-0 bg-transparent p-0",onClick:()=>l(),"aria-label":"Close menu",children:e(ye,{className:"size-5","aria-hidden":"true"})})]});Ce.displayName="MobileNavigation",de.displayName="Actions",ke.displayName="HeaderNavigation",xe.displayName="DesktopNavigation";var kt=Te(ke);export{kt as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -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, BrandStrip } from '../../components/index.js'\n\nimport { withLayout } from '../../shared/Styles.js'\n\nimport { cn, getLocalizedPath } 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 jump from 'jump.js'\n\nimport { useGSAP } from '@gsap/react'\nimport { gsap } from 'gsap'\n\nimport { WithSidebar, WithSupports, WithMulticol, WithGroupCategory, WithResource } from './withCategory.js'\n\nimport { Menu, Close, User, LeftArrow, DownArrow, Polygon } from './icons/index.js'\n\nimport NavigationSearch from '../NavigationSearch/index.js'\nimport { ResourceSidebarDropdown } from './ResourceSidebarDropdown.js'\nimport { MobileResourceSidebarMenu } from './MobileResourceSidebarMenu.js'\nimport { SidebarDropdown } from './SidebarDropdown.js'\nimport { useScrollLock } from './useScrollLock.js'\nimport { MulticolDropdown } from './MulticolDropdown.js'\nimport { SupportsDropdown } from './SupportsDropdown.js'\nimport { MobileSidebarMenu } from './MobileSidebarMenu.js'\nimport { MobileSupportMenu } from './MobileSupportMenu.js'\nimport { MobileMulticolMenu } from './MobileMulticolMenu.js'\nimport { MenuItem } from './MobileMenuComponents.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport throttle from '../../shared/throttle.js'\n\nconst HeaderNavigation = forwardRef<HTMLDivElement, HeaderNavigationProps>((props, ref) => {\n const {\n data: { header } = {},\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 render,\n ...rest\n } = props\n\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 const searchRef = useRef<HTMLDivElement>(null)\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 // \u5982\u679C isTop \u4E3A true\uFF0C\u4E0D\u9700\u8981\u6EDA\u52A8\u76D1\u542C\u548C\u52A8\u6548\n if (isTop) {\n setHeaderHidden(false)\n setChangeHeaderBackground(false)\n return\n }\n\n let lastScrollY = 0\n let upwardDistance = 0\n let downwardDistance = 0\n\n const getScrollTop = () => {\n return document?.documentElement?.scrollTop || document?.body?.scrollTop || 0\n }\n\n // \u521D\u59CB\u5316\u72B6\u6001\n const initialScrollTop = getScrollTop()\n lastScrollY = initialScrollTop\n setHeaderHidden(initialScrollTop > 300)\n setChangeHeaderBackground(initialScrollTop > 30)\n\n const handleScroll = throttle(() => {\n const currentScrollY = getScrollTop()\n const delta = currentScrollY - lastScrollY\n\n // \u66F4\u65B0\u80CC\u666F\u72B6\u6001\n setChangeHeaderBackground(currentScrollY > 30)\n\n if (delta > 0) {\n // \u5411\u4E0B\u6EDA\u52A8\n upwardDistance = 0 // \u91CD\u7F6E\u5411\u4E0A\u7D2F\u8BA1\n downwardDistance += delta\n\n if (downwardDistance >= 300 && currentScrollY > 300) {\n setHeaderHidden(true)\n }\n } else if (delta < 0) {\n // \u5411\u4E0A\u6EDA\u52A8\n downwardDistance = 0 // \u91CD\u7F6E\u5411\u4E0B\u7D2F\u8BA1\n upwardDistance += Math.abs(delta)\n\n if (upwardDistance >= 300) {\n setHeaderHidden(false)\n upwardDistance = 0\n }\n }\n\n lastScrollY = currentScrollY\n }, 100)\n\n window.addEventListener('scroll', handleScroll, { passive: true })\n return () => window.removeEventListener('scroll', handleScroll)\n }, [isTop])\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 useScrollLock(searchOpen)\n\n const searchPage = useMemo(() => {\n return (\n header?.bar?.actions?.find((item: any) => item?.blockType === HeaderNavigationActionBlockType.Search)\n ?.searchBar?.[0] || {}\n )\n }, [header])\n\n const CustomMobileHeaderNavigation = render?.mobileHeaderNavigation\n\n return (\n <NavProvider\n buildProps={buildProps}\n profile={profile}\n isMobile={isMobile}\n event={event}\n payloadData={header}\n onSidebarNavClick={onSidebarNavClick}\n onSeriesProductClick={onSeriesProductClick}\n cartCount={cartCount}\n >\n <header\n {...rest}\n id={headerId || 'header'}\n data-ui-component-id=\"HeaderNavigation\"\n className={\n isTop\n ? 'relative z-[100] bg-white'\n : cn('sticky top-0 z-[100] transition-transform duration-500 ease-in-out', {\n ['translate-y-[-100%]']: headerHidden,\n })\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']: !isTop && changeHeaderBackground,\n },\n {\n ['hover:!text-black']: theme === 'dark',\n ['!text-black']: !isTop && changeHeaderBackground,\n }\n )}\n onClick={() => !isTop && setChangeHeaderBackground(true)}\n >\n <DesktopNavigation\n data={header}\n className=\"desktop:block hidden !bg-white\"\n theme={theme}\n onNavItemClick={() => !isTop && setChangeHeaderBackground(true)}\n onPrimaryNavClick={onPrimaryNavClick}\n />\n {CustomMobileHeaderNavigation ? (\n <CustomMobileHeaderNavigation\n className=\"desktop:hidden block !bg-white\"\n menuData={menuData}\n data={header}\n onPrimaryNavClick={onPrimaryNavClick}\n />\n ) : (\n <MobileNavigation\n menuData={menuData}\n data={header}\n className=\"desktop:hidden block !bg-white\"\n onPrimaryNavClick={onPrimaryNavClick}\n />\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 role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Search\"\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\n className=\"flex-1 bg-transparent\"\n onClick={() => setSearchOpen(false)}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close search\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n setSearchOpen(false)\n }\n }}\n />\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 const { locale = 'us' } = useAiuiContext()\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<HTMLButtonElement>(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 useScrollLock(!!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 const currentCategoriesItem = groupCategories[groupIndex][index]\n if (currentCategoriesItem?.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 currentCategoriesItem?.components?.[0]?.url &&\n window.open(\n currentCategoriesItem?.components?.[0]?.url,\n currentCategoriesItem?.components?.[0]?.target ?? '_blank'\n )\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 setCategoriesItem(currentCategoriesItem)\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 handleNavItemKeyDown = (e: React.KeyboardEvent, groupIndex: number, index: number) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleNavItemClick(e, groupIndex, index)\n } else if (e.key === 'Escape' && currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index) {\n e.preventDefault()\n handleNavMenuClose()\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 ResourceSidebarDropdownComp = WithResource(ResourceSidebarDropdown, 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.Resource:\n return <ResourceSidebarDropdownComp />\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?.bar?.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 HTMLButtonElement\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 <nav className=\"flex justify-between\" role=\"navigation\" aria-label=\"Primary navigation\">\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 const isExpanded = currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index\n return (\n <div\n key={item.id}\n ref={(el: HTMLDivElement) => {\n navItemRefs.current[groupIndex][index] = el\n }}\n className=\"group\"\n >\n <div className=\"relative\">\n <button\n className=\"flex cursor-pointer items-center gap-1 border-0 bg-transparent pb-4\"\n onClick={e => handleNavItemClick(e, groupIndex, index)}\n onKeyDown={e => handleNavItemKeyDown(e, groupIndex, index)}\n aria-expanded={isExpanded}\n aria-haspopup=\"true\"\n aria-label={item.text}\n >\n <Text html={item.text} className=\"text-sm font-bold leading-[1.4]\" />\n {/* <DownArrow\n aria-hidden=\"true\"\n className={cn('size-4 opacity-0 transition-opacity duration-500 group-hover:opacity-100', {\n ['rotate-180']: isExpanded,\n ['opacity-100']: downdownHover && isExpanded,\n })}\n /> */}\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 ['invisible']:\n !item?.components?.length ||\n item?.components?.[0]?.blockType === HeaderNavigationBlockType.Links,\n })}\n />\n </button>\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)]': isExpanded,\n },\n theme === 'dark' ? 'bg-white' : 'bg-[#080A0F]'\n )}\n aria-hidden=\"true\"\n />\n </div>\n </div>\n )\n })}\n </div>\n )\n })}\n </nav>\n </div>\n <div\n role=\"menu\"\n aria-hidden={!(currentNavItem?.open && categoriesItem)}\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\n className=\"flex-1 bg-transparent\"\n onClick={handleNavMenuClose}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close menu\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n handleNavMenuClose()\n }\n }}\n />\n </div>\n {userProfileOpen && (\n <div\n className=\"absolute left-0 top-full z-[999] flex h-dvh w-full bg-black/70\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"User profile menu\"\n // style={{\n // height: `calc(100dvh - ${profileRef?.current?.getBoundingClientRect()?.bottom}px)`,\n // top: `calc(96px)`,\n // }}\n >\n <div\n className=\"rounded-box absolute w-[272px] overflow-hidden 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]\" aria-hidden=\"true\" />\n <nav className=\"mt-2\" role=\"navigation\" aria-label=\"Profile navigation\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem\n className=\"py-2\"\n key={item.id}\n label={item?.title}\n href={getLocalizedPath(item?.url, locale)}\n />\n ))}\n </nav>\n </>\n ) : (\n <>\n <Polygon className=\"absolute -top-2 right-[46px] z-30 text-white\" aria-hidden=\"true\" />\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\n className=\"flex-1 bg-transparent\"\n onClick={() => setUserProfileOpen(false)}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close profile menu\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n setUserProfileOpen(false)\n }\n }}\n />\n </div>\n )}\n </Container>\n )\n})\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 useScrollLock(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 MobileResourceSidebarMenuComp = WithResource(MobileResourceSidebarMenu, 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.Resource:\n return <MobileResourceSidebarMenuComp />\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?.bar?.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?.bar?.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 &&\n window.open(categoriesItem?.components?.[0]?.url, categoriesItem?.components?.[0]?.target ?? '_blank')\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 <nav\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 role=\"navigation\"\n aria-label=\"Mobile navigation menu\"\n >\n {currentMenu === HeaderNavigationMenu.Primary && menuData ? (\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 </nav>\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 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 ProfileComp = ({ profileAction }: { profileAction: any }) => {\n const [profileOpen, setProfileOpen] = useState(false)\n const { profile, event } = useNavContext()\n const { locale = 'us' } = useAiuiContext()\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 <button\n className=\"flex w-full cursor-pointer items-center justify-between border-0 bg-transparent\"\n onClick={() => setProfileOpen(!profileOpen)}\n aria-expanded={profileOpen}\n aria-label={profile?.nick_name || profileAction?.welcome}\n >\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 aria-hidden=\"true\" />\n </div>\n <Text html={profile?.nick_name || profileAction?.welcome} className=\"text-base font-bold leading-[1.4]\" />\n </div>\n {!profile?.email && (\n <DownArrow aria-hidden=\"true\" className={cn('laptop:size-4 size-5', { 'rotate-180': profileOpen })} />\n )}\n </button>\n {profile?.email && (\n <nav className=\"mt-4\" role=\"navigation\" aria-label=\"Profile menu\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem key={item.id} label={item?.title} href={getLocalizedPath(item?.url, locale)} />\n ))}\n </nav>\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 <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClose()}\n aria-label=\"Close menu\"\n aria-expanded=\"true\"\n >\n <Close className=\"size-5\" aria-hidden=\"true\" />\n </button>\n ) : (\n <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClick()}\n aria-label=\"Open menu\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\"\n >\n <Menu className=\"size-5\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n </div>\n )\n}\n\nconst Logo = () => {\n const { payloadData, isMobile } = useNavContext()\n const { locale = 'us' } = useAiuiContext()\n return (\n <a\n href={getLocalizedPath('/', locale)}\n className=\"hover:text-brand-0 [&>svg]:w-full\"\n aria-label=\"Home\"\n dangerouslySetInnerHTML={{\n __html: isMobile ? payloadData?.bar?.mobileLogo : payloadData?.bar?.desktopLogo,\n }}\n />\n )\n}\n\nconst Actions = forwardRef<HTMLButtonElement, { actions: any; activeStatus?: boolean }>(\n ({ actions, activeStatus = false }, ref) => {\n const { event, cartCount } = useNavContext()\n const [activeAction, setActiveAction] = useState<any>(null)\n\n const getActionLabel = (blockType: string) => {\n switch (blockType) {\n case HeaderNavigationActionBlockType.Search:\n return 'Search'\n case HeaderNavigationActionBlockType.Cart:\n return `Shopping cart${cartCount > 0 ? ` (${cartCount} items)` : ''}`\n case HeaderNavigationActionBlockType.Profile:\n return 'User profile'\n case HeaderNavigationActionBlockType.Livestream:\n return 'Livestream'\n default:\n return 'Action'\n }\n }\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 <button\n className=\"relative cursor-pointer border-0 bg-transparent p-0\"\n key={action.id}\n ref={action.blockType === HeaderNavigationActionBlockType.Profile ? ref : null}\n onClick={() => handleActionClick(action, index)}\n aria-label={getActionLabel(action.blockType)}\n aria-pressed={activeStatus && activeAction === index}\n >\n <Text\n html={action.icon}\n className={cn('size-5', { 'text-brand-0': activeStatus && activeAction === index })}\n aria-hidden=\"true\"\n />\n {action.blockType === HeaderNavigationActionBlockType.Cart && cartCount > 0 && (\n <div\n 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 aria-hidden=\"true\"\n >\n <Text html={cartCount?.toString()} className=\"text-sm font-bold leading-[1.2] text-white\" />\n </div>\n )}\n </button>\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 <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuBackClick()}\n aria-label=\"Back to previous menu\"\n >\n <LeftArrow className=\"size-5\" aria-hidden=\"true\" />\n </button>\n <Text html={title} className=\"flex-1 text-center text-base font-bold leading-[1.4]\" />\n <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClose()}\n aria-label=\"Close menu\"\n >\n <Close className=\"size-5\" aria-hidden=\"true\" />\n </button>\n </div>\n )\n}\n\nMobileNavigation.displayName = 'MobileNavigation'\nActions.displayName = 'Actions'\nHeaderNavigation.displayName = 'HeaderNavigation'\nDesktopNavigation.displayName = 'DesktopNavigation'\n\nexport default withLayout(HeaderNavigation)\n"],
|
|
5
|
-
"mappings": "aA4NU,OA2VI,YAAAA,GA3VJ,OAAAC,EAuBE,QAAAC,MAvBF,oBA3NV,OAAgB,cAAAC,GAAY,eAAAC,GAAa,aAAAC,EAAW,uBAAAC,GAAqB,WAAAC,EAAS,UAAAC,EAAQ,YAAAC,MAAgB,QAE1G,OAAS,WAAAC,GAAS,QAAAC,EAAM,UAAAC,GAAQ,aAAAC,GAAW,cAAAC,OAAkB,4BAE7D,OAAS,cAAAC,OAAkB,yBAE3B,OAAS,MAAAC,EAAI,oBAAAC,OAAwB,yBASrC,OAAOC,IAAe,iBAAAC,MAAqB,mBAE3C,OAAS,wBAAAC,EAAsB,6BAAAC,EAA2B,mCAAAC,MAAuC,aAEjG,OAAOC,OAAU,UAEjB,OAAS,WAAAC,OAAe,cACxB,OAAS,QAAAC,OAAY,OAErB,OAAS,eAAAC,GAAa,gBAAAC,GAAc,gBAAAC,GAAc,qBAAAC,GAAmB,gBAAAC,OAAoB,oBAEzF,OAAS,QAAAC,GAAM,SAAAC,GAAO,QAAAC,GAAM,aAAAC,GAAW,aAAAC,GAAW,WAAAC,OAAe,mBAEjE,OAAOC,OAAsB,+BAC7B,OAAS,2BAAAC,OAA+B,+BACxC,OAAS,6BAAAC,OAAiC,iCAC1C,OAAS,mBAAAC,OAAuB,uBAChC,OAAS,iBAAAC,OAAqB,qBAC9B,OAAS,oBAAAC,OAAwB,wBACjC,OAAS,oBAAAC,OAAwB,wBACjC,OAAS,qBAAAC,OAAyB,yBAClC,OAAS,qBAAAC,OAAyB,yBAClC,OAAS,sBAAAC,OAA0B,0BACnC,OAAS,YAAAC,OAAgB,4BACzB,OAAS,kBAAAC,OAAsB,2BAC/B,OAAOC,OAAc,2BAErB,MAAMC,GAAmB/C,GAAkD,CAACgD,EAAOC,IAAQ,CACzF,KAAM,CACJ,KAAM,CAAE,OAAAC,CAAO,EAAI,CAAC,EACpB,WAAAC,EACA,MAAAC,EACA,QAAAC,EACA,MAAAC,EAAQ,QACR,MAAAC,EAAQ,GACR,aAAAC,EACA,SAAAC,EACA,YAAAC,EACA,SAAAC,EACA,kBAAAC,EACA,qBAAAC,EACA,kBAAAC,EACA,SAAAC,EACA,UAAAC,EACA,SAAAC,EACA,OAAAC,EACA,GAAGC,CACL,EAAInB,EAEE,CAACoB,EAAYC,CAAa,EAAI/D,EAAS,EAAK,EAC5C,CAACgE,EAAcC,CAAe,EAAIjE,EAAS,EAAK,EAChD,CAACkE,EAAwBC,CAAyB,EAAInE,EAAS,EAAK,EACpE,CAACoE,EAAUC,CAAW,EAAIrE,EAAS,EAAK,EACxCsE,EAAYvE,EAAuB,IAAI,EAEvCwE,EAAYxE,EAAuB,IAAI,EAEvCyE,EAAe,IAAM,CACzB,MAAMC,EAAc,UAAU,cAAc,MAAM,GAAG,aAAe,EACpEJ,EAAYI,GAAe,IAAI,CACjC,EAEA7E,EAAU,KACR4E,EAAa,EACb,OAAO,iBAAiB,SAAUA,CAAY,EACvC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAY,CACnD,GACC,CAAC,CAAC,EAEL3E,GAAoB8C,EAAK,IAAM4B,EAAU,OAAyB,EAElE3E,EAAU,IAAM,CACV2E,EAAU,SAAWtB,GACvBnC,GAAKyD,EAAU,QAAS,CAAE,SAAU,EAAG,OAAQA,EAAU,SAAS,sBAAsB,GAAG,QAAU,CAAE,CAAC,CAE5G,EAAG,CAACtB,CAAK,CAAC,EAEVrD,EAAU,IAAM,CAEd,GAAIqD,EAAO,CACTgB,EAAgB,EAAK,EACrBE,EAA0B,EAAK,EAC/B,MACF,CAEA,IAAIO,EAAc,EACdC,EAAiB,EACjBC,EAAmB,EAEvB,MAAMC,EAAe,IACZ,UAAU,iBAAiB,WAAa,UAAU,MAAM,WAAa,EAIxEC,EAAmBD,EAAa,EACtCH,EAAcI,EACdb,EAAgBa,EAAmB,GAAG,EACtCX,EAA0BW,EAAmB,EAAE,EAE/C,MAAMC,EAAevC,GAAS,IAAM,CAClC,MAAMwC,EAAiBH,EAAa,EAC9BI,EAAQD,EAAiBN,EAG/BP,EAA0Ba,EAAiB,EAAE,EAEzCC,EAAQ,GAEVN,EAAiB,EACjBC,GAAoBK,EAEhBL,GAAoB,KAAOI,EAAiB,KAC9Cf,EAAgB,EAAI,GAEbgB,EAAQ,IAEjBL,EAAmB,EACnBD,GAAkB,KAAK,IAAIM,CAAK,EAE5BN,GAAkB,MACpBV,EAAgB,EAAK,EACrBU,EAAiB,IAIrBD,EAAcM,CAChB,EAAG,GAAG,EAEN,cAAO,iBAAiB,SAAUD,EAAc,CAAE,QAAS,EAAK,CAAC,EAC1D,IAAM,OAAO,oBAAoB,SAAUA,CAAY,CAChE,EAAG,CAAC9B,CAAK,CAAC,EAEVrD,EAAU,IAAM,CACVkD,IACFA,EAAM,OAAS,IAAMiB,EAAc,EAAI,EAE3C,EAAG,CAACjB,CAAK,CAAC,EAEV/B,GAAQ,IAAM,CACRuD,GAAW,SAAWR,GACxB9C,GAAK,OACHsD,EAAU,QACV,CACE,OAAQ,CACV,EACA,CACE,OAAQ,OACR,SAAU,EACZ,CACF,CAEJ,EAAG,CAACR,CAAU,CAAC,EAEf9B,GAAc8B,CAAU,EAExB,MAAMoB,GAAapF,EAAQ,IAEvB8C,GAAQ,KAAK,SAAS,KAAMuC,GAAcA,GAAM,YAActE,EAAgC,MAAM,GAChG,YAAY,CAAC,GAAK,CAAC,EAExB,CAAC+B,CAAM,CAAC,EAELwC,EAA+BxB,GAAQ,uBAE7C,OACEpE,EAACiB,GAAA,CACC,WAAYoC,EACZ,QAASE,EACT,SAAUqB,EACV,MAAOtB,EACP,YAAaF,EACb,kBAAmBY,EACnB,qBAAsBD,EACtB,UAAWG,EAEX,SAAAlE,EAAC,UACE,GAAGqE,EACJ,GAAIJ,GAAY,SAChB,uBAAqB,mBACrB,UACER,EACI,4BACA1C,EAAG,qEAAsE,CACtE,sBAAwByD,CAC3B,CAAC,EAGP,IAAKO,EAEL,SAAA9E,EAAC,OACC,UAAWc,EACT,kCACAyC,IAAU,QAAU,aAAe,aACnC,CACG,oDAAsD,CAACC,GAASiB,CACnE,EACA,CACG,oBAAsBlB,IAAU,OAChC,cAAgB,CAACC,GAASiB,CAC7B,CACF,EACA,QAAS,IAAM,CAACjB,GAASkB,EAA0B,EAAI,EAEvD,UAAA3E,EAAC6F,GAAA,CACC,KAAMzC,EACN,UAAU,iCACV,MAAOI,EACP,eAAgB,IAAM,CAACC,GAASkB,EAA0B,EAAI,EAC9D,kBAAmBb,EACrB,EACC8B,EACC5F,EAAC4F,EAAA,CACC,UAAU,iCACV,SAAUzB,EACV,KAAMf,EACN,kBAAmBU,EACrB,EAEA9D,EAAC8F,GAAA,CACC,SAAU3B,EACV,KAAMf,EACN,UAAU,iCACV,kBAAmBU,EACrB,EAEDQ,GACCrE,EAAC,OACC,UAAU,gEACV,MAAO,CAAE,OAAQ,iBAAiB8E,GAAW,SAAS,sBAAsB,GAAG,GAAG,KAAM,EACxF,KAAK,SACL,aAAW,OACX,aAAW,SAEX,UAAA/E,EAAC,OAAI,IAAK8E,EAAW,UAAW/D,EAAG,kBAAmB,CAAC,CAAC,EACtD,SAAAf,EAACoC,GAAA,CACC,KAAMsD,GACN,SAAU7B,EACV,YAAaD,EACb,aAAcF,EACd,SAAWqC,GAAkB,CAC3BpC,IAAWoC,CAAK,CAClB,EACA,QAAS,IAAM,CACbpC,IAAW,EACXY,EAAc,EAAK,CACrB,EACF,EACF,EACAvE,EAAC,OACC,UAAU,wBACV,QAAS,IAAMuE,EAAc,EAAK,EAClC,KAAK,SACL,SAAU,EACV,aAAW,eACX,UAAWyB,GAAK,EACVA,EAAE,MAAQ,SAAWA,EAAE,MAAQ,KAAOA,EAAE,MAAQ,YAClDA,EAAE,eAAe,EACjBzB,EAAc,EAAK,EAEvB,EACF,GACF,GAEJ,EACF,EACF,CAEJ,CAAC,EAEKsB,GAAoB3F,GAAmD,CAACgD,EAAOC,IAAQ,CAC3F,KAAM,CAAE,KAAA8C,EAAM,eAAAC,EAAgB,UAAAC,EAAW,MAAA3C,EAAO,kBAAAM,CAAkB,EAAIZ,EAChE,CAAE,MAAAI,EAAO,QAAAC,CAAQ,EAAIrC,EAAc,EACnC,CAACkF,EAAeC,CAAgB,EAAI7F,EAAS,EAAK,EAClD,CAAE,OAAA8F,EAAS,IAAK,EAAIvD,GAAe,EAEnCwD,EAAkBjG,EAAQ,IACvBsB,GAAkBqE,GAAM,YAAY,OAAQN,GAAcA,GAAM,MAAM,CAAC,EAC7E,CAACM,CAAI,CAAC,EAEH,CAACO,EAAgBC,CAAiB,EAAIjG,EAAc,IAAI,EACxD,CAACkG,EAAgBC,CAAiB,EAAInG,EAAmE,CAAC,CAAC,EAC3GoG,EAAarG,EAA0B,IAAI,EAC3C,CAACsG,EAAiBC,CAAkB,EAAItG,EAAS,EAAK,EACtDuE,EAAYxE,EAAuB,IAAI,EACvCwG,EAAcxG,EAAuB,IAAI,EACzCyG,EAAczG,EAClBgG,EAAgB,IAAKU,GAAoB,MAAMA,GAAY,QAAU,CAAC,EAAE,KAAK,IAAI,CAAC,CACpF,EAEA7G,EAAU,IAAM,CACVmG,GAAiB,QACnBI,EACEJ,GAAiB,IAAI,CAACW,EAAgBC,IAC7BD,GAAW,IAAI,CAACE,EAAQC,KAAmB,CAAE,WAAAF,EAAY,MAAAE,EAAO,KAAM,EAAM,EAAE,CACtF,CACH,CAEJ,EAAG,CAACd,CAAe,CAAC,EAEpB,MAAMe,EAAiBhH,EAAQ,IAAM,CACnC,IAAIgH,EAA8E,KAClF,UAAWJ,KAAaR,EAAgB,CACtC,UAAWf,KAAQuB,EACjB,GAAIvB,EAAK,KAAM,CACb2B,EAAiB3B,EACjB,KACF,CAEF,GAAI2B,EAAgB,KACtB,CACA,OAAOA,CACT,EAAG,CAACZ,CAAc,CAAC,EAEnBlE,GAAc,CAAC,CAAC8E,GAAgB,MAAQT,CAAe,EAEvD,MAAMU,EAAqB,CAACvB,EAAQmB,EAAoBE,IAAkB,CACxEP,EAAmB,EAAK,EAExB,MAAMU,EAAwBjB,EAAgBY,CAAU,EAAEE,CAAK,EAC/D,GAAIG,GAAuB,aAAa,CAAC,GAAG,YAAcpG,EAA0B,MAGlFoG,GAAuB,aAAa,CAAC,GAAG,KACtC,OAAO,KACLA,GAAuB,aAAa,CAAC,GAAG,IACxCA,GAAuB,aAAa,CAAC,GAAG,QAAU,QACpD,MACG,CACL,MAAMP,EAAaV,GAAiB,KAAK,GAAK,CAAC,EACzCkB,EAAWR,GAAY,UAAUtB,IAAQA,IAAM,KAAOY,EAAgBY,CAAU,EAAEE,CAAK,GAAG,EAAE,EAClGrB,EAAE,gBAAgB,EAClBE,IAAiB,EACjBpC,IAAoBmD,EAAWQ,CAAQ,EAAGA,CAAQ,EAElDhB,EAAkBe,CAAqB,EACvCb,EAAkBe,IAChBA,GAAK,IAAIR,IACPA,GAAU,IAAIvB,GACZA,EAAK,aAAewB,GAAcxB,EAAK,QAAU0B,EAC7C,CAAE,GAAG1B,EAAM,KAAM,CAACA,EAAK,IAAK,EAC5B,CAAE,GAAGA,EAAM,KAAM,EAAM,CAC7B,CACF,CACF,CACF,CACF,EAEMgC,EAAuB,CAAC3B,EAAwBmB,EAAoBE,IAAkB,CACtFrB,EAAE,MAAQ,SAAWA,EAAE,MAAQ,KACjCA,EAAE,eAAe,EACjBuB,EAAmBvB,EAAGmB,EAAYE,CAAK,GAC9BrB,EAAE,MAAQ,UAAYsB,GAAgB,aAAeH,GAAcG,GAAgB,QAAUD,IACtGrB,EAAE,eAAe,EACjB4B,EAAmB,EAEvB,EAEMA,EAAqB,IAAM,CAC/BjB,EAAkBe,GAAQA,EAAK,IAAIR,GAAaA,EAAU,IAAIvB,IAAS,CAAE,GAAGA,EAAM,KAAM,EAAM,EAAE,CAAC,CAAC,CACpG,EAEMkC,EAA6BvH,EAAQ,IAAM,CAC/C,GAAIkG,EAAgB,OAAOA,GAAgB,aAAa,CAAC,GAAG,SAC9D,EAAG,CAACA,CAAc,CAAC,EAEbsB,EAAsBrG,GAAYc,GAAiBiE,CAAc,EACjEuB,EAA8BlG,GAAaQ,GAAyBmE,CAAc,EAClFwB,EAAuBrG,GAAac,GAAkB+D,CAAc,EACpEyB,GAAuBvG,GAAagB,GAAkB,CAC1D,eAAA8D,EACA,kBAAmBQ,EAAY,UAAUM,GAAgB,YAAc,CAAC,IAAIA,GAAgB,OAAS,CAAC,CACxG,CAAC,EAEKY,EAAe5H,EAAQ,IAAM,CACjC,OAAQuH,EAA4B,CAClC,KAAKzG,EAA0B,QAC7B,OAAOpB,EAAC8H,EAAA,EAAoB,EAC9B,KAAK1G,EAA0B,SAC7B,OAAOpB,EAAC+H,EAAA,EAA4B,EACtC,KAAK3G,EAA0B,SAC7B,OAAOpB,EAACiI,GAAA,EAAqB,EAC/B,KAAK7G,EAA0B,SAC7B,OAAOpB,EAACgI,EAAA,EAAqB,EAC/B,QACE,OAAO,IACX,CACF,EAAG,CAACH,EAA4BrB,CAAc,CAAC,EAEzC2B,EAAU7H,EAAQ,IACf2F,GAAM,KAAK,SAAS,OAAQN,GAAcA,GAAM,MAAM,EAC5D,CAACM,CAAI,CAAC,EAEHmC,EAAgB9H,EAAQ,IACrB6H,GAAS,KAAMxC,GAAcA,GAAM,YAActE,EAAgC,OAAO,EAC9F,CAAC8G,CAAO,CAAC,EAENE,EAAqBlI,GAAY,IAAM,CAC3C2G,EAAmBY,GAAQ,CAACA,CAAI,CAClC,EAAG,CAAC,CAAC,EAEL,OAAAtH,EAAU,IAAM,CACd,GAAIwG,GAAY,QAAS,CACvB,MAAM0B,EAAoB1B,EAAW,QACrC,OAAA0B,EAAkB,iBAAiB,QAASD,CAAkB,EAEvD,IAAM,CACXC,EAAkB,oBAAoB,QAASD,CAAkB,CACnE,CACF,CACF,EAAG,CAACA,CAAkB,CAAC,EAEvB9G,GAAQ,IAAM,CACR+F,GAAgB,MAClB9F,GAAK,OACHuF,GAAa,QACb,CACE,OAAQ,CACV,EACA,CACE,OAAQ,MACV,CACF,CAEJ,EAAG,CAACO,GAAgB,IAAI,CAAC,EAGvBrH,EAACW,GAAA,CAAU,UAAWG,EAAG,oBAAqBoF,CAAS,EACrD,UAAAlG,EAAC,OAAI,IAAK8E,EAAW,QAAS6C,EAAoB,UAAU,yCAC1D,UAAA3H,EAAC,OAAI,UAAU,oCACb,UAAAD,EAACuI,GAAA,EAAK,EACNvI,EAACwI,GAAA,CAAQ,IAAK5B,EAAY,QAASuB,EAAS,aAActB,EAAiB,GAC7E,EACA7G,EAAC,OAAI,UAAU,uBAAuB,KAAK,aAAa,aAAW,qBAChE,SAAAuG,GAAiB,IAAI,CAACW,EAAgBC,IAEnCnH,EAAC,OAAwC,UAAU,aAChD,SAAAkH,GAAW,IAAI,CAACvB,EAAW0B,IAAkB,CAC5C,MAAMoB,EAAanB,GAAgB,aAAeH,GAAcG,GAAgB,QAAUD,EAC1F,OACErH,EAAC,OAEC,IAAM0I,GAAuB,CAC3B1B,EAAY,QAAQG,CAAU,EAAEE,CAAK,EAAIqB,CAC3C,EACA,UAAU,QAEV,SAAAzI,EAAC,OAAI,UAAU,WACb,UAAAA,EAAC,UACC,UAAU,sEACV,QAAS+F,GAAKuB,EAAmBvB,EAAGmB,EAAYE,CAAK,EACrD,UAAWrB,GAAK2B,EAAqB3B,EAAGmB,EAAYE,CAAK,EACzD,gBAAeoB,EACf,gBAAc,OACd,aAAY9C,EAAK,KAEjB,UAAA3F,EAACU,EAAA,CAAK,KAAMiF,EAAK,KAAM,UAAU,kCAAkC,EAQnE3F,EAACkC,GAAA,CACC,UAAWnB,EAAG,2EAA4E,CACvF,aACCuG,GAAgB,aAAeH,GAAcG,GAAgB,QAAUD,EACxE,cACCjB,GACAkB,GAAgB,aAAeH,GAC/BG,GAAgB,QAAUD,EAC3B,UACC,CAAC1B,GAAM,YAAY,QACnBA,GAAM,aAAa,CAAC,GAAG,YAAcvE,EAA0B,KACnE,CAAC,EACH,GACF,EACApB,EAAC,OACC,UAAWe,EACT,mEACA,CACE,sBAAuB0H,CACzB,EACAjF,IAAU,OAAS,WAAa,cAClC,EACA,cAAY,OACd,GACF,GA/CKmC,EAAK,EAgDZ,CAEJ,CAAC,GAvDO,iBAAiBwB,CAAU,EAwDrC,CAEH,EACH,GACF,EACAlH,EAAC,OACC,KAAK,OACL,cAAa,EAAEqH,GAAgB,MAAQd,GACvC,UAAWzF,EACT,2HACA,CACE,OAAQ,EAAEuG,GAAgB,MAAQd,EACpC,CACF,EACA,aAAc,IAAMH,EAAiB,EAAI,EACzC,aAAc,IAAMA,EAAiB,EAAK,EAC1C,MAAO,CAAE,OAAQ,iBAAiBtB,GAAW,SAAS,sBAAsB,GAAG,MAAM,KAAM,EAE3F,UAAA/E,EAAC,OACC,IAAK+G,EACL,UAAWhG,EAAG,gBAAiB,CAC7B,kBAAmB8G,IAA+BzG,EAA0B,QAC9E,CAAC,EAEA,SAAA8G,EACH,EACAlI,EAAC,OACC,UAAU,wBACV,QAAS4H,EACT,KAAK,SACL,SAAU,EACV,aAAW,aACX,UAAW5B,GAAK,EACVA,EAAE,MAAQ,SAAWA,EAAE,MAAQ,KAAOA,EAAE,MAAQ,YAClDA,EAAE,eAAe,EACjB4B,EAAmB,EAEvB,EACF,GACF,EACCf,GACC5G,EAAC,OACC,UAAU,iEACV,KAAK,SACL,aAAW,OACX,aAAW,oBAMX,UAAAD,EAAC,OACC,UAAU,8DACV,MAAO,CACL,MAAO,eAAe4G,GAAY,SAAS,sBAAsB,GAAG,KAAK,MACzE,IAAK,OACP,EAEC,SAAArD,GAAS,MACRtD,EAAAF,GAAA,CACE,UAAAC,EAACU,EAAA,CAAK,KAAM6C,GAAS,WAAa6E,GAAe,QAAS,UAAU,oBAAoB,EACxFpI,EAAC,OAAI,UAAU,yBAAyB,cAAY,OAAO,EAC3DA,EAAC,OAAI,UAAU,OAAO,KAAK,aAAa,aAAW,qBAChD,SAAAoI,GAAe,UAAU,IAAKzC,GAC7B3F,EAAC8C,GAAA,CACC,UAAU,OAEV,MAAO6C,GAAM,MACb,KAAM3E,GAAiB2E,GAAM,IAAKW,CAAM,GAFnCX,EAAK,EAGZ,CACD,EACH,GACF,EAEA1F,EAAAF,GAAA,CACE,UAAAC,EAACmC,GAAA,CAAQ,UAAU,+CAA+C,cAAY,OAAO,EACrFnC,EAACU,EAAA,CAAK,KAAM0H,GAAe,eAAgB,UAAU,kCAAkC,EACvFpI,EAAC,OAAI,UAAU,2BACZ,SAAAoI,GAAe,UAAU,IAAKzC,GAC7B1F,EAAC,OAAkB,UAAU,8BAC3B,UAAAD,EAACS,GAAA,CACC,OAAQkF,EAAK,aAAa,IAC1B,UAAU,SACV,IAAKA,EAAK,QACV,MAAO,GACP,OAAQ,GACV,EACA3F,EAACU,EAAA,CAAK,KAAMiF,EAAK,QAAS,UAAU,kCAAkC,IAR9DA,EAAK,EASf,CACD,EACH,EACA1F,EAAC,OAAI,UAAU,+BACb,UAAAD,EAACW,GAAA,CAAO,QAAQ,YAAY,KAAK,KAAK,QAAS,IAAM2C,GAAO,OAAO,EACjE,SAAAtD,EAACU,EAAA,CAAK,KAAM0H,GAAe,eAAiB,WAAY,UAAU,YAAY,EAChF,EACApI,EAACW,GAAA,CAAO,QAAQ,UAAU,KAAK,KAAK,QAAS,IAAM2C,GAAO,QAAQ,EAChE,SAAAtD,EAACU,EAAA,CAAK,KAAM0H,GAAe,iBAAmB,SAAU,UAAU,YAAY,EAChF,GACF,GACF,EAEJ,EACApI,EAAC,OACC,UAAU,wBACV,QAAS,IAAM8G,EAAmB,EAAK,EACvC,KAAK,SACL,SAAU,EACV,aAAW,qBACX,UAAWd,GAAK,EACVA,EAAE,MAAQ,SAAWA,EAAE,MAAQ,KAAOA,EAAE,MAAQ,YAClDA,EAAE,eAAe,EACjBc,EAAmB,EAAK,EAE5B,EACF,GACF,GAEJ,CAEJ,CAAC,EAEKhB,GAAmB5F,GACvB,CAAC,CAAE,KAAA+F,EAAM,SAAA9B,EAAU,UAAAgC,EAAW,kBAAArC,CAAkB,EAAGX,IAAQ,CACzD,MAAMoD,EAAkBjG,EAAQ,IACvBsB,GAAkBqE,GAAM,YAAY,OAAQN,GAAcA,GAAM,UAAU,CAAC,EACjF,CAACM,CAAI,CAAC,EAEH,CAAE,YAAA0C,EAAa,eAAAC,EAAgB,eAAAC,CAAe,EAAI3H,EAAc,EAChE,CAAC4H,EAAgBC,CAAiB,EAAIvI,EAAS,EAAK,EACpD,CAACwI,EAAiBC,CAAkB,EAAIzI,EAAS,CAAC,EAClD,CAACgG,EAAgBC,CAAiB,EAAIjG,EAAc,IAAI,EAExD0I,EAAgB3I,EAAuB,IAAI,EAEjDH,EAAU,IAAM,CACd,GAAI8I,GAAe,SAAWJ,EAAgB,CAC5C,MAAMK,EAAOD,GAAe,SAAS,sBAAsB,EAC3DD,EAAmB,QAAQ,aAAeE,GAAM,QAAU,EAAE,CAC9D,CACF,EAAG,CAACL,CAAc,CAAC,EAEnBvH,GAAQ,IAAM,CACZC,GAAK,OACH0H,EAAc,QACd,CACE,OAAQ,CACV,EACA,CACE,OAAQF,EACR,SAAU,EACZ,CACF,CACF,EAAG,CAACA,CAAe,CAAC,EAEpBxG,GAAcsG,CAAc,EAE5B,MAAMjB,EAA6BvH,EAAQ,IAClCkG,GAAgB,aAAa,CAAC,GAAG,UACvC,CAACA,CAAc,CAAC,EAEb4C,EAAwB1H,GAAakB,GAAmB,CAC5D,eAAA4D,CACF,CAAC,EAEK6C,EAAwB5H,GAAYkB,GAAmB6D,CAAc,EACrE8C,EAAgCzH,GAAaS,GAA2BkE,CAAc,EACtF+C,EAAyB5H,GAAakB,GAAoB2D,CAAc,EAExEgD,EAA2BlJ,EAAQ,IAAM,CAC7C,OAAQuH,EAA4B,CAClC,KAAKzG,EAA0B,QAC7B,OAAOpB,EAACqJ,EAAA,EAAsB,EAChC,KAAKjI,EAA0B,SAC7B,OAAOpB,EAACsJ,EAAA,EAA8B,EACxC,KAAKlI,EAA0B,SAC7B,OAAOpB,EAACoJ,EAAA,EAAsB,EAChC,KAAKhI,EAA0B,SAC7B,OAAOpB,EAACuJ,EAAA,EAAuB,EACjC,QACE,OAAO,IACX,CACF,EAAG,CAAC1B,EAA4BrB,EAAgB4C,CAAqB,CAAC,EAEhEK,EAA2BtJ,GAAY,IAAM,CACjD4I,EAAkB,EAAK,EACvBE,EAAmB,CAAC,EACpBL,GAAkBA,EAAezH,EAAqB,OAAO,CAC/D,EAAG,CAAC4H,EAAmBE,EAAoBL,CAAc,CAAC,EAEpDc,EAAcpJ,EAAQ,IACnB2F,GAAM,KAAK,SAAS,OACxBN,GAAcA,GAAM,YAAcA,GAAM,YAActE,EAAgC,OACzF,EACC,CAAC4E,CAAI,CAAC,EAEHmC,EAAgB9H,EAAQ,IAE1B2F,GAAM,KAAK,SAAS,KACjBN,GAAcA,GAAM,YAAcA,GAAM,YAActE,EAAgC,OACzF,GAAK,CAAC,EAEP,CAAC4E,CAAI,CAAC,EAEH0D,EAA6BrJ,EAAQ,IAAM,CAC/C,OAAQqI,EAAa,CACnB,KAAKxH,EAAqB,QACxB,OACEnB,EAAC4J,GAAA,CACC,QAASF,EACT,SAAUZ,EACV,gBAAiB,IAAM,CACrBC,EAAkB,EAAK,EACvBE,EAAmB,CAAC,CACtB,EACA,gBAAiB,IAAMF,EAAkB,EAAI,EAC/C,EAEJ,KAAK5H,EAAqB,UACxB,OACEnB,EAAC6J,GAAA,CACC,MAAOrD,GAAgB,KACvB,gBAAiBiD,EACjB,gBAAiB,IAAMb,IAAiBzH,EAAqB,OAAO,EACtE,EAEJ,KAAKA,EAAqB,MACxB,OACEnB,EAAC6J,GAAA,CACC,MAAOhB,GAAgB,MACvB,gBAAiBY,EACjB,gBAAiB,IAAMb,IAAiBzH,EAAqB,SAAS,EACxE,EAEJ,QACE,OAAO,IACX,CACF,EAAG,CACD2H,EACAH,EACAC,EACApC,EACAkD,EACAb,EACAY,CACF,CAAC,EAEKK,EAAyB3J,GAC7B,CAACgH,EAAoBE,IAAkB,CACrC,MAAMb,EAAiB,MAAM,QAAQD,CAAe,EAChD,MAAM,QAAQA,EAAgBY,CAAU,CAAC,EAEvCZ,EAAgBY,CAAU,EAAEE,CAAK,EACjC,CAAC,EACH,CAAC,EACLZ,EAAkBD,CAAc,EAC5BA,GAAgB,aAAa,CAAC,GAAG,YAAcpF,EAA0B,MAE3EoF,GAAgB,aAAa,CAAC,GAAG,KAC/B,OAAO,KAAKA,GAAgB,aAAa,CAAC,GAAG,IAAKA,GAAgB,aAAa,CAAC,GAAG,QAAU,QAAQ,EAEvGoC,IAAiBzH,EAAqB,SAAS,CAEnD,EACA,CAACoF,EAAiBqC,CAAc,CAClC,EAEA,OACE3I,EAACW,GAAA,CAAU,UAAWG,EAAG,oBAAqBoF,CAAS,EAEpD,UAAAwD,EACAb,GACC7I,EAAC,OACC,IAAKiJ,EACL,UAAU,wGACV,MAAO,CAAE,OAAQF,CAAgB,EACjC,KAAK,aACL,aAAW,yBAEV,UAAAL,IAAgBxH,EAAqB,SAAWgD,EAC/CnE,EAAC,OAAI,UAAU,OACb,SAAAA,EAACa,GAAA,CAAW,KAAMsD,EAAU,EAC9B,EACE,KACHwE,IAAgBxH,EAAqB,QACpCnB,EAAC+J,GAAA,CACC,WAAYxD,EACZ,mBAAoBuD,EACpB,kBAAmBhG,EACnB,cAAesE,EACjB,EAEAoB,GAEJ,GAEJ,CAEJ,CACF,EAOMO,GAAoB,CAAC,CACzB,WAAA9C,EACA,mBAAA+C,EACA,cAAA5B,EACA,kBAAAtE,CACF,IAOI7D,EAAC,OAAI,UAAU,uCACb,UAAAD,EAAC,OAAI,UAAU,+BACZ,SAAAiH,GAAY,IAAI,CAACC,EAAgBC,IAChClH,EAAC,OAAwC,UAAU,GACjD,UAAAD,EAAC,OAAI,UAAWe,EAAG,+BAA+B,EAAG,EACpDmG,GAAW,IAAI,CAACvB,EAAW0B,IAC1BrH,EAAC8C,GAAA,CAEC,MAAO6C,EAAK,KACZ,QAAS,IAAM,CAEb,MAAM8B,GADiBR,GAAY,KAAK,GAAK,CAAC,IACb,UAC9BtB,GAAcA,GAAM,KAAOsB,EAAWE,CAAU,EAAEE,CAAK,GAAG,EAC7D,EACA2C,EAAmB7C,EAAYE,CAAK,EACpCvD,IAAoB6B,EAAM8B,CAAQ,CACpC,EACA,KAAM9B,EAAK,aAAa,CAAC,GAAG,MAVvBA,EAAK,EAWZ,CACD,IAhBO,iBAAiBwB,CAAU,EAiBrC,CACD,EACH,EACAnH,EAACiK,GAAA,CAAY,cAAe7B,EAAe,GAC7C,EASE6B,GAAc,CAAC,CAAE,cAAA7B,CAAc,IAA8B,CACjE,KAAM,CAAC8B,EAAaC,CAAc,EAAI3J,EAAS,EAAK,EAC9C,CAAE,QAAA+C,EAAS,MAAAD,CAAM,EAAIpC,EAAc,EACnC,CAAE,OAAAoF,EAAS,IAAK,EAAIvD,GAAe,EACzC,OACE9C,EAAC,OACC,UAAWc,EAAG,kDAAmD,CAC/D,MAAOmJ,CACT,CAAC,EAED,UAAAjK,EAAC,UACC,UAAU,kFACV,QAAS,IAAMkK,EAAe,CAACD,CAAW,EAC1C,gBAAeA,EACf,aAAY3G,GAAS,WAAa6E,GAAe,QAEjD,UAAAnI,EAAC,OAAI,UAAU,+BACb,UAAAD,EAAC,OAAI,UAAU,8EACb,SAAAA,EAACgC,GAAA,CAAK,cAAY,OAAO,EAC3B,EACAhC,EAACU,EAAA,CAAK,KAAM6C,GAAS,WAAa6E,GAAe,QAAS,UAAU,oCAAoC,GAC1G,EACC,CAAC7E,GAAS,OACTvD,EAACkC,GAAA,CAAU,cAAY,OAAO,UAAWnB,EAAG,uBAAwB,CAAE,aAAcmJ,CAAY,CAAC,EAAG,GAExG,EACC3G,GAAS,OACRvD,EAAC,OAAI,UAAU,OAAO,KAAK,aAAa,aAAW,eAChD,SAAAoI,GAAe,UAAU,IAAKzC,GAC7B3F,EAAC8C,GAAA,CAAuB,MAAO6C,GAAM,MAAO,KAAM3E,GAAiB2E,GAAM,IAAKW,CAAM,GAArEX,EAAK,EAAmE,CACxF,EACH,EAEDuE,GAAe,CAAC3G,GAAS,OACxBtD,EAAC,OAAI,UAAU,OACb,UAAAD,EAACU,EAAA,CAAK,KAAM0H,GAAe,eAAgB,UAAU,kCAAkC,EACvFpI,EAAC,OAAI,UAAU,2BACZ,SAAAoI,GAAe,UAAU,IAAKzC,GAC7B1F,EAAC,OAAkB,UAAU,8BAC3B,UAAAD,EAACS,GAAA,CAAQ,OAAQkF,EAAK,aAAa,IAAK,UAAU,SAAS,IAAKA,EAAK,QAAS,MAAO,GAAI,OAAQ,GAAI,EACrG3F,EAACU,EAAA,CAAK,KAAMiF,EAAK,QAAS,UAAU,kCAAkC,IAF9DA,EAAK,EAGf,CACD,EACH,GACF,EAED,CAACpC,GAAS,OACTtD,EAAC,OAAI,UAAU,+BACb,UAAAD,EAACW,GAAA,CAAO,UAAU,0BAA0B,QAAQ,YAAY,KAAK,OAAO,QAAS,IAAM2C,GAAO,OAAO,EACvG,SAAAtD,EAACU,EAAA,CAAK,KAAM0H,GAAe,eAAiB,WAAY,UAAU,kCAAkC,EACtG,EACApI,EAACW,GAAA,CAAO,UAAU,0BAA0B,QAAQ,UAAU,KAAK,OAAO,QAAS,IAAM2C,GAAO,QAAQ,EACtG,SAAAtD,EAACU,EAAA,CAAK,KAAM0H,GAAe,iBAAmB,SAAU,UAAU,kCAAkC,EACtG,GACF,GAEJ,CAEJ,EAEMwB,GAAgB,CAAC,CAAE,SAAAQ,EAAU,gBAAAC,EAAiB,gBAAAC,EAAiB,QAAAnC,CAAQ,IAEzElI,EAAC,OAAI,UAAU,iDACb,UAAAD,EAACuI,GAAA,EAAK,EACNtI,EAAC,OAAI,UAAU,wCACb,UAAAD,EAACwI,GAAA,CAAQ,QAASL,EAAS,EAC1BiC,EACCpK,EAAC,UACC,UAAU,6CACV,QAAS,IAAMqK,EAAgB,EAC/B,aAAW,aACX,gBAAc,OAEd,SAAArK,EAAC+B,GAAA,CAAM,UAAU,SAAS,cAAY,OAAO,EAC/C,EAEA/B,EAAC,UACC,UAAU,6CACV,QAAS,IAAMsK,EAAgB,EAC/B,aAAW,YACX,gBAAc,QACd,gBAAc,OAEd,SAAAtK,EAAC8B,GAAA,CAAK,UAAU,SAAS,cAAY,OAAO,EAC9C,GAEJ,GACF,EAIEyG,GAAO,IAAM,CACjB,KAAM,CAAE,YAAAgC,EAAa,SAAA3F,CAAS,EAAI1D,EAAc,EAC1C,CAAE,OAAAoF,EAAS,IAAK,EAAIvD,GAAe,EACzC,OACE/C,EAAC,KACC,KAAMgB,GAAiB,IAAKsF,CAAM,EAClC,UAAU,oCACV,aAAW,OACX,wBAAyB,CACvB,OAAQ1B,EAAW2F,GAAa,KAAK,WAAaA,GAAa,KAAK,WACtE,EACF,CAEJ,EAEM/B,GAAUtI,GACd,CAAC,CAAE,QAAAiI,EAAS,aAAAqC,EAAe,EAAM,EAAGrH,IAAQ,CAC1C,KAAM,CAAE,MAAAG,EAAO,UAAAY,CAAU,EAAIhD,EAAc,EACrC,CAACuJ,EAAcC,CAAe,EAAIlK,EAAc,IAAI,EAEpDmK,EAAkBC,GAAsB,CAC5C,OAAQA,EAAW,CACjB,KAAKvJ,EAAgC,OACnC,MAAO,SACT,KAAKA,EAAgC,KACnC,MAAO,gBAAgB6C,EAAY,EAAI,KAAKA,CAAS,UAAY,EAAE,GACrE,KAAK7C,EAAgC,QACnC,MAAO,eACT,KAAKA,EAAgC,WACnC,MAAO,aACT,QACE,MAAO,QACX,CACF,EAEMwJ,EAAoB1K,GACxB,CAAC2K,EAAazD,IAAkB,CAE9B,OADAqD,EAAgBrD,CAAK,EACbyD,GAAQ,UAAW,CACzB,KAAKzJ,EAAgC,OACnCiC,GAAO,SAAS,EAChB,MACF,KAAKjC,EAAgC,KACnCiC,GAAO,OAAO,EACd,MACF,KAAKjC,EAAgC,QACnCiC,GAAO,UAAU,EACjB,MACF,KAAKjC,EAAgC,WACnCiC,GAAO,aAAa,EACpB,MACF,QACE,MAAO,IAAM,CAAC,CAClB,CACF,EACA,CAACA,CAAK,CACR,EAEA,OACEtD,EAAC,OAAI,UAAU,wCACZ,eAAM,QAAQmI,CAAO,GACpBA,GAAS,IAAI,CAAC2C,EAAazD,IACzBpH,EAAC,UACC,UAAU,sDAEV,IAAK6K,EAAO,YAAczJ,EAAgC,QAAU8B,EAAM,KAC1E,QAAS,IAAM0H,EAAkBC,EAAQzD,CAAK,EAC9C,aAAYsD,EAAeG,EAAO,SAAS,EAC3C,eAAcN,GAAgBC,IAAiBpD,EAE/C,UAAArH,EAACU,EAAA,CACC,KAAMoK,EAAO,KACb,UAAW/J,EAAG,SAAU,CAAE,eAAgByJ,GAAgBC,IAAiBpD,CAAM,CAAC,EAClF,cAAY,OACd,EACCyD,EAAO,YAAczJ,EAAgC,MAAQ6C,EAAY,GACxElE,EAAC,OACC,UAAU,uIACV,cAAY,OAEZ,SAAAA,EAACU,EAAA,CAAK,KAAMwD,GAAW,SAAS,EAAG,UAAU,6CAA6C,EAC5F,IAjBG4G,EAAO,EAmBd,CACD,EACL,CAEJ,CACF,EAEMjB,GAAkB,CAAC,CAAE,MAAAkB,EAAO,gBAAAV,EAAiB,gBAAAW,CAAgB,IAE/D/K,EAAC,OAAI,UAAU,iCACb,UAAAD,EAAC,UACC,UAAU,6CACV,QAAS,IAAMgL,EAAgB,EAC/B,aAAW,wBAEX,SAAAhL,EAACiC,GAAA,CAAU,UAAU,SAAS,cAAY,OAAO,EACnD,EACAjC,EAACU,EAAA,CAAK,KAAMqK,EAAO,UAAU,uDAAuD,EACpF/K,EAAC,UACC,UAAU,6CACV,QAAS,IAAMqK,EAAgB,EAC/B,aAAW,aAEX,SAAArK,EAAC+B,GAAA,CAAM,UAAU,SAAS,cAAY,OAAO,EAC/C,GACF,EAIJ+D,GAAiB,YAAc,mBAC/B0C,GAAQ,YAAc,UACtBvF,GAAiB,YAAc,mBAC/B4C,GAAkB,YAAc,oBAEhC,IAAOoF,GAAQnK,GAAWmC,EAAgB",
|
|
6
|
-
"names": ["Fragment", "jsx", "jsxs", "forwardRef", "useCallback", "useEffect", "useImperativeHandle", "useMemo", "useRef", "useState", "Picture", "Text", "Button", "Container", "BrandStrip", "withLayout", "cn", "getLocalizedPath", "NavProvider", "useNavContext", "HeaderNavigationMenu", "HeaderNavigationBlockType", "HeaderNavigationActionBlockType", "jump", "useGSAP", "gsap", "WithSidebar", "WithSupports", "WithMulticol", "WithGroupCategory", "WithResource", "Menu", "Close", "User", "LeftArrow", "DownArrow", "Polygon", "NavigationSearch", "ResourceSidebarDropdown", "MobileResourceSidebarMenu", "SidebarDropdown", "useScrollLock", "MulticolDropdown", "SupportsDropdown", "MobileSidebarMenu", "MobileSupportMenu", "MobileMulticolMenu", "MenuItem", "useAiuiContext", "throttle", "HeaderNavigation", "props", "ref", "header", "buildProps", "event", "profile", "theme", "isTop", "searchResult", "onSearch", "isSearching", "keywords", "onPrimaryNavClick", "onSeriesProductClick", "onSidebarNavClick", "headerId", "cartCount", "menuData", "render", "rest", "searchOpen", "setSearchOpen", "headerHidden", "setHeaderHidden", "changeHeaderBackground", "setChangeHeaderBackground", "isMobile", "setIsMobile", "searchRef", "headerRef", "resizeWindow", "offsetWidth", "lastScrollY", "upwardDistance", "downwardDistance", "getScrollTop", "initialScrollTop", "handleScroll", "currentScrollY", "delta", "searchPage", "item", "CustomMobileHeaderNavigation", "DesktopNavigation", "MobileNavigation", "value", "e", "data", "onNavItemClick", "className", "downdownHover", "setDowndownHover", "locale", "groupCategories", "categoriesItem", "setCategoriesItem", "navStatusArray", "setNavStatusArray", "profileRef", "userProfileOpen", "setUserProfileOpen", "dropdownRef", "navItemRefs", "categories", "groupItem", "groupIndex", "_", "index", "currentNavItem", "handleNavItemClick", "currentCategoriesItem", "position", "prev", "handleNavItemKeyDown", "handleNavMenuClose", "currentBlockTypeCategories", "SidebarDropdownComp", "ResourceSidebarDropdownComp", "MulticolDropdownComp", "SupportsDropdownComp", "DropdownComp", "actions", "profileAction", "handleProfileClick", "profileRefElement", "Logo", "Actions", "isExpanded", "el", "currentMenu", "setCurrentMenu", "subSubCategory", "mobileMenuOpen", "setMobileMenuOpen", "menuInnerHeight", "setMenuInnerHeight", "mobileMenuRef", "rect", "MobileSupportMenuComp", "MobileSidebarMenuComp", "MobileResourceSidebarMenuComp", "MobileMulticolMenuComp", "MobileCategoriesMenuComp", "handleSecondaryMenuClose", "menuActions", "MobileCategoriesHeaderComp", "PrimaryHeader", "SecondaryHeader", "handlePrimaryMenuClick", "MobilePrimaryMenu", "onPrimaryMenuClick", "ProfileComp", "profileOpen", "setProfileOpen", "menuOpen", "onMenuOpenClose", "onMenuOpenClick", "payloadData", "activeStatus", "activeAction", "setActiveAction", "getActionLabel", "blockType", "handleActionClick", "action", "title", "onMenuBackClick", "HeaderNavigation_default"]
|
|
4
|
+
"sourcesContent": ["'use client'\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport { Picture, Text, Button, Container, BrandStrip } from '../../components/index.js'\n\nimport { withLayout } from '../../shared/Styles.js'\n\nimport { cn, getLocalizedPath } 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 jump from 'jump.js'\n\nimport { useGSAP } from '@gsap/react'\nimport { gsap } from 'gsap'\n\nimport { WithSidebar, WithSupports, WithMulticol, WithGroupCategory, WithResource } from './withCategory.js'\n\nimport { Menu, Close, User, LeftArrow, DownArrow, Polygon } from './icons/index.js'\n\nimport NavigationSearch from '../NavigationSearch/index.js'\nimport { ResourceSidebarDropdown } from './ResourceSidebarDropdown.js'\nimport { MobileResourceSidebarMenu } from './MobileResourceSidebarMenu.js'\nimport { SidebarDropdown } from './SidebarDropdown.js'\nimport { useScrollLock } from './useScrollLock.js'\nimport { MulticolDropdown } from './MulticolDropdown.js'\nimport { SupportsDropdown } from './SupportsDropdown.js'\nimport { MobileSidebarMenu } from './MobileSidebarMenu.js'\nimport { MobileSupportMenu } from './MobileSupportMenu.js'\nimport { MobileMulticolMenu } from './MobileMulticolMenu.js'\nimport { MenuItem } from './MobileMenuComponents.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport throttle from '../../shared/throttle.js'\n\nconst HeaderNavigation = forwardRef<HTMLDivElement, HeaderNavigationProps>((props, ref) => {\n const {\n data: { header } = {},\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 onMobileMenuToggle,\n headerId,\n cartCount,\n menuData,\n render,\n ...rest\n } = props\n\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 const searchRef = useRef<HTMLDivElement>(null)\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 // \u5982\u679C isTop \u4E3A true\uFF0C\u4E0D\u9700\u8981\u6EDA\u52A8\u76D1\u542C\u548C\u52A8\u6548\n if (isTop) {\n setHeaderHidden(false)\n setChangeHeaderBackground(false)\n return\n }\n\n let lastScrollY = 0\n let upwardDistance = 0\n let downwardDistance = 0\n\n const getScrollTop = () => {\n return document?.documentElement?.scrollTop || document?.body?.scrollTop || 0\n }\n\n // \u521D\u59CB\u5316\u72B6\u6001\n const initialScrollTop = getScrollTop()\n lastScrollY = initialScrollTop\n setHeaderHidden(initialScrollTop > 300)\n setChangeHeaderBackground(initialScrollTop > 30)\n\n const handleScroll = throttle(() => {\n const currentScrollY = getScrollTop()\n const delta = currentScrollY - lastScrollY\n\n // \u66F4\u65B0\u80CC\u666F\u72B6\u6001\n setChangeHeaderBackground(currentScrollY > 30)\n\n if (delta > 0) {\n // \u5411\u4E0B\u6EDA\u52A8\n upwardDistance = 0 // \u91CD\u7F6E\u5411\u4E0A\u7D2F\u8BA1\n downwardDistance += delta\n\n if (downwardDistance >= 300 && currentScrollY > 300) {\n setHeaderHidden(true)\n }\n } else if (delta < 0) {\n // \u5411\u4E0A\u6EDA\u52A8\n downwardDistance = 0 // \u91CD\u7F6E\u5411\u4E0B\u7D2F\u8BA1\n upwardDistance += Math.abs(delta)\n\n if (upwardDistance >= 300) {\n setHeaderHidden(false)\n upwardDistance = 0\n }\n }\n\n lastScrollY = currentScrollY\n }, 100)\n\n window.addEventListener('scroll', handleScroll, { passive: true })\n return () => window.removeEventListener('scroll', handleScroll)\n }, [isTop])\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 useScrollLock(searchOpen)\n\n const searchPage = useMemo(() => {\n return (\n header?.bar?.actions?.find((item: any) => item?.blockType === HeaderNavigationActionBlockType.Search)\n ?.searchBar?.[0] || {}\n )\n }, [header])\n\n const CustomMobileHeaderNavigation = render?.mobileHeaderNavigation\n\n return (\n <NavProvider\n buildProps={buildProps}\n profile={profile}\n isMobile={isMobile}\n event={event}\n payloadData={header}\n onSidebarNavClick={onSidebarNavClick}\n onSeriesProductClick={onSeriesProductClick}\n cartCount={cartCount}\n >\n <header\n {...rest}\n id={headerId || 'header'}\n data-ui-component-id=\"HeaderNavigation\"\n className={\n isTop\n ? 'relative z-[100] bg-white'\n : cn('sticky top-0 z-[100] transition-transform duration-500 ease-in-out', {\n ['translate-y-[-100%]']: headerHidden,\n })\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']: !isTop && changeHeaderBackground,\n },\n {\n ['hover:!text-black']: theme === 'dark',\n ['!text-black']: !isTop && changeHeaderBackground,\n }\n )}\n onClick={() => !isTop && setChangeHeaderBackground(true)}\n >\n <DesktopNavigation\n data={header}\n className=\"desktop:block hidden !bg-white\"\n theme={theme}\n onNavItemClick={() => !isTop && setChangeHeaderBackground(true)}\n onPrimaryNavClick={onPrimaryNavClick}\n />\n {CustomMobileHeaderNavigation ? (\n <CustomMobileHeaderNavigation\n className=\"desktop:hidden block !bg-white\"\n menuData={menuData}\n data={header}\n onPrimaryNavClick={onPrimaryNavClick}\n />\n ) : (\n <MobileNavigation\n menuData={menuData}\n data={header}\n className=\"desktop:hidden block !bg-white\"\n onPrimaryNavClick={onPrimaryNavClick}\n onMobileMenuToggle={onMobileMenuToggle}\n />\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 role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Search\"\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\n className=\"flex-1 bg-transparent\"\n onClick={() => setSearchOpen(false)}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close search\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n setSearchOpen(false)\n }\n }}\n />\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 const { locale = 'us' } = useAiuiContext()\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<HTMLButtonElement>(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 useScrollLock(!!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 const currentCategoriesItem = groupCategories[groupIndex][index]\n if (currentCategoriesItem?.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 currentCategoriesItem?.components?.[0]?.url &&\n window.open(\n currentCategoriesItem?.components?.[0]?.url,\n currentCategoriesItem?.components?.[0]?.target ?? '_blank'\n )\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 setCategoriesItem(currentCategoriesItem)\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 handleNavItemKeyDown = (e: React.KeyboardEvent, groupIndex: number, index: number) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleNavItemClick(e, groupIndex, index)\n } else if (e.key === 'Escape' && currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index) {\n e.preventDefault()\n handleNavMenuClose()\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 ResourceSidebarDropdownComp = WithResource(ResourceSidebarDropdown, 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.Resource:\n return <ResourceSidebarDropdownComp />\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?.bar?.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 HTMLButtonElement\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 <nav className=\"flex justify-between\" role=\"navigation\" aria-label=\"Primary navigation\">\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 const isExpanded = currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index\n return (\n <div\n key={item.id}\n ref={(el: HTMLDivElement) => {\n navItemRefs.current[groupIndex][index] = el\n }}\n className=\"group\"\n >\n <div className=\"relative\">\n <button\n className=\"flex cursor-pointer items-center gap-1 border-0 bg-transparent pb-4\"\n onClick={e => handleNavItemClick(e, groupIndex, index)}\n onKeyDown={e => handleNavItemKeyDown(e, groupIndex, index)}\n aria-expanded={isExpanded}\n aria-haspopup=\"true\"\n aria-label={item.text}\n >\n <Text html={item.text} className=\"text-sm font-bold leading-[1.4]\" />\n {/* <DownArrow\n aria-hidden=\"true\"\n className={cn('size-4 opacity-0 transition-opacity duration-500 group-hover:opacity-100', {\n ['rotate-180']: isExpanded,\n ['opacity-100']: downdownHover && isExpanded,\n })}\n /> */}\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 ['invisible']:\n !item?.components?.length ||\n item?.components?.[0]?.blockType === HeaderNavigationBlockType.Links,\n })}\n />\n </button>\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)]': isExpanded,\n },\n theme === 'dark' ? 'bg-white' : 'bg-[#080A0F]'\n )}\n aria-hidden=\"true\"\n />\n </div>\n </div>\n )\n })}\n </div>\n )\n })}\n </nav>\n </div>\n <div\n role=\"menu\"\n aria-hidden={!(currentNavItem?.open && categoriesItem)}\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\n className=\"flex-1 bg-transparent\"\n onClick={handleNavMenuClose}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close menu\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n handleNavMenuClose()\n }\n }}\n />\n </div>\n {userProfileOpen && (\n <div\n className=\"absolute left-0 top-full z-[999] flex h-dvh w-full bg-black/70\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"User profile menu\"\n // style={{\n // height: `calc(100dvh - ${profileRef?.current?.getBoundingClientRect()?.bottom}px)`,\n // top: `calc(96px)`,\n // }}\n >\n <div\n className=\"rounded-box absolute w-[272px] overflow-hidden 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]\" aria-hidden=\"true\" />\n <nav className=\"mt-2\" role=\"navigation\" aria-label=\"Profile navigation\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem\n className=\"py-2\"\n key={item.id}\n label={item?.title}\n href={getLocalizedPath(item?.url, locale)}\n />\n ))}\n </nav>\n </>\n ) : (\n <>\n <Polygon className=\"absolute -top-2 right-[46px] z-30 text-white\" aria-hidden=\"true\" />\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\n className=\"flex-1 bg-transparent\"\n onClick={() => setUserProfileOpen(false)}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Close profile menu\"\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Escape') {\n e.preventDefault()\n setUserProfileOpen(false)\n }\n }}\n />\n </div>\n )}\n </Container>\n )\n})\n\nconst MobileNavigation = forwardRef<HTMLDivElement, MobileNavigationProps>(\n ({ data, menuData, className, onPrimaryNavClick, onMobileMenuToggle }, 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\n onMobileMenuToggle?.({ open: mobileMenuOpen })\n }, [mobileMenuOpen, onMobileMenuToggle])\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 useScrollLock(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 MobileResourceSidebarMenuComp = WithResource(MobileResourceSidebarMenu, 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.Resource:\n return <MobileResourceSidebarMenuComp />\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?.bar?.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?.bar?.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 &&\n window.open(categoriesItem?.components?.[0]?.url, categoriesItem?.components?.[0]?.target ?? '_blank')\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 <nav\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 role=\"navigation\"\n aria-label=\"Mobile navigation menu\"\n >\n {currentMenu === HeaderNavigationMenu.Primary && menuData ? (\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 </nav>\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 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 ProfileComp = ({ profileAction }: { profileAction: any }) => {\n const [profileOpen, setProfileOpen] = useState(false)\n const { profile, event } = useNavContext()\n const { locale = 'us' } = useAiuiContext()\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 <button\n className=\"flex w-full cursor-pointer items-center justify-between border-0 bg-transparent\"\n onClick={() => setProfileOpen(!profileOpen)}\n aria-expanded={profileOpen}\n aria-label={profile?.nick_name || profileAction?.welcome}\n >\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 aria-hidden=\"true\" />\n </div>\n <Text html={profile?.nick_name || profileAction?.welcome} className=\"text-base font-bold leading-[1.4]\" />\n </div>\n {!profile?.email && (\n <DownArrow aria-hidden=\"true\" className={cn('laptop:size-4 size-5', { 'rotate-180': profileOpen })} />\n )}\n </button>\n {profile?.email && (\n <nav className=\"mt-4\" role=\"navigation\" aria-label=\"Profile menu\">\n {profileAction?.profiles?.map((item: any) => (\n <MenuItem key={item.id} label={item?.title} href={getLocalizedPath(item?.url, locale)} />\n ))}\n </nav>\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 <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClose()}\n aria-label=\"Close menu\"\n aria-expanded=\"true\"\n >\n <Close className=\"size-5\" aria-hidden=\"true\" />\n </button>\n ) : (\n <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClick()}\n aria-label=\"Open menu\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\"\n >\n <Menu className=\"size-5\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n </div>\n )\n}\n\nconst Logo = () => {\n const { payloadData, isMobile } = useNavContext()\n const { locale = 'us' } = useAiuiContext()\n return (\n <a\n href={getLocalizedPath('/', locale)}\n className=\"hover:text-brand-0 [&>svg]:w-full\"\n aria-label=\"Home\"\n dangerouslySetInnerHTML={{\n __html: isMobile ? payloadData?.bar?.mobileLogo : payloadData?.bar?.desktopLogo,\n }}\n />\n )\n}\n\nconst Actions = forwardRef<HTMLButtonElement, { actions: any; activeStatus?: boolean }>(\n ({ actions, activeStatus = false }, ref) => {\n const { event, cartCount } = useNavContext()\n const [activeAction, setActiveAction] = useState<any>(null)\n\n const getActionLabel = (blockType: string) => {\n switch (blockType) {\n case HeaderNavigationActionBlockType.Search:\n return 'Search'\n case HeaderNavigationActionBlockType.Cart:\n return `Shopping cart${cartCount > 0 ? ` (${cartCount} items)` : ''}`\n case HeaderNavigationActionBlockType.Profile:\n return 'User profile'\n case HeaderNavigationActionBlockType.Livestream:\n return 'Livestream'\n default:\n return 'Action'\n }\n }\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 <button\n className=\"relative cursor-pointer border-0 bg-transparent p-0\"\n key={action.id}\n ref={action.blockType === HeaderNavigationActionBlockType.Profile ? ref : null}\n onClick={() => handleActionClick(action, index)}\n aria-label={getActionLabel(action.blockType)}\n aria-pressed={activeStatus && activeAction === index}\n >\n <Text\n html={action.icon}\n className={cn('size-5', { 'text-brand-0': activeStatus && activeAction === index })}\n aria-hidden=\"true\"\n />\n {action.blockType === HeaderNavigationActionBlockType.Cart && cartCount > 0 && (\n <div\n 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 aria-hidden=\"true\"\n >\n <Text html={cartCount?.toString()} className=\"text-sm font-bold leading-[1.2] text-white\" />\n </div>\n )}\n </button>\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 <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuBackClick()}\n aria-label=\"Back to previous menu\"\n >\n <LeftArrow className=\"size-5\" aria-hidden=\"true\" />\n </button>\n <Text html={title} className=\"flex-1 text-center text-base font-bold leading-[1.4]\" />\n <button\n className=\"cursor-pointer border-0 bg-transparent p-0\"\n onClick={() => onMenuOpenClose()}\n aria-label=\"Close menu\"\n >\n <Close className=\"size-5\" aria-hidden=\"true\" />\n </button>\n </div>\n )\n}\n\nMobileNavigation.displayName = 'MobileNavigation'\nActions.displayName = 'Actions'\nHeaderNavigation.displayName = 'HeaderNavigation'\nDesktopNavigation.displayName = 'DesktopNavigation'\n\nexport default withLayout(HeaderNavigation)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Fragment", "jsx", "jsxs", "forwardRef", "useCallback", "useEffect", "useImperativeHandle", "useMemo", "useRef", "useState", "Picture", "Text", "Button", "Container", "BrandStrip", "withLayout", "cn", "getLocalizedPath", "NavProvider", "useNavContext", "HeaderNavigationMenu", "HeaderNavigationBlockType", "HeaderNavigationActionBlockType", "jump", "useGSAP", "gsap", "WithSidebar", "WithSupports", "WithMulticol", "WithGroupCategory", "WithResource", "Menu", "Close", "User", "LeftArrow", "DownArrow", "Polygon", "NavigationSearch", "ResourceSidebarDropdown", "MobileResourceSidebarMenu", "SidebarDropdown", "useScrollLock", "MulticolDropdown", "SupportsDropdown", "MobileSidebarMenu", "MobileSupportMenu", "MobileMulticolMenu", "MenuItem", "useAiuiContext", "throttle", "HeaderNavigation", "props", "ref", "header", "buildProps", "event", "profile", "theme", "isTop", "searchResult", "onSearch", "isSearching", "keywords", "onPrimaryNavClick", "onSeriesProductClick", "onSidebarNavClick", "onMobileMenuToggle", "headerId", "cartCount", "menuData", "render", "rest", "searchOpen", "setSearchOpen", "headerHidden", "setHeaderHidden", "changeHeaderBackground", "setChangeHeaderBackground", "isMobile", "setIsMobile", "searchRef", "headerRef", "resizeWindow", "offsetWidth", "lastScrollY", "upwardDistance", "downwardDistance", "getScrollTop", "initialScrollTop", "handleScroll", "currentScrollY", "delta", "searchPage", "item", "CustomMobileHeaderNavigation", "DesktopNavigation", "MobileNavigation", "value", "e", "data", "onNavItemClick", "className", "downdownHover", "setDowndownHover", "locale", "groupCategories", "categoriesItem", "setCategoriesItem", "navStatusArray", "setNavStatusArray", "profileRef", "userProfileOpen", "setUserProfileOpen", "dropdownRef", "navItemRefs", "categories", "groupItem", "groupIndex", "_", "index", "currentNavItem", "handleNavItemClick", "currentCategoriesItem", "position", "prev", "handleNavItemKeyDown", "handleNavMenuClose", "currentBlockTypeCategories", "SidebarDropdownComp", "ResourceSidebarDropdownComp", "MulticolDropdownComp", "SupportsDropdownComp", "DropdownComp", "actions", "profileAction", "handleProfileClick", "profileRefElement", "Logo", "Actions", "isExpanded", "el", "currentMenu", "setCurrentMenu", "subSubCategory", "mobileMenuOpen", "setMobileMenuOpen", "menuInnerHeight", "setMenuInnerHeight", "mobileMenuRef", "rect", "MobileSupportMenuComp", "MobileSidebarMenuComp", "MobileResourceSidebarMenuComp", "MobileMulticolMenuComp", "MobileCategoriesMenuComp", "handleSecondaryMenuClose", "menuActions", "MobileCategoriesHeaderComp", "PrimaryHeader", "SecondaryHeader", "handlePrimaryMenuClick", "MobilePrimaryMenu", "onPrimaryMenuClick", "ProfileComp", "profileOpen", "setProfileOpen", "menuOpen", "onMenuOpenClose", "onMenuOpenClick", "payloadData", "activeStatus", "activeAction", "setActiveAction", "getActionLabel", "blockType", "handleActionClick", "action", "title", "onMenuBackClick", "HeaderNavigation_default"]
|
|
7
7
|
}
|
|
@@ -6,6 +6,9 @@ export interface HeaderNavigationProps extends Omit<React.HTMLAttributes<HTMLEle
|
|
|
6
6
|
onPrimaryNavClick?: (_category: any, _position: number) => void;
|
|
7
7
|
onSidebarNavClick?: (_series: any, _index: number) => void;
|
|
8
8
|
onSeriesProductClick?: (_product: any, _position: number, _seriesLabel?: string) => void;
|
|
9
|
+
onMobileMenuToggle?: (data: {
|
|
10
|
+
open?: boolean;
|
|
11
|
+
}) => void;
|
|
9
12
|
searchResult?: any;
|
|
10
13
|
onSearch?: (_value?: string) => void;
|
|
11
14
|
isSearching?: boolean;
|
|
@@ -70,6 +73,9 @@ export interface MobileNavigationProps {
|
|
|
70
73
|
menuData: any;
|
|
71
74
|
className?: string;
|
|
72
75
|
onPrimaryNavClick?: (_category: any, _position: number) => void;
|
|
76
|
+
onMobileMenuToggle?: (data: {
|
|
77
|
+
open?: boolean;
|
|
78
|
+
}) => void;
|
|
73
79
|
}
|
|
74
80
|
export interface DesktopNavigationProps {
|
|
75
81
|
data: any;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var r=(e=>(e.Primary="primary",e.Secondary="secondary",e.Third="third",e))(r||{}),o=(n=>(n.Sidebar="ipc-navigation-sidebar",n.Supports="ipc-navigation-supports",n.Multicol="ipc-navigation-multicol",n.Links="ipc-navigation-links",n.Resource="ipc-navigation-resource",n))(o||{}),t=(i=>(i.Search="ipc-navigation-action-search",i.Cart="ipc-navigation-action-cart",i.Profile="ipc-navigation-action-profile",i.Livestream="ipc-navigation-action-livestream",i))(t||{});export{t as HeaderNavigationActionBlockType,o 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 React from 'react'\nimport type { Product } from '../../cpn-components/CpnProductCard/types.js'\n\nexport interface HeaderNavigationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'className'> {\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, _seriesLabel?: string) => 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 render?: {\n mobileHeaderNavigation?: (props: MobileNavigationProps) => React.ReactNode\n }\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 Resource = 'ipc-navigation-resource',\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": "
|
|
4
|
+
"sourcesContent": ["import type React from 'react'\nimport type { Product } from '../../cpn-components/CpnProductCard/types.js'\n\nexport interface HeaderNavigationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'className'> {\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, _seriesLabel?: string) => void\n onMobileMenuToggle?: (data: { open?: boolean }) => 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 render?: {\n mobileHeaderNavigation?: (props: MobileNavigationProps) => React.ReactNode\n }\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 Resource = 'ipc-navigation-resource',\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 onMobileMenuToggle?: (data: { open?: boolean }) => 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": "AAsDO,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,uBACRA,EAAA,SAAW,0BALDA,OAAA,IAQAC,OACVA,EAAA,OAAS,+BACTA,EAAA,KAAO,6BACPA,EAAA,QAAU,gCACVA,EAAA,WAAa,mCAJHA,OAAA",
|
|
6
6
|
"names": ["HeaderNavigationMenu", "HeaderNavigationBlockType", "HeaderNavigationActionBlockType"]
|
|
7
7
|
}
|