@anker-in/headless-ui 1.0.10 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/biz-components/AccordionCards/index.js +1 -1
- package/dist/cjs/biz-components/AccordionCards/index.js.map +2 -2
- package/dist/cjs/biz-components/CreativeModule/index.d.ts +21 -0
- package/dist/cjs/biz-components/CreativeModule/index.js +2 -0
- package/dist/cjs/biz-components/CreativeModule/index.js.map +7 -0
- package/dist/cjs/biz-components/Evaluate/index.js +1 -1
- package/dist/cjs/biz-components/Evaluate/index.js.map +3 -3
- package/dist/cjs/biz-components/FooterNavigation/icons/Add.d.ts +3 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/Add.js +2 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/Add.js.map +7 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/ArrowRight.d.ts +3 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/ArrowRight.js +2 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/ArrowRight.js.map +7 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/Country.d.ts +3 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/Country.js +2 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/Country.js.map +7 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/Subtract.d.ts +3 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/Subtract.js +2 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/Subtract.js.map +7 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/index.d.ts +5 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/index.js +2 -0
- package/dist/cjs/biz-components/FooterNavigation/icons/index.js.map +7 -0
- package/dist/cjs/biz-components/FooterNavigation/index.d.ts +6 -0
- package/dist/cjs/biz-components/FooterNavigation/index.js +2 -0
- package/dist/cjs/biz-components/FooterNavigation/index.js.map +7 -0
- package/dist/cjs/biz-components/FooterNavigation/types.d.ts +13 -0
- package/dist/cjs/biz-components/FooterNavigation/types.js +2 -0
- package/dist/cjs/biz-components/FooterNavigation/types.js.map +7 -0
- package/dist/cjs/biz-components/Graphic/index.d.ts +10 -0
- package/dist/cjs/biz-components/Graphic/index.js +1 -1
- package/dist/cjs/biz-components/Graphic/index.js.map +3 -3
- package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.d.ts +8 -0
- package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.js +2 -0
- package/dist/cjs/biz-components/GraphicOverlay/GraphicOverlay.js.map +7 -0
- package/dist/cjs/biz-components/GraphicOverlay/index.d.ts +2 -0
- package/dist/cjs/biz-components/GraphicOverlay/index.js +2 -0
- package/dist/cjs/biz-components/GraphicOverlay/index.js.map +7 -0
- package/dist/cjs/biz-components/GraphicOverlay/types.d.ts +33 -0
- package/dist/cjs/biz-components/GraphicOverlay/types.js +2 -0
- package/dist/cjs/biz-components/GraphicOverlay/types.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/NavProvider.d.ts +32 -0
- package/dist/cjs/biz-components/HeaderNavigation/NavProvider.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/NavProvider.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/AnkerLogo.d.ts +3 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/AnkerLogo.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/AnkerLogo.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Cart.d.ts +3 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Cart.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Cart.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Close.d.ts +3 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Close.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Close.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/DownArrow.d.ts +3 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/DownArrow.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/DownArrow.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/LeftArrow.d.ts +3 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/LeftArrow.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/LeftArrow.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/LogoLine.d.ts +3 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/LogoLine.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/LogoLine.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Menu.d.ts +3 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Menu.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Menu.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/RightArrow.d.ts +3 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/RightArrow.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/RightArrow.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Search.d.ts +3 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Search.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/Search.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/User.d.ts +3 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/User.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/User.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/index.d.ts +11 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/index.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/icons/index.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/index.d.ts +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/index.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/index.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/types.d.ts +77 -0
- package/dist/cjs/biz-components/HeaderNavigation/types.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/types.js.map +7 -0
- package/dist/cjs/biz-components/HeaderNavigation/withCategory.d.ts +9 -0
- package/dist/cjs/biz-components/HeaderNavigation/withCategory.js +2 -0
- package/dist/cjs/biz-components/HeaderNavigation/withCategory.js.map +7 -0
- package/dist/cjs/biz-components/MediaPlayerMulti/index.js +1 -1
- package/dist/cjs/biz-components/MediaPlayerMulti/index.js.map +2 -2
- package/dist/cjs/biz-components/ShelfDisplay/index.js +2 -2
- package/dist/cjs/biz-components/ShelfDisplay/index.js.map +3 -3
- package/dist/cjs/biz-components/ShelfDisplay/shelfDisplay.js +1 -1
- package/dist/cjs/biz-components/ShelfDisplay/shelfDisplay.js.map +2 -2
- package/dist/cjs/biz-components/Slogan/index.js +1 -1
- package/dist/cjs/biz-components/Slogan/index.js.map +2 -2
- package/dist/cjs/biz-components/Subscribe/index.d.ts +13 -0
- package/dist/cjs/biz-components/Subscribe/index.js +2 -0
- package/dist/cjs/biz-components/Subscribe/index.js.map +7 -0
- package/dist/cjs/biz-components/TextModal/index.d.ts +14 -0
- package/dist/cjs/biz-components/TextModal/index.js +2 -0
- package/dist/cjs/biz-components/TextModal/index.js.map +7 -0
- package/dist/cjs/biz-components/Title/index.js +1 -1
- package/dist/cjs/biz-components/Title/index.js.map +3 -3
- package/dist/cjs/biz-components/Title/types.d.ts +3 -2
- package/dist/cjs/biz-components/Title/types.js +1 -1
- package/dist/cjs/biz-components/Title/types.js.map +1 -1
- package/dist/cjs/biz-components/index.d.ts +4 -0
- package/dist/cjs/biz-components/index.js +1 -1
- package/dist/cjs/biz-components/index.js.map +3 -3
- package/dist/cjs/components/board.d.ts +2 -0
- package/dist/cjs/components/board.js +2 -0
- package/dist/cjs/components/board.js.map +7 -0
- package/dist/cjs/components/container.d.ts +2 -0
- package/dist/cjs/components/container.js +1 -1
- package/dist/cjs/components/container.js.map +3 -3
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/index.js.map +3 -3
- package/dist/cjs/components/link.js +1 -1
- package/dist/cjs/components/link.js.map +2 -2
- package/dist/cjs/helpers/utils.d.ts +1 -0
- package/dist/cjs/helpers/utils.js +1 -1
- package/dist/cjs/helpers/utils.js.map +3 -3
- package/dist/cjs/stories/board.stories.d.ts +6 -0
- package/dist/cjs/stories/board.stories.js +2 -0
- package/dist/cjs/stories/board.stories.js.map +7 -0
- package/dist/cjs/stories/container.stories.d.ts +1 -0
- package/dist/cjs/stories/creativeModule.stories.d.ts +19 -0
- package/dist/cjs/stories/creativeModule.stories.js +2 -0
- package/dist/cjs/stories/creativeModule.stories.js.map +7 -0
- package/dist/cjs/stories/graphic.stories.d.ts +10 -0
- package/dist/cjs/stories/graphic.stories.js +1 -1
- package/dist/cjs/stories/graphic.stories.js.map +2 -2
- package/dist/cjs/stories/whychoose.stories.js +1 -1
- package/dist/cjs/stories/whychoose.stories.js.map +1 -1
- package/dist/esm/biz-components/AccordionCards/index.js +1 -1
- package/dist/esm/biz-components/AccordionCards/index.js.map +2 -2
- package/dist/esm/biz-components/CreativeModule/index.d.ts +21 -0
- package/dist/esm/biz-components/CreativeModule/index.js +2 -0
- package/dist/esm/biz-components/CreativeModule/index.js.map +7 -0
- package/dist/esm/biz-components/Evaluate/index.js +1 -1
- package/dist/esm/biz-components/Evaluate/index.js.map +3 -3
- package/dist/esm/biz-components/FooterNavigation/icons/Add.d.ts +3 -0
- package/dist/esm/biz-components/FooterNavigation/icons/Add.js +2 -0
- package/dist/esm/biz-components/FooterNavigation/icons/Add.js.map +7 -0
- package/dist/esm/biz-components/FooterNavigation/icons/ArrowRight.d.ts +3 -0
- package/dist/esm/biz-components/FooterNavigation/icons/ArrowRight.js +2 -0
- package/dist/esm/biz-components/FooterNavigation/icons/ArrowRight.js.map +7 -0
- package/dist/esm/biz-components/FooterNavigation/icons/Country.d.ts +3 -0
- package/dist/esm/biz-components/FooterNavigation/icons/Country.js +2 -0
- package/dist/esm/biz-components/FooterNavigation/icons/Country.js.map +7 -0
- package/dist/esm/biz-components/FooterNavigation/icons/Subtract.d.ts +3 -0
- package/dist/esm/biz-components/FooterNavigation/icons/Subtract.js +2 -0
- package/dist/esm/biz-components/FooterNavigation/icons/Subtract.js.map +7 -0
- package/dist/esm/biz-components/FooterNavigation/icons/index.d.ts +5 -0
- package/dist/esm/biz-components/FooterNavigation/icons/index.js +2 -0
- package/dist/esm/biz-components/FooterNavigation/icons/index.js.map +7 -0
- package/dist/esm/biz-components/FooterNavigation/index.d.ts +6 -0
- package/dist/esm/biz-components/FooterNavigation/index.js +2 -0
- package/dist/esm/biz-components/FooterNavigation/index.js.map +7 -0
- package/dist/esm/biz-components/FooterNavigation/types.d.ts +13 -0
- package/dist/esm/biz-components/FooterNavigation/types.js +2 -0
- package/dist/esm/biz-components/FooterNavigation/types.js.map +7 -0
- package/dist/esm/biz-components/Graphic/index.d.ts +10 -0
- package/dist/esm/biz-components/Graphic/index.js +1 -1
- package/dist/esm/biz-components/Graphic/index.js.map +3 -3
- package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.d.ts +8 -0
- package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.js +2 -0
- package/dist/esm/biz-components/GraphicOverlay/GraphicOverlay.js.map +7 -0
- package/dist/esm/biz-components/GraphicOverlay/index.d.ts +2 -0
- package/dist/esm/biz-components/GraphicOverlay/index.js +2 -0
- package/dist/esm/biz-components/GraphicOverlay/index.js.map +7 -0
- package/dist/esm/biz-components/GraphicOverlay/types.d.ts +33 -0
- package/dist/esm/biz-components/GraphicOverlay/types.js +1 -0
- package/dist/esm/biz-components/GraphicOverlay/types.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/NavProvider.d.ts +32 -0
- package/dist/esm/biz-components/HeaderNavigation/NavProvider.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/NavProvider.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/AnkerLogo.d.ts +3 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/AnkerLogo.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/AnkerLogo.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Cart.d.ts +3 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Cart.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Cart.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Close.d.ts +3 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Close.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Close.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/DownArrow.d.ts +3 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/DownArrow.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/DownArrow.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/LeftArrow.d.ts +3 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/LeftArrow.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/LeftArrow.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/LogoLine.d.ts +3 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/LogoLine.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/LogoLine.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Menu.d.ts +3 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Menu.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Menu.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/RightArrow.d.ts +3 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/RightArrow.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/RightArrow.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Search.d.ts +3 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Search.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/Search.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/User.d.ts +3 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/User.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/User.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/index.d.ts +11 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/index.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/icons/index.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/index.d.ts +7 -0
- package/dist/esm/biz-components/HeaderNavigation/index.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/index.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/types.d.ts +77 -0
- package/dist/esm/biz-components/HeaderNavigation/types.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/types.js.map +7 -0
- package/dist/esm/biz-components/HeaderNavigation/withCategory.d.ts +9 -0
- package/dist/esm/biz-components/HeaderNavigation/withCategory.js +2 -0
- package/dist/esm/biz-components/HeaderNavigation/withCategory.js.map +7 -0
- package/dist/esm/biz-components/MediaPlayerMulti/index.js +1 -1
- package/dist/esm/biz-components/MediaPlayerMulti/index.js.map +2 -2
- package/dist/esm/biz-components/ShelfDisplay/index.js +3 -3
- package/dist/esm/biz-components/ShelfDisplay/index.js.map +3 -3
- package/dist/esm/biz-components/ShelfDisplay/shelfDisplay.js +1 -1
- package/dist/esm/biz-components/ShelfDisplay/shelfDisplay.js.map +2 -2
- package/dist/esm/biz-components/Slogan/index.js +1 -1
- package/dist/esm/biz-components/Slogan/index.js.map +2 -2
- package/dist/esm/biz-components/Subscribe/index.d.ts +13 -0
- package/dist/esm/biz-components/Subscribe/index.js +2 -0
- package/dist/esm/biz-components/Subscribe/index.js.map +7 -0
- package/dist/esm/biz-components/TextModal/index.d.ts +14 -0
- package/dist/esm/biz-components/TextModal/index.js +2 -0
- package/dist/esm/biz-components/TextModal/index.js.map +7 -0
- package/dist/esm/biz-components/Title/index.js +1 -1
- package/dist/esm/biz-components/Title/index.js.map +3 -3
- package/dist/esm/biz-components/Title/types.d.ts +3 -2
- package/dist/esm/biz-components/index.d.ts +4 -0
- package/dist/esm/biz-components/index.js +1 -1
- package/dist/esm/biz-components/index.js.map +2 -2
- package/dist/esm/components/board.d.ts +2 -0
- package/dist/esm/components/board.js +2 -0
- package/dist/esm/components/board.js.map +7 -0
- package/dist/esm/components/container.d.ts +2 -0
- package/dist/esm/components/container.js +1 -1
- package/dist/esm/components/container.js.map +3 -3
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/index.js.map +2 -2
- package/dist/esm/components/link.js +1 -1
- package/dist/esm/components/link.js.map +2 -2
- package/dist/esm/helpers/utils.d.ts +1 -0
- package/dist/esm/helpers/utils.js +1 -1
- package/dist/esm/helpers/utils.js.map +3 -3
- package/dist/esm/stories/board.stories.d.ts +6 -0
- package/dist/esm/stories/board.stories.js +2 -0
- package/dist/esm/stories/board.stories.js.map +7 -0
- package/dist/esm/stories/container.stories.d.ts +1 -0
- package/dist/esm/stories/creativeModule.stories.d.ts +19 -0
- package/dist/esm/stories/creativeModule.stories.js +2 -0
- package/dist/esm/stories/creativeModule.stories.js.map +7 -0
- package/dist/esm/stories/graphic.stories.d.ts +10 -0
- package/dist/esm/stories/graphic.stories.js +1 -1
- package/dist/esm/stories/graphic.stories.js.map +2 -2
- package/dist/esm/stories/whychoose.stories.js +1 -1
- package/dist/esm/stories/whychoose.stories.js.map +1 -1
- package/package.json +1 -1
- package/style.css +6 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/biz-components/HeaderNavigation/index.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport { Picture, Text, Button, Container, Link } from '../../components/index.js'\n\nimport { withLayout } from '../../shared/Styles.js'\n\nimport { cn, atobID } from '../../helpers/utils.js'\n\nimport type {\n MobilePrimaryNavigationData,\n MobileSecondaryNavigationData,\n MobileNavigationProps,\n DesktopNavigationProps,\n HeaderNavigationProps,\n} from './types.js'\nimport NavProvider, { useNavContext } from './NavProvider.js'\n\nimport { HeaderNavigationMenu, HeaderNavigationBlockType, HeaderNavigationActionBlockType } from './types.js'\n\nimport { useMediaQuery } from 'react-responsive'\nimport { debounce, throttle } from 'es-toolkit'\n\nimport { useGSAP } from '@gsap/react'\nimport { gsap } from 'gsap'\nimport type { Product, ProductVariant } from '../../cpn-components/CpnProductCard/types.js'\n\nimport { WithSidebar, WithSupports, WithMulticol, WithGroupCategory } from './withCategory.js'\n\nimport { Menu, Close, User, RightArrow, LeftArrow, DownArrow, LogoLine } from './icons/index.js'\n\nconst HeaderNavigation = forwardRef<HTMLDivElement, HeaderNavigationProps>((props, ref) => {\n const { data: { headerNavigation } = {}, buildProps, event, profile, theme = 'light' } = props\n\n const [isMobile, setIsMobile] = useState(false)\n const [headerHidden, setHeaderHidden] = useState(false)\n const [changeHeaderBackground, setChangeHeaderBackground] = useState(false)\n\n const headerRef = useRef<HTMLDivElement>(null)\n\n const mediaQuery = useMediaQuery({ query: '(max-width: 1440px)' })\n\n useEffect(() => {\n setIsMobile(mediaQuery)\n }, [mediaQuery])\n\n useImperativeHandle(ref, () => headerRef.current as HTMLDivElement)\n\n useEffect(() => {\n let upwardDistance = 0\n let lastScrollY = 0\n const showDownNav = throttle(latest => {\n const delta = lastScrollY - latest\n if (delta > 0) {\n upwardDistance += delta\n if (upwardDistance >= 300) {\n setHeaderHidden(false)\n upwardDistance = 0\n }\n } else {\n setHeaderHidden(latest > 300)\n }\n setChangeHeaderBackground(latest > 24)\n lastScrollY = latest\n }, 200)\n\n const scrollAnimate = () => {\n let scrollTop = 0\n if (document?.documentElement && document?.documentElement?.scrollTop) {\n scrollTop = document?.documentElement.scrollTop\n } else if (document?.body) {\n scrollTop = document?.body.scrollTop\n }\n showDownNav(scrollTop)\n }\n\n window.addEventListener('scroll', scrollAnimate)\n\n return () => window.removeEventListener('scroll', scrollAnimate)\n }, [])\n\n return (\n <NavProvider\n buildProps={buildProps}\n profile={profile}\n isMobile={isMobile}\n event={event}\n payloadData={headerNavigation}\n >\n <header data-ui-component-id=\"HeaderNavigation\" className=\"sticky top-0 z-50\" ref={headerRef}>\n <div\n className={cn(\n 'border-b border-b-gray-200',\n theme === 'light' ? 'text-black' : 'text-white',\n {\n ['translate-y-[-100%] transition-transform duration-500 ease-in-out']: headerHidden,\n ['!bg-white transition-all duration-500 ease-in-out']: changeHeaderBackground,\n },\n {\n ['hover:!text-black']: theme === 'dark',\n ['!text-black']: changeHeaderBackground,\n }\n )}\n >\n {!isMobile && <DesktopNavigation data={headerNavigation} />}\n {isMobile && <MobileNavigation data={headerNavigation} />}\n </div>\n </header>\n </NavProvider>\n )\n})\n\nconst DesktopNavigation = forwardRef<HTMLDivElement, DesktopNavigationProps>((props, ref) => {\n const { data } = props\n const { event } = useNavContext()\n\n const groupCategories = useMemo(() => {\n return WithGroupCategory(data?.categories) as any[][]\n }, [data])\n\n const [categoriesItem, setCategoriesItem] = useState<any>(null)\n const [navStatusArray, setNavStatusArray] = useState<{ index: number; groupIndex: number; open: boolean }[][]>([])\n const profileRef = useRef<HTMLDivElement>(null)\n const [userProfileOpen, setUserProfileOpen] = useState(false)\n const headerRef = useRef<HTMLDivElement>(null)\n const 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) {\n break\n }\n }\n return currentNavItem\n }, [navStatusArray])\n\n useEffect(() => {\n // document.documentElement.style.overflow = currentNavItem?.open ? 'hidden' : 'auto'\n }, [currentNavItem])\n\n const handleNavItemClick = (e: any, groupIndex: number, index: number) => {\n e.stopPropagation()\n setCategoriesItem(groupCategories[groupIndex][index])\n setNavStatusArray(prev =>\n prev.map(groupItem =>\n groupItem.map(item =>\n item.groupIndex === groupIndex && item.index === index\n ? { ...item, open: !item.open }\n : { ...item, open: false }\n )\n )\n )\n }\n\n 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 SupportsDropdownComp = WithSupports(SupportsDropdown, {\n categoriesItem,\n currentNavItemRef: navItemRefs.current?.[currentNavItem?.groupIndex || 0]?.[currentNavItem?.index || 0],\n })\n const MulticolDropdownComp = WithMulticol(MulticolDropdown, categoriesItem)\n\n const DropdownComp = useMemo(() => {\n switch (currentBlockTypeCategories) {\n case HeaderNavigationBlockType.Sidebar:\n return <SidebarDropdownComp />\n case HeaderNavigationBlockType.Supports:\n return <SupportsDropdownComp />\n case HeaderNavigationBlockType.Multicol:\n return <MulticolDropdownComp />\n default:\n return null\n }\n }, [currentBlockTypeCategories, MulticolDropdownComp, SidebarDropdownComp, SupportsDropdownComp])\n\n const actions = useMemo(() => {\n return data?.headerBar?.actions?.filter((item: any) => item?.pcShow)\n }, [data])\n\n const profileAction = useMemo(() => {\n return actions?.find((item: any) => item?.blockType === HeaderNavigationActionBlockType.Profile)\n }, [actions])\n\n const handleProfileClick = useCallback(() => {\n setUserProfileOpen(prev => !prev)\n }, [])\n\n useEffect(() => {\n if (profileRef?.current) {\n const profileRefElement = profileRef.current as HTMLDivElement\n profileRefElement.addEventListener('click', handleProfileClick)\n\n return () => {\n profileRefElement.removeEventListener('click', handleProfileClick)\n }\n }\n }, [handleProfileClick])\n\n return (\n <Container childClassName=\"bg-white\" className=\"relative h-[96px]\">\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} />\n </div>\n <div className=\"flex justify-between\">\n {groupCategories?.map((groupItem: any, groupIndex: number) => {\n return (\n <div key={`groupCategory-${groupIndex}`} className=\"flex gap-6\">\n {groupItem?.map((item: any, index: number) => {\n return (\n <div\n key={item.id}\n ref={(el: HTMLDivElement) => {\n navItemRefs.current[groupIndex][index] = el\n }}\n className=\"hover:text-brand-0 cursor-pointer\"\n >\n <div className=\"relative\">\n <div\n className=\"flex items-center gap-1 pb-4\"\n onClick={e => handleNavItemClick(e, groupIndex, index)}\n // onMouseEnter={() => handleMouseEnter(groupIndex, index)}\n >\n <Text\n html={item.text}\n className={cn(' text-sm font-bold leading-[1.4]', {\n 'text-brand-0':\n currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index,\n })}\n />\n <DownArrow\n className={cn({\n ['text-brand-0']:\n currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index,\n })}\n />\n </div>\n <div\n className={cn(\n 'absolute bottom-0 left-0 h-[2px] w-0 bg-[#1D1D1F] transition-all duration-500',\n {\n 'w-full': currentNavItem?.groupIndex === groupIndex && currentNavItem?.index === index,\n }\n )}\n />\n </div>\n </div>\n )\n })}\n </div>\n )\n })}\n </div>\n </div>\n {currentNavItem?.open && categoriesItem && (\n <div\n className=\"absolute left-0 top-full z-[999] flex w-full flex-col bg-black/70\"\n style={{ height: `calc(100vh - ${headerRef?.current?.getBoundingClientRect()?.bottom}px)` }}\n >\n <div className=\"relative z-50\">{DropdownComp}</div>\n <div className=\"flex-1 bg-transparent\" onClick={handleNavMenuClose} />\n </div>\n )}\n {userProfileOpen && (\n <div\n className=\"absolute left-0 z-[999] flex w-full bg-black/70\"\n style={{\n height: `calc(100vh - ${profileRef?.current?.getBoundingClientRect()?.bottom}px)`,\n top: `calc(12px + ${profileRef?.current?.getBoundingClientRect()?.top}px)`,\n }}\n >\n <div\n // onMouseLeave={handleProfileMouseLeave}\n // onMouseEnter={handleProfileMouseEnter}\n className=\"absolute max-w-[272px] bg-white p-4\"\n style={{ right: `calc(100% - ${profileRef?.current?.getBoundingClientRect()?.right}px)` }}\n >\n <Text html={profileAction?.benefits_title} className=\"text-sm font-bold leading-[1.4]\" />\n <div className=\"mt-3 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=\"sm\" onClick={() => event?.join?.()}>\n <Text html={profileAction?.primaryButton || 'Join Now'} className=\"text-sm font-bold leading-[1.4]\" />\n </Button>\n <Button variant=\"primary\" size=\"sm\" onClick={() => event?.login?.()}>\n <Text html={profileAction?.secondaryButton || 'Log In'} className=\"text-sm font-bold leading-[1.4]\" />\n </Button>\n </div>\n </div>\n <div className=\"flex-1 bg-transparent\" onClick={() => setUserProfileOpen(false)} />\n </div>\n )}\n </Container>\n )\n})\n\n/**\n * \u4FA7\u8FB9\u680F\u4E0B\u62C9\n * @param categoriesItem \u5206\u7C7B\u9879\n */\nconst SidebarDropdown = ({\n sidebarCategoriesMetadata,\n seriesMetadata,\n}: {\n sidebarCategoriesMetadata: any\n seriesMetadata: any\n}) => {\n const [expandedSubcategory, setExpandedSubcategory] = useState<{ index: number; open: boolean }[]>([])\n const [activeSubSubcategoryIndex, setActiveSubSubcategoryIndex] = useState(0)\n const sidebarDropdownRef = useRef<HTMLDivElement>(null)\n\n useGSAP(() => {\n gsap.fromTo(\n sidebarDropdownRef?.current,\n {\n height: 0,\n },\n {\n height: 548,\n }\n )\n }, [])\n\n useEffect(() => {\n if (sidebarCategoriesMetadata?.subcategories?.length) {\n setExpandedSubcategory(\n sidebarCategoriesMetadata?.subcategories?.map((_: any, index: number) => ({ index, open: false }))\n )\n }\n }, [sidebarCategoriesMetadata])\n\n // \u901A\u8FC7categoriesMetadata\u7684subSubCategories\u7684label\u4E0Eseries\u7684label\u5339\u914D\n const matchSeriesMetadata = useMemo(() => {\n return (\n seriesMetadata?.find(\n (item: any) =>\n sidebarCategoriesMetadata?.subcategories?.[expandedSubcategory?.find(item => item.open)?.index || 0]\n ?.subSubCategories?.[activeSubSubcategoryIndex]?.label === item.label\n ) || {}\n )\n }, [sidebarCategoriesMetadata, expandedSubcategory, activeSubSubcategoryIndex, seriesMetadata])\n\n const handleSubcategoryOpen = (index: number) => {\n setExpandedSubcategory(prev =>\n prev.map(item => (item.index === index ? { ...item, open: !item.open } : { ...item, open: false }))\n )\n }\n\n const handleSubSubcategoryOpen = (index: number) => {\n setActiveSubSubcategoryIndex(index)\n }\n\n return (\n <Container childClassName=\"lg-desktop:gap-12 flex bg-white gap-8\">\n <div\n className=\"lg-desktop:basis-[356px] flex basis-[284px] flex-col gap-4 py-4\"\n style={{\n userSelect: 'none',\n }}\n >\n <div className=\"desktop:max-h-[416px] flex flex-col overflow-y-auto\">\n {sidebarCategoriesMetadata?.subcategories?.map((subItem: any, index: number) => (\n <div key={`subcategoryItem-${index}`}>\n <div\n className=\"flex cursor-pointer items-center justify-between\"\n onClick={() => handleSubcategoryOpen(index)}\n >\n <Text html={subItem.label} className=\"p-4 text-sm font-bold leading-[1.4]\" />\n <DownArrow\n className={cn({ ['rotate-180']: expandedSubcategory.find(item => item.index === index)?.open })}\n />\n </div>\n {expandedSubcategory.find(item => item.index === index)?.open && (\n <div className=\"flex flex-col\">\n {subItem.subSubCategories?.map((subSubItem: any, subSubindex: number) => (\n <Text\n html={subSubItem.label}\n onMouseEnter={() => handleSubSubcategoryOpen(subSubindex)}\n key={`subSubItem-${index}-${subSubindex}`}\n className={cn(\n 'cursor-pointer px-6 py-4 text-sm font-bold leading-[1.4] text-[#6D6D6F] hover:bg-[#F5F5F7]'\n )}\n />\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n <div className=\"flex\">\n <div className=\"flex flex-col gap-4\">\n <Button variant=\"primary\" size=\"lg\" className=\"text-base\">\n <a href={sidebarCategoriesMetadata?.primary?.url}>{sidebarCategoriesMetadata?.primary?.label}</a>\n </Button>\n <Button variant=\"link\" size=\"lg\" className=\"justify-start py-0 text-base\">\n <a href={sidebarCategoriesMetadata?.secondary?.url}>{sidebarCategoriesMetadata?.secondary?.label}</a>\n </Button>\n </div>\n </div>\n </div>\n {\n <div className=\"flex-1\">\n {Reflect.ownKeys(matchSeriesMetadata).length > 0 && (\n <div className=\"mb-4 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Text html={matchSeriesMetadata?.label} className=\"text-2xl font-bold leading-[1.4]\" />\n <Button variant=\"link\" size=\"lg\" className=\"justify-start p-0 text-base\">\n <Link\n href={matchSeriesMetadata?.primary?.url}\n className=\"text-base font-bold leading-[1.2] no-underline\"\n >\n {matchSeriesMetadata?.primary?.label}\n </Link>\n </Button>\n </div>\n <Link href={matchSeriesMetadata?.guide?.url} className=\"text-base leading-[1.2] text-[#6D6D6F]\">\n {matchSeriesMetadata?.guide?.label}\n </Link>\n </div>\n )}\n <div className=\"flex flex-col gap-4 overflow-y-auto\" ref={sidebarDropdownRef}>\n {matchSeriesMetadata?.series?.map((seriesItem: any, seriesIndex: number) => (\n <div key={`seriesItem-${seriesIndex}`}>\n <Text html={seriesItem.label} className=\"text-sm font-bold leading-[1.4] text-[#6D6D6F]\" />\n <div className=\"mt-2 grid grid-cols-3 gap-4\">\n {seriesItem.products?.map((product: any, index: number) => (\n <SeriesProductItem key={`seriesProductItem-${index}`} product={product} />\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n }\n </Container>\n )\n}\n\n/**\n * \u591A\u5217\u4E0B\u62C9\n * @param categoriesItem \u5206\u7C7B\u9879\n */\nconst MulticolDropdown = ({ multicolMetadata }: { multicolMetadata: any }) => {\n const multicolDropdownRef = useRef<HTMLDivElement>(null)\n\n useGSAP(() => {\n gsap.fromTo(\n multicolDropdownRef?.current,\n {\n height: 0,\n },\n {\n height: 'auto',\n }\n )\n }, [])\n\n return (\n <div ref={multicolDropdownRef}>\n <Container childClassName=\"bg-white\" className=\"h-full\">\n <div className=\"flex gap-4 py-4\">\n {multicolMetadata?.map((item: any, index: number) => (\n <div key={`multicolItem-${item?.label}-${index}`} className=\"w-1/4\">\n <MulticolItem item={item} />\n </div>\n ))}\n </div>\n </Container>\n </div>\n )\n}\n\n/**\n * supports\u4E0B\u62C9\n * @param categoriesItem \u5206\u7C7B\u9879\n * @param currentNavItemRef \u5F53\u524D\u5BFC\u822A\u9879\n */\nconst SupportsDropdown = ({\n supportsMetadata,\n currentNavItemRef,\n}: {\n supportsMetadata: any\n currentNavItemRef: HTMLDivElement\n}) => {\n const supportsDropdownRef = useRef<HTMLDivElement>(null)\n const [navItemReact, setNavItemReact] = useState<DOMRect | null>(null)\n\n useGSAP(() => {\n gsap.fromTo(\n supportsDropdownRef?.current,\n {\n height: 0,\n },\n {\n height: 'auto',\n }\n )\n }, [])\n\n const debouncedHandleResize = debounce(() => {\n if (currentNavItemRef) {\n const rect = currentNavItemRef.getBoundingClientRect()\n setNavItemReact(rect)\n }\n }, 500)\n\n useEffect(() => {\n debouncedHandleResize()\n window.addEventListener('resize', debouncedHandleResize)\n return () => {\n window.removeEventListener('resize', debouncedHandleResize)\n }\n }, [debouncedHandleResize])\n\n useEffect(() => {\n if (currentNavItemRef) {\n const rect = currentNavItemRef.getBoundingClientRect()\n setNavItemReact(rect)\n }\n }, [currentNavItemRef])\n\n return (\n <div\n className=\"absolute top-0 h-full bg-white p-4\"\n ref={supportsDropdownRef}\n style={{ right: `calc(100% - ${navItemReact?.right}px)` }}\n >\n <div>\n {supportsMetadata?.map((supportItem: any) => (\n <div key={supportItem.id} className=\"py-2\">\n <Link href={supportItem.url} className=\"text-sm font-bold leading-[1.4] no-underline\">\n {supportItem.label}\n </Link>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nconst SeriesProductItem = ({ product }: { product: any }) => {\n const { buildProps } = useNavContext()\n const productData = buildProps?.products?.find((item: Product) => item.handle === product.handle)\n const variant = productData?.variants?.find((item: ProductVariant) => item.sku === product.sku)\n\n const listingLink = useMemo(() => {\n return `/products/${productData?.handle}?variant=${atobID(variant?.id as string)}`\n }, [productData?.handle, variant?.id])\n\n return (\n <div className=\"flex shrink-0 items-center gap-4 bg-[#F5F5F7] px-4 py-3 [&_img]:hover:scale-105\">\n <div className=\"shrink-0 basis-[96px]\">\n <Picture source={`${variant?.image?.url || product?.images?.[0]?.url}}`} width={96} height={96} />\n </div>\n <div className=\"relative\">\n {product?.badge && (\n <Text\n as=\"p\"\n html={product?.badge}\n className=\"text-brand-0 mb-1 inline-block h-[24px] rounded-full border-[1.6px] border-[#00BEFA] px-[6px] text-sm font-bold !leading-[24px]\"\n />\n )}\n <Link href={listingLink} className=\"no-underline\">\n <Text\n className=\"lg-desktop:h-[44px] lg-desktop:text-base line-clamp-2 h-[40px] text-sm font-bold leading-[1.4]\"\n html={productData?.title || product?.name}\n />\n </Link>\n {product?.desc && (\n <Text\n as=\"p\"\n html={product?.desc}\n className=\"lg-desktop:text-sm mt-1 text-xs font-bold leading-[1.4] text-[#6D6D6F]\"\n />\n )}\n </div>\n </div>\n )\n}\n\n/**\n * \u591A\u5217\u4E0B\u62C9\u9879\n * @param item \u591A\u5217\u4E0B\u62C9\u9879\n */\nconst MulticolItem = ({ item }: { item: any }) => {\n return (\n <>\n {item?.columns && (\n <>\n <Text html={item.label} as=\"div\" className=\"my-2 text-sm font-bold leading-[1.4] text-[#6D6D6F]\" />\n <div className=\"mt-2 flex flex-col\">\n {item.columns?.map((columnItem: any) => (\n <div key={columnItem.label} className=\"py-2\">\n <Link href={columnItem.url} className=\"text-sm font-bold leading-[1.4] no-underline\">\n {columnItem.label}\n </Link>\n </div>\n ))}\n </div>\n </>\n )}\n {item?.imageUrl && (\n <div className=\"laptop:h-[280px] laptop:w-[404px] desktop:w-full desktop:h-auto relative h-[240px] w-[358px]\">\n <Picture source={item.imageUrl} width={404} height={280} />\n <Link href={item.url} className=\"absolute inset-0 z-10 flex flex-col justify-end p-4 no-underline\">\n <Text html={item.title} className=\"desktop:text-2xl text-xl font-bold leading-[1.2] text-white\" />\n <Text html={item.subtitle} className=\"text-sm font-bold leading-[1.4] text-white\" />\n </Link>\n </div>\n )}\n </>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEF\u5BFC\u822A\n * @param menuHeight \u83DC\u5355\u9AD8\u5EA6\n * @param data \u5BFC\u822A\u6570\u636E\n */\nconst MobileNavigation = forwardRef<HTMLDivElement, MobileNavigationProps>(({ data }, ref) => {\n const groupCategories = useMemo(() => {\n return WithGroupCategory(data?.categories)\n }, [data])\n\n const { currentMenu, setCurrentMenu, thirdNavTitle } = 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.5,\n }\n )\n }, [menuInnerHeight])\n\n useEffect(() => {\n document.documentElement.style.overflow = mobileMenuOpen ? 'hidden' : 'auto'\n }, [mobileMenuOpen])\n\n const currentBlockTypeCategories = useMemo(() => {\n return categoriesItem?.components?.[0]?.blockType\n }, [categoriesItem])\n\n const MobileSidebarMenuComp = WithSidebar(MobileSidebarMenu, categoriesItem)\n const MobileSupportMenuComp = WithSupports(MobileSupportMenu, {\n categoriesItem,\n })\n const MobileMulticolMenuComp = WithMulticol(MobileMulticolMenu, categoriesItem)\n\n const MobileCategoriesMenuComp = useMemo(() => {\n switch (currentBlockTypeCategories) {\n case HeaderNavigationBlockType.Sidebar:\n return <MobileSidebarMenuComp />\n case HeaderNavigationBlockType.Supports:\n return <MobileSupportMenuComp />\n case HeaderNavigationBlockType.Multicol:\n return <MobileMulticolMenuComp />\n default:\n return null\n }\n }, [currentBlockTypeCategories, MobileSidebarMenuComp, MobileSupportMenuComp, MobileMulticolMenuComp])\n\n const handleSecondaryMenuClose = useCallback(() => {\n setMobileMenuOpen(false)\n setMenuInnerHeight(0)\n setCurrentMenu && setCurrentMenu(HeaderNavigationMenu.Primary)\n }, [setMobileMenuOpen, setMenuInnerHeight, setCurrentMenu])\n\n const menuActions = useMemo(() => {\n return data?.headerBar?.actions?.filter(\n (item: any) => item?.mobileShow && item?.blockType !== HeaderNavigationActionBlockType.Profile // \u79FB\u52A8\u7AEF\u4E0D\u663E\u793Aprofile\u6309\u94AE\n )\n }, [data])\n\n const profileAction = useMemo(() => {\n return (\n data?.headerBar?.actions?.find(\n (item: any) => item?.mobileShow && item?.blockType === HeaderNavigationActionBlockType.Profile\n ) || {}\n )\n }, [data])\n\n const MobileCategoriesHeaderComp = useMemo(() => {\n switch (currentMenu) {\n case HeaderNavigationMenu.Primary:\n return (\n <PrimaryHeader\n actions={menuActions}\n menuOpen={mobileMenuOpen}\n onMenuOpenClose={() => {\n setMobileMenuOpen(false)\n setMenuInnerHeight(0)\n }}\n onMenuOpenClick={() => setMobileMenuOpen(true)}\n />\n )\n case HeaderNavigationMenu.Secondary:\n return (\n <SecondaryHeader\n title={categoriesItem?.text}\n onMenuOpenClose={handleSecondaryMenuClose}\n onMenuBackClick={() => setCurrentMenu?.(HeaderNavigationMenu.Primary)}\n />\n )\n case HeaderNavigationMenu.Third:\n return (\n <SecondaryHeader\n title={thirdNavTitle}\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 thirdNavTitle,\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 ? groupCategories[groupIndex][index]\n : {}\n : {}\n setCategoriesItem(categoriesItem)\n setCurrentMenu?.(HeaderNavigationMenu.Secondary)\n },\n [groupCategories, setCurrentMenu]\n )\n\n return (\n <Container childClassName=\"bg-white\" className=\"relative h-[52px]\">\n {/* \u79FB\u52A8\u7AEF\u5206\u7C7B\u83DC\u5355 */}\n {MobileCategoriesHeaderComp}\n {mobileMenuOpen && (\n <div\n ref={mobileMenuRef}\n className=\"absolute left-0 top-[calc(100%+1px)] z-[999] w-full overflow-y-auto bg-white\"\n style={{ height: menuInnerHeight }}\n >\n {currentMenu === HeaderNavigationMenu.Primary ? (\n <MobilePrimaryMenu\n categories={groupCategories}\n onPrimaryMenuClick={handlePrimaryMenuClick}\n profileAction={profileAction}\n />\n ) : (\n MobileCategoriesMenuComp\n )}\n </div>\n )}\n </Container>\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}: {\n categories: any\n onPrimaryMenuClick: (groupIndex: number, index: number) => void\n profileAction: any\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 {groupItem?.map((item: any, index: number) => (\n <MenuItem key={item.id} label={item.text} onClick={() => onPrimaryMenuClick(groupIndex, index)} />\n ))}\n <div\n className={cn('my-2 h-px w-full bg-[#E5E5E7]', { ['hidden']: groupIndex === categories.length - 1 })}\n />\n </div>\n ))}\n </div>\n <ProfileComp profileAction={profileAction} />\n </div>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEF\u4FA7\u8FB9\u680F\u4E0B\u62C9\n * @param sidebarCategoriesMetadata \u4FA7\u8FB9\u680F\u5206\u7C7B\u5143\u6570\u636E\n * @param seriesMetadata \u4FA7\u8FB9\u680F\u7CFB\u5217\u5143\u6570\u636E\n */\nconst MobileSidebarMenu = ({\n sidebarCategoriesMetadata,\n seriesMetadata,\n}: {\n sidebarCategoriesMetadata: any\n seriesMetadata: any\n}) => {\n const { currentMenu, setCurrentMenu, setThirdNavTitle, matchSeriesMetadata, setMatchSeriesMetadata } = useNavContext()\n const [expandedSubcategory, setExpandedSubcategory] = useState<{ index: number; open: boolean }[]>([])\n\n useEffect(() => {\n if (sidebarCategoriesMetadata?.subcategories?.length) {\n setExpandedSubcategory(\n sidebarCategoriesMetadata?.subcategories?.map((_: any, index: number) => ({ index, open: false }))\n )\n }\n }, [sidebarCategoriesMetadata])\n\n const MobileSidebarMenuComp = useMemo(() => {\n switch (currentMenu) {\n case HeaderNavigationMenu.Secondary:\n return (\n // \u4E8C\u7EA7\u83DC\u5355\n <div className=\"tablet:px-8 laptop:px-16 flex h-full flex-col justify-between p-4\">\n <div>\n {sidebarCategoriesMetadata?.subcategories?.map((item: any, index: number) => (\n <div key={`${item.label}-${index}`}>\n <MenuItem\n label={item?.label}\n active={expandedSubcategory.find(item => item.index === index)?.open}\n onClick={() => {\n setExpandedSubcategory(prev =>\n prev.map(item =>\n item.index === index ? { ...item, open: !item.open } : { ...item, open: false }\n )\n )\n }}\n />\n {expandedSubcategory.find(item => item.index === index)?.open &&\n item.subSubCategories?.map((subItem: any, subIndex: number) => (\n <div\n key={`${index}-${subIndex}`}\n className=\"px-2 py-4\"\n onClick={() => {\n setCurrentMenu && setCurrentMenu(HeaderNavigationMenu.Third)\n // \u901A\u8FC7categoriesMetadata\u7684subSubCategories\u7684label\u4E0Eseries\u7684label\u5339\u914D\n setMatchSeriesMetadata?.(\n seriesMetadata?.find(\n (item: any) =>\n sidebarCategoriesMetadata?.subcategories?.[index]?.subSubCategories?.[subIndex]\n ?.label === item.label\n ) || {}\n )\n setThirdNavTitle && setThirdNavTitle(subItem.label)\n }}\n >\n <Text html={subItem.label} className=\"text-sm font-bold leading-[1.4]\" />\n </div>\n ))}\n </div>\n ))}\n <Link href={matchSeriesMetadata?.guide?.url}>\n <div className=\"mt-4\">\n <Text\n html={matchSeriesMetadata?.guide?.label}\n className=\"text-sm font-bold leading-[1.2] text-[#6D6D6F]\"\n />\n </div>\n </Link>\n </div>\n <div className=\"tablet:items-start flex flex-col items-center gap-4\">\n <Button variant=\"primary\" size=\"lg\" className=\"tablet:w-auto w-full text-base\">\n <a href={sidebarCategoriesMetadata?.primary?.url}>{sidebarCategoriesMetadata?.primary?.label}</a>\n </Button>\n <Button variant=\"link\" size=\"lg\" className=\"tablet:w-auto tablet:px-0 w-full py-0 text-base\">\n <a href={sidebarCategoriesMetadata?.secondary?.url}>{sidebarCategoriesMetadata?.secondary?.label}</a>\n </Button>\n </div>\n </div>\n )\n case HeaderNavigationMenu.Third:\n return (\n // \u4E09\u7EA7\u83DC\u5355\n <div className=\"tablet:px-8 laptop:px-16 desktop:px-0 p-4\">\n {Reflect.ownKeys(matchSeriesMetadata).length > 0 && (\n <div className=\"tablet:pt-0 flex items-center gap-3 py-4\">\n <Text html={matchSeriesMetadata?.label} className=\"text-xl font-bold leading-[1.4]\" />\n <Button variant=\"link\" size=\"lg\" className=\"p-0\">\n <Link href={matchSeriesMetadata?.primary?.url} className=\"text-base leading-[1.2]\">\n {matchSeriesMetadata?.primary?.label}\n </Link>\n </Button>\n </div>\n )}\n <div className=\"flex flex-col gap-6\">\n {matchSeriesMetadata?.series?.map((seriesItem: any, pIndex: number) => (\n <div key={`seriesItem-${pIndex}`}>\n <Text html={seriesItem.label} className=\"text-sm font-bold leading-[1.4] text-[#3D3D3F]\" />\n <div className=\"laptop:grid-cols-3 laptop:gap-4 tablet:grid tablet:grid-cols-2 tablet:gap-3 mt-2 flex flex-col gap-2\">\n {seriesItem.products?.map((product: any, index: number) => (\n <SeriesProductItem key={`seriesProductItem-${pIndex}-${index}`} product={product} />\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n default:\n return null\n }\n }, [\n currentMenu,\n matchSeriesMetadata,\n sidebarCategoriesMetadata,\n setThirdNavTitle,\n setCurrentMenu,\n setMatchSeriesMetadata,\n seriesMetadata,\n expandedSubcategory,\n ])\n\n return MobileSidebarMenuComp\n}\n\n/**\n * \u79FB\u52A8\u7AEFsupport\u83DC\u5355\n * @param supportsMetadata support\u83DC\u5355\u5143\u6570\u636E\n */\nconst MobileSupportMenu = ({ supportsMetadata }: { supportsMetadata: any }) => {\n return (\n <div className=\"tablet:px-8 laptop:px-16 p-4\">\n {supportsMetadata?.map((supportItem: any) => (\n <MenuItem key={supportItem.id} href={supportItem.url} label={supportItem.label} onClick={() => {}} />\n ))}\n </div>\n )\n}\n\n/**\n * \u79FB\u52A8\u7AEFmulticol\u83DC\u5355\n * @param multicolMetadata multicol\u83DC\u5355\u5143\u6570\u636E\n */\nconst MobileMulticolMenu = ({ multicolMetadata }: { multicolMetadata: any }) => {\n return (\n <div className=\"tablet:px-8 tablet:p-4 laptop:px-16 flex flex-col gap-4 px-4\">\n {multicolMetadata?.map((item: any, index: number) => (\n <div key={`multicolItem-${item?.label}-${index}`}>\n <MulticolItem item={item} />\n </div>\n ))}\n </div>\n )\n}\n\nconst ProfileComp = ({ profileAction }: { profileAction: any }) => {\n const [profileOpen, setProfileOpen] = useState(false)\n const { profile, event } = useNavContext()\n return (\n <div className=\"tablet:px-8 laptop:px-16 bg-[#F5F5F7] px-4 py-6\">\n <div className=\"flex items-center justify-between\" onClick={() => setProfileOpen(!profileOpen)}>\n <div className=\"flex items-center gap-[14px]\">\n <div className=\"flex size-[40px] items-center justify-center rounded-full bg-white\">\n <User />\n </div>\n <Text html={profile?.nick_name || profileAction?.welcome} className=\"text-base font-bold leading-[1.4]\" />\n </div>\n <RightArrow className={cn({ 'rotate-90': profileOpen })} />\n </div>\n {profile?.email && (\n <div className=\"mt-4\">\n {profileAction?.profiles?.map((item: any) => <MenuItem key={item.id} label={item?.title} href={item?.url} />)}\n </div>\n )}\n {profileOpen && !profile?.email && (\n <div className=\"mt-4\">\n <Text html={profileAction?.benefits_title} className=\"text-sm font-bold leading-[1.4]\" />\n <div className=\"mt-3 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 <div className=\"tablet:mt-4 mt-6 flex items-center gap-3\">\n <Button className=\"tablet:flex-none flex-1\" variant=\"secondary\" size=\"sm\" 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=\"sm\" onClick={() => event?.login?.()}>\n <Text html={profileAction?.secondaryButton || 'Log In'} className=\"text-sm font-bold leading-[1.4]\" />\n </Button>\n </div>\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 ? <Close onClick={() => onMenuOpenClose()} /> : <Menu onClick={() => onMenuOpenClick()} />}\n </div>\n </div>\n )\n}\n\nconst Logo = () => {\n const { payloadData } = useNavContext()\n return (\n <div className=\"desktop:gap-2 flex items-center gap-[6px]\">\n <div dangerouslySetInnerHTML={{ __html: payloadData?.headerBar?.logo }} />\n <LogoLine />\n <Text html={payloadData?.headerBar?.slogan} className=\"tablet:text-sm text-xs font-bold leading-[1.4]\" />\n </div>\n )\n}\n\nconst Actions = forwardRef<HTMLDivElement, { actions: any }>(({ actions }, ref) => {\n const { event } = useNavContext()\n\n const handleActionClick = useCallback(\n (action: any) => {\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) => (\n <div\n key={action.id}\n ref={action.blockType === HeaderNavigationActionBlockType.Profile ? ref : null}\n onClick={() => handleActionClick(action)}\n >\n <Text html={action.icon} className=\"hover:text-brand-0 cursor-pointer\" />\n </div>\n ))}\n </div>\n )\n})\n\nconst SecondaryHeader = ({ title, onMenuOpenClose, onMenuBackClick }: MobileSecondaryNavigationData) => {\n return (\n <div className=\"flex h-full items-center gap-3\">\n <LeftArrow onClick={() => onMenuBackClick()} />\n <Text html={title} className=\"flex-1 text-center text-base font-bold leading-[1.4]\" />\n <Close onClick={() => onMenuOpenClose()} />\n </div>\n )\n}\n\nconst MenuItem = ({\n label,\n href,\n onClick,\n active,\n}: {\n label: string\n href?: string\n onClick?: () => void\n active?: boolean\n}) => {\n return (\n <div className=\"flex cursor-pointer items-center justify-between py-4\" onClick={onClick}>\n <Link href={href} asChild={!href} className=\"flex w-full items-center justify-between no-underline\">\n <Text html={label} className=\"text-sm font-bold leading-[1.4]\" />\n <RightArrow className={cn({ 'rotate-90': active })} />\n </Link>\n </div>\n )\n}\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", "Link", "withLayout", "cn", "atobID", "NavProvider", "useNavContext", "HeaderNavigationMenu", "HeaderNavigationBlockType", "HeaderNavigationActionBlockType", "useMediaQuery", "debounce", "throttle", "useGSAP", "gsap", "WithSidebar", "WithSupports", "WithMulticol", "WithGroupCategory", "Menu", "Close", "User", "RightArrow", "LeftArrow", "DownArrow", "LogoLine", "HeaderNavigation", "props", "ref", "headerNavigation", "buildProps", "event", "profile", "theme", "isMobile", "setIsMobile", "headerHidden", "setHeaderHidden", "changeHeaderBackground", "setChangeHeaderBackground", "headerRef", "mediaQuery", "upwardDistance", "lastScrollY", "showDownNav", "latest", "delta", "scrollAnimate", "scrollTop", "DesktopNavigation", "MobileNavigation", "data", "groupCategories", "categoriesItem", "setCategoriesItem", "navStatusArray", "setNavStatusArray", "profileRef", "userProfileOpen", "setUserProfileOpen", "navItemRefs", "categories", "groupItem", "groupIndex", "_", "index", "currentNavItem", "item", "handleNavItemClick", "e", "prev", "handleNavMenuClose", "currentBlockTypeCategories", "SidebarDropdownComp", "SidebarDropdown", "SupportsDropdownComp", "SupportsDropdown", "MulticolDropdownComp", "MulticolDropdown", "DropdownComp", "actions", "profileAction", "handleProfileClick", "profileRefElement", "Logo", "Actions", "el", "sidebarCategoriesMetadata", "seriesMetadata", "expandedSubcategory", "setExpandedSubcategory", "activeSubSubcategoryIndex", "setActiveSubSubcategoryIndex", "sidebarDropdownRef", "matchSeriesMetadata", "handleSubcategoryOpen", "handleSubSubcategoryOpen", "subItem", "subSubItem", "subSubindex", "seriesItem", "seriesIndex", "product", "SeriesProductItem", "multicolMetadata", "multicolDropdownRef", "MulticolItem", "supportsMetadata", "currentNavItemRef", "supportsDropdownRef", "navItemReact", "setNavItemReact", "debouncedHandleResize", "rect", "supportItem", "productData", "variant", "listingLink", "columnItem", "currentMenu", "setCurrentMenu", "thirdNavTitle", "mobileMenuOpen", "setMobileMenuOpen", "menuInnerHeight", "setMenuInnerHeight", "mobileMenuRef", "MobileSidebarMenuComp", "MobileSidebarMenu", "MobileSupportMenuComp", "MobileSupportMenu", "MobileMulticolMenuComp", "MobileMulticolMenu", "MobileCategoriesMenuComp", "handleSecondaryMenuClose", "menuActions", "MobileCategoriesHeaderComp", "PrimaryHeader", "SecondaryHeader", "handlePrimaryMenuClick", "MobilePrimaryMenu", "onPrimaryMenuClick", "MenuItem", "ProfileComp", "setThirdNavTitle", "setMatchSeriesMetadata", "subIndex", "pIndex", "profileOpen", "setProfileOpen", "menuOpen", "onMenuOpenClose", "onMenuOpenClick", "payloadData", "handleActionClick", "action", "title", "onMenuBackClick", "label", "href", "onClick", "active", "HeaderNavigation_default"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { Product } from '../../cpn-components/CpnProductCard/types.js';
|
|
2
|
+
export interface HeaderNavigationProps {
|
|
3
|
+
data: any;
|
|
4
|
+
event?: {
|
|
5
|
+
search?: () => void;
|
|
6
|
+
cart?: () => void;
|
|
7
|
+
profile?: () => void;
|
|
8
|
+
livestream?: () => void;
|
|
9
|
+
};
|
|
10
|
+
buildProps: {
|
|
11
|
+
products: Product[];
|
|
12
|
+
};
|
|
13
|
+
profile?: UserProfile;
|
|
14
|
+
theme?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface MobilePrimaryNavigationData {
|
|
17
|
+
actions: any;
|
|
18
|
+
menuOpen?: boolean;
|
|
19
|
+
onMenuOpenClick: () => void;
|
|
20
|
+
onMenuOpenClose: () => void;
|
|
21
|
+
}
|
|
22
|
+
export interface MobileSecondaryNavigationData {
|
|
23
|
+
title?: string;
|
|
24
|
+
onMenuOpenClose: () => void;
|
|
25
|
+
onMenuBackClick: () => void;
|
|
26
|
+
}
|
|
27
|
+
export declare enum HeaderNavigationMenu {
|
|
28
|
+
Primary = "primary",
|
|
29
|
+
Secondary = "secondary",
|
|
30
|
+
Third = "third"
|
|
31
|
+
}
|
|
32
|
+
export declare enum HeaderNavigationBlockType {
|
|
33
|
+
Sidebar = "ipc-navigation-sidebar",
|
|
34
|
+
Supports = "ipc-navigation-supports",
|
|
35
|
+
Multicol = "ipc-navigation-multicol"
|
|
36
|
+
}
|
|
37
|
+
export declare enum HeaderNavigationActionBlockType {
|
|
38
|
+
Search = "ipc-navigation-action-search",
|
|
39
|
+
Cart = "ipc-navigation-action-cart",
|
|
40
|
+
Profile = "ipc-navigation-action-profile",
|
|
41
|
+
Livestream = "ipc-navigation-action-livestream"
|
|
42
|
+
}
|
|
43
|
+
export interface MobileNavigationProps {
|
|
44
|
+
data: any;
|
|
45
|
+
}
|
|
46
|
+
export interface DesktopNavigationProps {
|
|
47
|
+
data: any;
|
|
48
|
+
}
|
|
49
|
+
type Country = {
|
|
50
|
+
id?: number;
|
|
51
|
+
name?: string;
|
|
52
|
+
code?: string;
|
|
53
|
+
};
|
|
54
|
+
export type UserProfile = {
|
|
55
|
+
user_id: string;
|
|
56
|
+
email: string;
|
|
57
|
+
nick_name?: string;
|
|
58
|
+
full_name?: string;
|
|
59
|
+
first_name?: string;
|
|
60
|
+
last_name?: string;
|
|
61
|
+
dob?: string;
|
|
62
|
+
gender?: string;
|
|
63
|
+
phone_number?: string;
|
|
64
|
+
phone_account?: string;
|
|
65
|
+
country?: Country;
|
|
66
|
+
is_subscribe?: boolean;
|
|
67
|
+
avatar?: string;
|
|
68
|
+
can_change_password?: boolean;
|
|
69
|
+
invitation_code?: string;
|
|
70
|
+
phone_carrier?: string;
|
|
71
|
+
dob_programmed?: boolean;
|
|
72
|
+
activated?: boolean;
|
|
73
|
+
registed_at?: number;
|
|
74
|
+
activated_at?: number;
|
|
75
|
+
token?: string;
|
|
76
|
+
};
|
|
77
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"react";var t=(r=>(r.Primary="primary",r.Secondary="secondary",r.Third="third",r))(t||{}),i=(r=>(r.Sidebar="ipc-navigation-sidebar",r.Supports="ipc-navigation-supports",r.Multicol="ipc-navigation-multicol",r))(i||{}),o=(n=>(n.Search="ipc-navigation-action-search",n.Cart="ipc-navigation-action-cart",n.Profile="ipc-navigation-action-profile",n.Livestream="ipc-navigation-action-livestream",n))(o||{});export{o as HeaderNavigationActionBlockType,i as HeaderNavigationBlockType,t as HeaderNavigationMenu};
|
|
2
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/biz-components/HeaderNavigation/types.ts"],
|
|
4
|
+
"sourcesContent": ["import React from 'react'\n\nimport type { Product } from '../../cpn-components/CpnProductCard/types.js'\n\nexport interface HeaderNavigationProps {\n data: any\n event?: {\n search?: () => void\n cart?: () => void\n profile?: () => void\n livestream?: () => void\n }\n buildProps: {\n products: Product[]\n }\n profile?: UserProfile // \u7528\u6237\u4FE1\u606F\n theme?: string\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}\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}\n\nexport interface DesktopNavigationProps {\n data: any\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": "AAAA,MAAkB,QAgCX,IAAKA,OACVA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,MAAQ,QAHEA,OAAA,IAMAC,OACVA,EAAA,QAAU,yBACVA,EAAA,SAAW,0BACXA,EAAA,SAAW,0BAHDA,OAAA,IAMAC,OACVA,EAAA,OAAS,+BACTA,EAAA,KAAO,6BACPA,EAAA,QAAU,gCACVA,EAAA,WAAa,mCAJHA,OAAA",
|
|
6
|
+
"names": ["HeaderNavigationMenu", "HeaderNavigationBlockType", "HeaderNavigationActionBlockType"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare function WithSidebar<P extends object>(WrappedComponent: React.ComponentType<any>, categoriesItem: any): React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<any>>;
|
|
3
|
+
export declare function WithSupports<P extends object>(WrappedComponent: React.ComponentType<any>, { categoriesItem, currentNavItemRef, onMouseLeave, }: {
|
|
4
|
+
categoriesItem: any;
|
|
5
|
+
currentNavItemRef?: any;
|
|
6
|
+
onMouseLeave?: () => void;
|
|
7
|
+
}): React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<any>>;
|
|
8
|
+
export declare function WithMulticol<P extends object>(WrappedComponent: React.ComponentType<any>, categoriesItem: any): React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<any>>;
|
|
9
|
+
export declare function WithGroupCategory(categories: any): unknown[];
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as d}from"react/jsx-runtime";import i,{useMemo as u}from"react";function p(a,e){const r=u(()=>{let t=null;try{t=JSON.parse(e?.components?.[0]?.sidebar?.categoriesMetadata||"{}")}catch(n){console.log("categoriesMetadata Parse error",n)}return t},[e]),s=u(()=>{let t=null;try{t=JSON.parse(e?.components?.[0]?.sidebar?.seriesMetadata||"[]")}catch(n){console.log("seriesMetadata Parse error",n)}return t},[e]),o=i.forwardRef((t,n)=>d(a,{...t,ref:n,seriesMetadata:s,sidebarCategoriesMetadata:r}));return o.displayName=a.displayName||a.name||"WithSidebarDropdown",o}function y(a,{categoriesItem:e,currentNavItemRef:r,onMouseLeave:s}){const o=u(()=>e?.components?.[0]?.supports,[e]),t=i.forwardRef((n,l)=>d(a,{...n,supportsMetadata:o,currentNavItemRef:r,onMouseLeave:s,ref:l}));return t.displayName=a.displayName||a.name||"WithSupportsDropdown",t}function M(a,e){const r=u(()=>{try{return JSON.parse(e?.components?.[0]?.multicol?.multicolMetadata||"{}")}catch(o){console.log("multicolMetadata Parse error",o)}return null},[e]),s=i.forwardRef((o,t)=>d(a,{...o,ref:t,multicolMetadata:r}));return s.displayName=a.displayName||a.name||"WithMulticolDropdown",s}function f(a){return a?Object.values(a?.reduce((e,r)=>(e[r.group]||(e[r.group]=[]),e[r.group].push(r),e),{})):[[]]}export{f as WithGroupCategory,M as WithMulticol,p as WithSidebar,y as WithSupports};
|
|
2
|
+
//# sourceMappingURL=withCategory.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/biz-components/HeaderNavigation/withCategory.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useMemo } from 'react'\n\nexport function WithSidebar<P extends object>(WrappedComponent: React.ComponentType<any>, categoriesItem: any) {\n // \u4FA7\u8FB9\u680F\u5206\u7C7B\u5143\u6570\u636E\n const sidebarCategoriesMetadata = useMemo(() => {\n let categoriesMetadata = null\n try {\n categoriesMetadata = JSON.parse(categoriesItem?.components?.[0]?.sidebar?.categoriesMetadata || '{}')\n } catch (error) {\n console.log('categoriesMetadata Parse error', error)\n }\n return categoriesMetadata\n }, [categoriesItem])\n\n // \u4FA7\u8FB9\u680F\u7CFB\u5217\u5143\u6570\u636E\n const seriesMetadata = useMemo(() => {\n let seriesMetadata = null\n try {\n seriesMetadata = JSON.parse(categoriesItem?.components?.[0]?.sidebar?.seriesMetadata || '[]')\n } catch (error) {\n console.log('seriesMetadata Parse error', error)\n }\n return seriesMetadata\n }, [categoriesItem])\n\n const withSidebarDropdown = React.forwardRef<any, P>((props, ref) => {\n return (\n <WrappedComponent\n {...(props as unknown as P)}\n ref={ref}\n seriesMetadata={seriesMetadata}\n sidebarCategoriesMetadata={sidebarCategoriesMetadata}\n />\n )\n })\n\n withSidebarDropdown.displayName = WrappedComponent.displayName || WrappedComponent.name || 'WithSidebarDropdown'\n return withSidebarDropdown\n}\n\nexport function WithSupports<P extends object>(\n WrappedComponent: React.ComponentType<any>,\n {\n categoriesItem,\n currentNavItemRef,\n onMouseLeave,\n }: { categoriesItem: any; currentNavItemRef?: any; onMouseLeave?: () => void }\n) {\n const supportsMetadata = useMemo(() => {\n return categoriesItem?.components?.[0]?.supports\n }, [categoriesItem])\n\n const supportsDropdown = React.forwardRef<any, P>((props, ref) => {\n return (\n <WrappedComponent\n {...(props as unknown as P)}\n supportsMetadata={supportsMetadata}\n currentNavItemRef={currentNavItemRef}\n onMouseLeave={onMouseLeave}\n ref={ref}\n />\n )\n })\n\n supportsDropdown.displayName = WrappedComponent.displayName || WrappedComponent.name || 'WithSupportsDropdown'\n return supportsDropdown\n}\n\nexport function WithMulticol<P extends object>(WrappedComponent: React.ComponentType<any>, categoriesItem: any) {\n const multicolMetadata = useMemo(() => {\n try {\n return JSON.parse(categoriesItem?.components?.[0]?.multicol?.multicolMetadata || '{}')\n } catch (error) {\n console.log('multicolMetadata Parse error', error)\n }\n return null\n }, [categoriesItem])\n const multicolDropdown = React.forwardRef<any, P>((props, ref) => {\n return <WrappedComponent {...(props as unknown as P)} ref={ref} multicolMetadata={multicolMetadata} />\n })\n\n multicolDropdown.displayName = WrappedComponent.displayName || WrappedComponent.name || 'WithMulticolDropdown'\n return multicolDropdown\n}\n\nexport function WithGroupCategory(categories: any) {\n if (!categories) return [[]]\n return Object.values(\n categories?.reduce((acc: any, item: any) => {\n if (!acc[item.group]) {\n acc[item.group] = []\n }\n acc[item.group].push(item)\n return acc\n }, {})\n )\n}\n"],
|
|
5
|
+
"mappings": "AA2BM,cAAAA,MAAA,oBA3BN,OAAOC,GAAS,WAAAC,MAAe,QAExB,SAASC,EAA8BC,EAA4CC,EAAqB,CAE7G,MAAMC,EAA4BJ,EAAQ,IAAM,CAC9C,IAAIK,EAAqB,KACzB,GAAI,CACFA,EAAqB,KAAK,MAAMF,GAAgB,aAAa,CAAC,GAAG,SAAS,oBAAsB,IAAI,CACtG,OAASG,EAAO,CACd,QAAQ,IAAI,iCAAkCA,CAAK,CACrD,CACA,OAAOD,CACT,EAAG,CAACF,CAAc,CAAC,EAGbI,EAAiBP,EAAQ,IAAM,CACnC,IAAIO,EAAiB,KACrB,GAAI,CACFA,EAAiB,KAAK,MAAMJ,GAAgB,aAAa,CAAC,GAAG,SAAS,gBAAkB,IAAI,CAC9F,OAASG,EAAO,CACd,QAAQ,IAAI,6BAA8BA,CAAK,CACjD,CACA,OAAOC,CACT,EAAG,CAACJ,CAAc,CAAC,EAEbK,EAAsBT,EAAM,WAAmB,CAACU,EAAOC,IAEzDZ,EAACI,EAAA,CACE,GAAIO,EACL,IAAKC,EACL,eAAgBH,EAChB,0BAA2BH,EAC7B,CAEH,EAED,OAAAI,EAAoB,YAAcN,EAAiB,aAAeA,EAAiB,MAAQ,sBACpFM,CACT,CAEO,SAASG,EACdT,EACA,CACE,eAAAC,EACA,kBAAAS,EACA,aAAAC,CACF,EACA,CACA,MAAMC,EAAmBd,EAAQ,IACxBG,GAAgB,aAAa,CAAC,GAAG,SACvC,CAACA,CAAc,CAAC,EAEbY,EAAmBhB,EAAM,WAAmB,CAACU,EAAOC,IAEtDZ,EAACI,EAAA,CACE,GAAIO,EACL,iBAAkBK,EAClB,kBAAmBF,EACnB,aAAcC,EACd,IAAKH,EACP,CAEH,EAED,OAAAK,EAAiB,YAAcb,EAAiB,aAAeA,EAAiB,MAAQ,uBACjFa,CACT,CAEO,SAASC,EAA+Bd,EAA4CC,EAAqB,CAC9G,MAAMc,EAAmBjB,EAAQ,IAAM,CACrC,GAAI,CACF,OAAO,KAAK,MAAMG,GAAgB,aAAa,CAAC,GAAG,UAAU,kBAAoB,IAAI,CACvF,OAASG,EAAO,CACd,QAAQ,IAAI,+BAAgCA,CAAK,CACnD,CACA,OAAO,IACT,EAAG,CAACH,CAAc,CAAC,EACbe,EAAmBnB,EAAM,WAAmB,CAACU,EAAOC,IACjDZ,EAACI,EAAA,CAAkB,GAAIO,EAAwB,IAAKC,EAAK,iBAAkBO,EAAkB,CACrG,EAED,OAAAC,EAAiB,YAAchB,EAAiB,aAAeA,EAAiB,MAAQ,uBACjFgB,CACT,CAEO,SAASC,EAAkBC,EAAiB,CACjD,OAAKA,EACE,OAAO,OACZA,GAAY,OAAO,CAACC,EAAUC,KACvBD,EAAIC,EAAK,KAAK,IACjBD,EAAIC,EAAK,KAAK,EAAI,CAAC,GAErBD,EAAIC,EAAK,KAAK,EAAE,KAAKA,CAAI,EAClBD,GACN,CAAC,CAAC,CACP,EATwB,CAAC,CAAC,CAAC,CAU7B",
|
|
6
|
+
"names": ["jsx", "React", "useMemo", "WithSidebar", "WrappedComponent", "categoriesItem", "sidebarCategoriesMetadata", "categoriesMetadata", "error", "seriesMetadata", "withSidebarDropdown", "props", "ref", "WithSupports", "currentNavItemRef", "onMouseLeave", "supportsMetadata", "supportsDropdown", "WithMulticol", "multicolMetadata", "multicolDropdown", "WithGroupCategory", "categories", "acc", "item"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{jsx as l,jsxs as t}from"react/jsx-runtime";import{useState as r,forwardRef as N,useRef as I}from"react";import{cn as L}from"../../helpers/utils.js";import{withLayout as T}from"../../shared/Styles.js";import{Picture as c,Link as V}from"../../components/index.js";import B from"../Title/index.js";import C from"../SwiperBox/index.js";import{Container as z}from"../../components/container.js";import{VideoModal as R}from"../VideoModal/index.js";import{convertLexicalToHTML as S}from"@payloadcms/richtext-lexical/html";import{useExposure as U}from"../../hooks/useExposure.js";import{trackUrlRef as _}from"../../shared/trackUrlRef.js";const u="video",x="media_player_multi",j=({data:e,configuration:o})=>t("div",{className:L("laptop:max-w-full w-full overflow-hidden","laptop:flex-row flex shrink-0 flex-col","lg-desktop:h-[480px] desktop:h-[384px] laptop:h-[360px] h-auto",o.shape==="round"?"rounded-2xl":""),children:[t("div",{className:"laptop:w-[49%] laptop:h-full tablet:h-[18.22vw] relative h-[35.9vw] w-full flex-none",children:[l(c,{source:e.img?.url,alt:e.img?.alt||"",className:"tablet:block hidden size-full",imgClassName:"w-full h-full object-cover tablet:hover:scale-110 transition-all duration-300"}),l(c,{source:e.mobileImg?.url||e.img?.url,alt:e.mobileImg?.alt||e.img?.alt||"",className:"tablet:hidden block size-full",imgClassName:"w-full h-full object-cover"}),l("div",{className:"laptop:bottom-6 laptop:right-6 absolute bottom-4 right-4",children:(e?.video?.url||e?.youtubeId)&&l("button",{onClick:()=>{o?.onVideoPlayBtnClick?.(o?.index||0,e)},className:"laptop:size-
|
|
1
|
+
"use client";import{jsx as l,jsxs as t}from"react/jsx-runtime";import{useState as r,forwardRef as N,useRef as I}from"react";import{cn as L}from"../../helpers/utils.js";import{withLayout as T}from"../../shared/Styles.js";import{Picture as c,Link as V}from"../../components/index.js";import B from"../Title/index.js";import C from"../SwiperBox/index.js";import{Container as z}from"../../components/container.js";import{VideoModal as R}from"../VideoModal/index.js";import{convertLexicalToHTML as S}from"@payloadcms/richtext-lexical/html";import{useExposure as U}from"../../hooks/useExposure.js";import{trackUrlRef as _}from"../../shared/trackUrlRef.js";const u="video",x="media_player_multi",j=({data:e,configuration:o})=>t("div",{className:L("laptop:max-w-full w-full overflow-hidden","laptop:flex-row flex shrink-0 flex-col","lg-desktop:h-[480px] desktop:h-[384px] laptop:h-[360px] h-auto",o.shape==="round"?"rounded-2xl":""),children:[t("div",{className:"laptop:w-[49%] laptop:h-full tablet:h-[18.22vw] relative h-[35.9vw] w-full flex-none",children:[l(c,{source:e.img?.url,alt:e.img?.alt||"",className:"tablet:block hidden size-full",imgClassName:"w-full h-full object-cover tablet:hover:scale-110 transition-all duration-300"}),l(c,{source:e.mobileImg?.url||e.img?.url,alt:e.mobileImg?.alt||e.img?.alt||"",className:"tablet:hidden block size-full",imgClassName:"w-full h-full object-cover"}),l("div",{className:"laptop:bottom-6 laptop:right-6 absolute bottom-4 right-4",children:(e?.video?.url||e?.youtubeId)&&l("button",{onClick:()=>{o?.onVideoPlayBtnClick?.(o?.index||0,e)},className:"laptop:size-14 flex size-8 items-center justify-center rounded-full bg-white bg-opacity-20 hover:bg-black/75",children:l("svg",{width:"12",height:"14",viewBox:"0 0 12 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:l("path",{d:"M12 7L0 14L0 0L12 7Z",fill:"white"})})})})]}),t("div",{className:"laptop:gap-[60px] lg-desktop:p-8 tablet:p-6 bg-container-secondary-1 flex min-h-[200px] flex-1 flex-col gap-4 overflow-hidden p-4",children:[t("div",{className:"flex flex-col",children:[l("h3",{className:"lg-desktop:text-[18px] desktop:text-[16px] text-info-primary mb-2 text-[14px] font-bold leading-[1.2] tracking-[-0.02em]",children:e.title}),e.quote&&l(V,{href:_(e?.href,`${u}_${x}`),className:"lg-desktop:text-[18px] desktop:text-[16px] text-info-primary text-sm font-bold leading-[1.2] tracking-[-0.02em]",children:e.quote})]}),l("p",{className:"lg-desktop:text-2xl lg-desktop:leading-[1.2] text-info-primary desktop:max-h-[186px] line-clamp-6 max-h-[144px] min-h-[100px] text-xl font-bold leading-[1.2] tracking-[-0.04em]",children:e.description})]})]}),q=N(({data:{items:e=[],shape:o="square",title:i,containerProps:v},className:a="",key:b,onVideoPlayBtnClick:g},h)=>{const[p,n]=r(!1),[w,y]=r(""),[k,M]=r(""),m=typeof i=="string"?i:i&&S({data:i}),d=I(null);U(d,{componentType:u,componentName:x,componentTitle:m});const f=e.length===2;return t("div",{className:a,ref:d,children:[l("div",{className:"mediaplayermulti-box",children:l(z,{...v||{},className:"overflow-hidden",children:t("div",{className:a,ref:h,children:[i&&l(B,{className:"mediaplayermulti-title",data:{title:m||""}}),l(C,{className:"!overflow-visible",id:"MediaPlayerMultiSwiper"+b,data:{list:e,configuration:{shape:o,onVideoPlayBtnClick:(P,s)=>{n(!0),s?.isYouTube?M?.(s?.youtubeId||""):y?.(s?.video?.url||""),g?.(P)}}},Slide:j,breakpoints:{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:1.2},768:{spaceBetween:16,freeMode:!1,slidesPerView:f?2:2.3},1024:{spaceBetween:16,freeMode:!1,slidesPerView:f?2:1.5},1440:{spaceBetween:16,freeMode:!1,slidesPerView:2}}})]})})}),p&&l(R,{visible:p,youTubeId:k,videoUrl:w,onCloseModal:()=>n(!1)})]})});var O=T(q);export{O as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/biz-components/MediaPlayerMulti/index.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client'\nimport { useState, forwardRef, useRef } from 'react'\nimport { cn } from '../../helpers/utils.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { Picture, Link } from '../../components/index.js'\nimport Title from '../Title/index.js'\nimport SwiperBox from '../SwiperBox/index.js'\nimport { Container } from '../../components/container.js'\nimport { VideoModal } from '../VideoModal/index.js'\nimport { convertLexicalToHTML } from '@payloadcms/richtext-lexical/html'\nimport type { MediaPlayerMultiProps, MediaPlayerItemProps } from './types.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\n\nconst componentType = 'video'\nconst componentName = 'media_player_multi'\n\nconst MediaPlayerItem = ({ data, configuration }: { data: MediaPlayerItemProps; configuration?: any }) => {\n return (\n <div\n className={cn(\n 'laptop:max-w-full w-full overflow-hidden',\n 'laptop:flex-row flex shrink-0 flex-col',\n 'lg-desktop:h-[480px] desktop:h-[384px] laptop:h-[360px] h-auto',\n configuration.shape === 'round' ? 'rounded-2xl' : ''\n )}\n >\n <div className=\"laptop:w-[49%] laptop:h-full tablet:h-[18.22vw] relative h-[35.9vw] w-full flex-none\">\n <Picture\n source={data.img?.url}\n alt={data.img?.alt || ''}\n className=\"tablet:block hidden size-full\"\n imgClassName=\"w-full h-full object-cover tablet:hover:scale-110 transition-all duration-300\"\n />\n <Picture\n source={data.mobileImg?.url || data.img?.url}\n alt={data.mobileImg?.alt || data.img?.alt || ''}\n className=\"tablet:hidden block size-full\"\n imgClassName=\"w-full h-full object-cover\"\n />\n <div className=\"laptop:bottom-6 laptop:right-6 absolute bottom-4 right-4\">\n {(data?.video?.url || data?.youtubeId) && (\n <button\n onClick={() => {\n configuration?.onVideoPlayBtnClick?.(configuration?.index || 0, data)\n }}\n className=\"laptop:size-
|
|
5
|
-
"mappings": "aA2BM,OACE,OAAAA,EADF,QAAAC,MAAA,oBA1BN,OAAS,YAAAC,EAAU,cAAAC,EAAY,UAAAC,MAAc,QAC7C,OAAS,MAAAC,MAAU,yBACnB,OAAS,cAAAC,MAAkB,yBAC3B,OAAS,WAAAC,EAAS,QAAAC,MAAY,4BAC9B,OAAOC,MAAW,oBAClB,OAAOC,MAAe,wBACtB,OAAS,aAAAC,MAAiB,gCAC1B,OAAS,cAAAC,MAAkB,yBAC3B,OAAS,wBAAAC,MAA4B,oCAErC,OAAS,eAAAC,MAAmB,6BAC5B,OAAS,eAAAC,MAAmB,8BAE5B,MAAMC,EAAgB,QAChBC,EAAgB,qBAEhBC,EAAkB,CAAC,CAAE,KAAAC,EAAM,cAAAC,CAAc,IAE3CnB,EAAC,OACC,UAAWI,EACT,2CACA,yCACA,iEACAe,EAAc,QAAU,QAAU,cAAgB,EACpD,EAEA,UAAAnB,EAAC,OAAI,UAAU,uFACb,UAAAD,EAACO,EAAA,CACC,OAAQY,EAAK,KAAK,IAClB,IAAKA,EAAK,KAAK,KAAO,GACtB,UAAU,gCACV,aAAa,gFACf,EACAnB,EAACO,EAAA,CACC,OAAQY,EAAK,WAAW,KAAOA,EAAK,KAAK,IACzC,IAAKA,EAAK,WAAW,KAAOA,EAAK,KAAK,KAAO,GAC7C,UAAU,gCACV,aAAa,6BACf,EACAnB,EAAC,OAAI,UAAU,2DACX,UAAAmB,GAAM,OAAO,KAAOA,GAAM,YAC1BnB,EAAC,UACC,QAAS,IAAM,CACboB,GAAe,sBAAsBA,GAAe,OAAS,EAAGD,CAAI,CACtE,EACA,UAAU,
|
|
4
|
+
"sourcesContent": ["'use client'\nimport { useState, forwardRef, useRef } from 'react'\nimport { cn } from '../../helpers/utils.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { Picture, Link } from '../../components/index.js'\nimport Title from '../Title/index.js'\nimport SwiperBox from '../SwiperBox/index.js'\nimport { Container } from '../../components/container.js'\nimport { VideoModal } from '../VideoModal/index.js'\nimport { convertLexicalToHTML } from '@payloadcms/richtext-lexical/html'\nimport type { MediaPlayerMultiProps, MediaPlayerItemProps } from './types.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\n\nconst componentType = 'video'\nconst componentName = 'media_player_multi'\n\nconst MediaPlayerItem = ({ data, configuration }: { data: MediaPlayerItemProps; configuration?: any }) => {\n return (\n <div\n className={cn(\n 'laptop:max-w-full w-full overflow-hidden',\n 'laptop:flex-row flex shrink-0 flex-col',\n 'lg-desktop:h-[480px] desktop:h-[384px] laptop:h-[360px] h-auto',\n configuration.shape === 'round' ? 'rounded-2xl' : ''\n )}\n >\n <div className=\"laptop:w-[49%] laptop:h-full tablet:h-[18.22vw] relative h-[35.9vw] w-full flex-none\">\n <Picture\n source={data.img?.url}\n alt={data.img?.alt || ''}\n className=\"tablet:block hidden size-full\"\n imgClassName=\"w-full h-full object-cover tablet:hover:scale-110 transition-all duration-300\"\n />\n <Picture\n source={data.mobileImg?.url || data.img?.url}\n alt={data.mobileImg?.alt || data.img?.alt || ''}\n className=\"tablet:hidden block size-full\"\n imgClassName=\"w-full h-full object-cover\"\n />\n <div className=\"laptop:bottom-6 laptop:right-6 absolute bottom-4 right-4\">\n {(data?.video?.url || data?.youtubeId) && (\n <button\n onClick={() => {\n configuration?.onVideoPlayBtnClick?.(configuration?.index || 0, data)\n }}\n className=\"laptop:size-14 flex size-8 items-center justify-center rounded-full bg-white bg-opacity-20 hover:bg-black/75\"\n >\n <svg width=\"12\" height=\"14\" viewBox=\"0 0 12 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 7L0 14L0 0L12 7Z\" fill=\"white\" />\n </svg>\n </button>\n )}\n </div>\n </div>\n\n <div className=\"laptop:gap-[60px] lg-desktop:p-8 tablet:p-6 bg-container-secondary-1 flex min-h-[200px] flex-1 flex-col gap-4 overflow-hidden p-4\">\n <div className=\"flex flex-col\">\n <h3 className=\"lg-desktop:text-[18px] desktop:text-[16px] text-info-primary mb-2 text-[14px] font-bold leading-[1.2] tracking-[-0.02em]\">\n {data.title}\n </h3>\n {data.quote && (\n <Link\n href={trackUrlRef(data?.href, `${componentType}_${componentName}`)}\n className=\"lg-desktop:text-[18px] desktop:text-[16px] text-info-primary text-sm font-bold leading-[1.2] tracking-[-0.02em]\"\n >\n {data.quote}\n </Link>\n )}\n </div>\n\n <p className=\"lg-desktop:text-2xl lg-desktop:leading-[1.2] text-info-primary desktop:max-h-[186px] line-clamp-6 max-h-[144px] min-h-[100px] text-xl font-bold leading-[1.2] tracking-[-0.04em]\">\n {data.description}\n </p>\n </div>\n </div>\n )\n}\n\nconst MediaPlayerMulti = forwardRef<HTMLDivElement, MediaPlayerMultiProps>(\n (\n { data: { items = [], shape = 'square', title, containerProps }, className = '', key, onVideoPlayBtnClick },\n ref\n ) => {\n const [visible, setVisible] = useState<boolean>(false)\n const [videoUrl, setVideoUrl] = useState<string>('')\n const [youTubeId, setYouTubeId] = useState<string>('')\n const title_html = typeof title === 'string' ? title : title && convertLexicalToHTML({ data: title })\n const wrapperRef = useRef<HTMLDivElement>(null)\n\n useExposure(wrapperRef, {\n componentType,\n componentName,\n componentTitle: title_html,\n })\n\n // \u5982\u679C\u53EA\u6709\u4E24\u4E2Aitem, \u5219\u5E73\u5747\u5206\u914D\u7A7A\u95F4\n const itemsLength = items.length === 2\n\n return (\n <div className={className} ref={wrapperRef}>\n <div className=\"mediaplayermulti-box\">\n <Container {...(containerProps || {})} className=\"overflow-hidden\">\n <div className={className} ref={ref}>\n {title && <Title className=\"mediaplayermulti-title\" data={{ title: title_html || '' }} />}\n <SwiperBox\n className=\"!overflow-visible\"\n id={'MediaPlayerMultiSwiper' + key}\n data={{\n list: items,\n configuration: {\n shape,\n onVideoPlayBtnClick: (_: number, data: MediaPlayerItemProps) => {\n setVisible(true)\n if (data?.isYouTube) {\n setYouTubeId?.(data?.youtubeId || '')\n } else {\n setVideoUrl?.(data?.video?.url || '')\n }\n onVideoPlayBtnClick?.(_)\n },\n },\n }}\n Slide={MediaPlayerItem}\n breakpoints={{\n 0: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1,\n },\n 374: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1.2,\n },\n 768: {\n spaceBetween: 16,\n freeMode: false,\n slidesPerView: itemsLength ? 2 : 2.3,\n },\n 1024: {\n spaceBetween: 16,\n freeMode: false,\n slidesPerView: itemsLength ? 2 : 1.5,\n },\n 1440: {\n spaceBetween: 16,\n freeMode: false,\n slidesPerView: 2,\n },\n }}\n />\n </div>\n </Container>\n </div>\n {visible && (\n <VideoModal\n visible={visible}\n youTubeId={youTubeId}\n videoUrl={videoUrl}\n onCloseModal={() => setVisible(false)}\n />\n )}\n </div>\n )\n }\n)\n\nexport default withLayout(MediaPlayerMulti)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["jsx", "jsxs", "useState", "forwardRef", "useRef", "cn", "withLayout", "Picture", "Link", "Title", "SwiperBox", "Container", "VideoModal", "convertLexicalToHTML", "useExposure", "trackUrlRef", "componentType", "componentName", "MediaPlayerItem", "data", "configuration", "MediaPlayerMulti", "items", "shape", "title", "containerProps", "className", "key", "onVideoPlayBtnClick", "ref", "visible", "setVisible", "videoUrl", "setVideoUrl", "youTubeId", "setYouTubeId", "title_html", "wrapperRef", "itemsLength", "_", "MediaPlayerMulti_default"]
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use client";import{Fragment as
|
|
1
|
+
"use client";import{Fragment as pe,jsx as n,jsxs as T}from"react/jsx-runtime";import z,{useState as I,useEffect as R,useRef as k,useImperativeHandle as W}from"react";import{cn as _}from"../../helpers/utils.js";import G from"../../components/picture.js";import J from"./tabSwitch.js";import L from"../../components/button.js";import K from"../Title/index.js";import Q from"../SwiperBox/index.js";import{withLayout as X}from"../../shared/Styles.js";import{formatVariantPrice as Y}from"./shelfDisplay.js";import{useExposure as Z}from"../../hooks/useExposure.js";import{gaTrack as E}from"../../shared/track.js";import{useAiuiContext as ee}from"../AiuiProvider/index.js";import te from"../../components/badge.js";import{Heading as ne}from"../../components/heading.js";import{Text as re}from"../../components/text.js";import{trackUrlRef as se}from"../../shared/trackUrlRef.js";const V="image",H="product_shelf",ie=999999999e-2;function ae(e){const t=k(null),[l,f]=I(!1);return R(()=>{if(l)return;const d=t.current;if(!d||typeof IntersectionObserver>"u")return;const o=new IntersectionObserver(([s])=>{s.isIntersecting&&(f(!0),o.disconnect())},e);return o.observe(d),()=>o.disconnect()},[l,e]),[t,l]}const oe=({data:e,configuration:t})=>{const{locale:l="us",copyWriting:f}=ee(),d=(r,a,u)=>t?.event?.primaryButton?.(r,a+1,u),o=(r,a,u)=>t?.event?.secondaryButton?.(r,a+1,u),s=e?.variants?.find(r=>r?.sku===e?.sku)||e?.variants?.[0]||{},B=!s?.availableForSale&&s?.price?.amount===ie,h=t?.isShowTag,y=t?.isShowOriginalPrice,v=s?.coupons?.[0],{price:b,basePrice:D}=Y({locale:l,amount:y&&v?v.variant_price4wscode:s.price,baseAmount:y&&v?s.price:0,currencyCode:e?.price?.currencyCode||"USD"}),w=()=>{const r=e?.sku,a=e?.variants;return a?.find(x=>x?.sku===r)?.image?.url||a?.[0]?.image?.url||""},p=e?.custom_name||e?.title,g=e?.custom_description||e?.description;return n("div",{className:_("bg-container-secondary-1 tablet:hover:bg-info-white box-border w-full cursor-pointer overflow-hidden duration-300",t?.itemShape==="round"?"rounded-2xl":"rounded-none","lg-desktop:aspect-w-[404] lg-desktop:aspect-h-[480] desktop:aspect-w-[316] desktop:aspect-h-[384]","laptop:aspect-w-[288] laptop:aspect-h-[360] aspect-w-[296] aspect-h-[360] relative","md-tablet:h-[360px]"),children:T("div",{className:"desktop:p-6 absolute inset-0 box-border flex flex-col justify-between overflow-hidden p-4",children:[n("div",{className:_("lg-desktop:mb-3 lg-desktop:h-[195px] relative mb-2 inline-block h-[140px] w-full flex-1 overflow-hidden"),children:n("a",{"aria-label":p,target:t?.target,href:se(`${l==="us"||!l?"":`/${l}`}/products/${e?.handle}`,`${V}_${H}`),onClick:()=>{E({event:"ga4Event",event_name:"select_item",event_parameters:{page_group:"Home Page",item_list_name:"Home_Page_Bundle",items:[{item_id:e?.sku||s?.sku,item_name:e?.name,item_variant:s?.name,price:s?.price,index:t?.index+1}]}})},children:n(G,{source:w(),alt:"",className:"flex h-full justify-center object-cover [&_img]:w-auto"})})}),h?n("div",{className:"mb-1 box-border flex h-8 flex-wrap gap-1 overflow-hidden",children:e?.tags?.filter?.(r=>r?.startsWith?.("CLtag"))?.map?.(r=>r?.replace?.("CLtag:",""))?.slice?.(0,2)?.map?.((r,a)=>n(te,{children:r},a))}):null,p?n(ne,{as:"h3",title:p||"",size:2,className:"shelf-display-product-title lg-desktop:h-[58px] mb-1 line-clamp-2 flex h-[48px] items-end justify-start",html:p||""}):null,g?n(re,{size:2,className:"shelf-display-product-description lg-desktop:text-[18px] lg-desktop:h-[26px] desktop:text-[16px] desktop:h-[24px] line-clamp-1 h-[20px] text-[14px]",html:g||""}):null,n("div",{className:"mb-2 mt-[20px] flex items-center",children:B?n("div",{className:"tablet:text-2xl text-info-primary text-xl font-bold",children:f?.soldOutText}):T(pe,{children:[n("div",{className:"final-price tablet:text-2xl text-info-primary text-xl font-bold",children:s?.availableForSale&&b||""}),n("div",{className:"origin-price tablet:text-xl text-info-secondary ml-1 text-lg font-bold line-through",children:s?.availableForSale&&D||""})]})}),T("div",{className:_("shelf-flex-button-group","lg-desktop:gap-3 flex items-center gap-2",t.direction==="vertical"?"flex-col":""),children:[t?.secondaryButton?n(L,{variant:"secondary",onClick:()=>o(e,t?.index,t),className:`
|
|
2
2
|
${t.direction==="vertical"?"w-full":""}
|
|
3
|
-
`,children:t?.secondaryButton||""}):null,t?.primaryButton?n(
|
|
3
|
+
`,children:t?.secondaryButton||""}):null,t?.primaryButton?n(L,{variant:"primary",onClick:()=>d(e,t?.index,t),className:`
|
|
4
4
|
${t.direction==="vertical"?"w-full":""}
|
|
5
|
-
`,children:t?.primaryButton||""}):null]})]})},e?.id||e?.handle)},
|
|
5
|
+
`,children:t?.primaryButton||""}):null]})]})},e?.id||e?.handle)},le=z.forwardRef(({data:e,buildData:t,className:l="",key:f,event:d,recommendedData:o,target:s="_self"},B)=>{const[h,y]=I(""),[v,b]=I([]),[D,w]=ae({threshold:0}),p=k(!1),g=k(!1),r=k(null);W(B,()=>r.current),Z(r,{componentType:V,componentName:H,componentTitle:e?.title,navigation:h});const{productsTab:a=[],productsCard:u=[],title:x,isShowTab:P=!0,tabShape:$="square",isShowTag:A=!1,isShowOriginalPrice:F=!0,isShowRecommendedCard:j=!1,...q}=e,M=()=>{E({event:"ga4Event",event_name:"view_item_list",event_parameters:{page_group:"Home Page",item_list_name:"Home_Page_Bundle",items:o?.map((i,C)=>{const c=i?.variants?.find(m=>m?.sku===i?.sku)||i?.variants?.[0];return{item_id:i?.sku||c?.sku,item_name:i?.name,item_variant:c?.name,price:c?.price,index:C+1}})}})},N=(i,C)=>{if(C){const S=o?.map?.(c=>({...c,isShowRecommended:!0}));b(S?.length?S||[]:[])}else if(Array.isArray(i)){const c=i?.map?.(m=>{const O=t?.products?.find(U=>U?.handle===m?.handle);if(O)return{sku:m.sku,isShowRecommended:!1,custom_name:m.custom_name,custom_description:m.custom_description,...O}})?.filter(m=>m);b(c?.length?c||[]:[])}else b([])};return R(()=>{w&&o?.length&&!g.current&&(g.current=!0,M())},[w,o]),R(()=>{if(!p.current){if(!p.current&&o?.length&&(p.current=!0),P){y(a?.[0]?.tab||""),N(a?.[0]?.data||[],a?.[0]?.isShowRecommendedTab);return}N(u,j)}},[o]),T("div",{ref:r,className:_("shelf-display-wrap w-full",l,{"aiui-dark":e?.theme==="dark"}),children:[x&&n(K,{data:{title:x}}),P&&n("div",{className:"md-tablet:w-full md-tablet:overflow-hidden",children:n(J,{value:h,tabs:a,tabShape:$,onTabClick:i=>{if(y(i?.tab),N(i?.data||[],i?.isShowRecommendedTab),!i?.isShowRecommendedTab){E({event:"ga4Event",event_name:"component_click",event_parameters:{page_group:"Home Page",component_type:V,component_name:H,component_title:e?.title,component_position:1,navigation:i?.tab}});return}M()}})}),n("div",{ref:D,className:"tablet:min-h-[393px] laptop:min-h-[425px] desktop:min-h-[405px] lg-desktop:min-h-[409px]",children:n(Q,{className:`${P?"mt-6":""} !overflow-visible`,id:`ShelfDisplay${f}${h}`,data:{list:v,configuration:{...q,event:d,isShowTag:A,isShowOriginalPrice:F,target:s}},Slide:oe,breakpoints:{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:1.2},768:{spaceBetween:16,freeMode:!1,slidesPerView:2.3},1024:{spaceBetween:16,freeMode:!1,slidesPerView:3},1440:{spaceBetween:16,freeMode:!1,slidesPerView:4}}})})]})});var Be=X(le);export{Be as default};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/biz-components/ShelfDisplay/index.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client'\nimport React, { useState, useEffect, useRef, useImperativeHandle } from 'react'\nimport { cn } from '../../helpers/utils.js'\nimport Picture from '../../components/picture.js'\nimport TabSwitch from './tabSwitch.js'\nimport Button from '../../components/button.js'\nimport Title from '../Title/index.js'\nimport SwiperBox from '../SwiperBox/index.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { formatVariantPrice } from './shelfDisplay.js'\nimport { useMediaQuery } from 'react-responsive'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { gaTrack } from '../../shared/track.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport Badge from '../../components/badge.js'\nimport { Heading } from '../../components/heading.js'\nimport { Text } from '../../components/text.js'\nimport type { ContainerProps } from '../../types/props.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\n\nconst componentType = 'image'\nconst componentName = 'product_shelf'\n\nconst SOLD_OUT_PRICE = 9999999.99\n\nexport interface ShelfDisplayItem {\n id?: string\n /** \u4EA7\u54C1\u56FE\u7247*/\n img?: {\n url: string\n }\n handle?: string\n sku?: string\n /** \u6298\u6263\u540E\u4EF7\u683C*/\n price?: string\n title?: string\n /** \u6298\u6263\u524D\u4EF7\u683C*/\n basePrice?: string\n subTitle?: string\n /** \u6807\u7B7E*/\n tagItems?: string[]\n tab?: string\n data?: ShelfDisplayItem[]\n custom_name?: string\n custom_description?: string\n}\n\ntype EventType = {\n primaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n secondaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n}\n\ntype ShelfDisplayType = {\n title?: string\n isShowTab?: boolean\n isShowTag?: boolean\n isShowRecommendedCard?: boolean\n isShowOriginalPrice?: boolean\n direction?: 'horizontal' | 'vertical'\n align?: 'left' | 'center' | 'right'\n productsTab?: any[]\n productsCard?: any[]\n /** \u5361\u7247\u5F62\u72B6 */\n itemShape?: 'round' | 'square'\n /** \u6309\u94AE\u5F62\u72B6 */\n shape?: 'round' | 'square'\n /** \u6807\u7B7E\u9875\u5F62\u72B6*/\n tabShape?: 'rounded' | 'square'\n /** \u4E3B\u6309\u94AE\u914D\u7F6E */\n primaryButton?: string\n primaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n /** \u526F\u6309\u94AE\u914D\u7F6E */\n secondaryButton?: string\n secondaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n theme?: 'light' | 'dark'\n containerProps?: ContainerProps\n}\n\nexport interface ShelfDisplayProps {\n data: ShelfDisplayType\n buildData?: {\n categories: any[]\n products: any[]\n }\n recommendedData?: any[]\n /** \u6309\u94AE\u4E8B\u4EF6*/\n event?: EventType\n className?: string\n key?: string\n target?: '_self' | '_blank'\n}\n\nfunction useOnceInView<T extends Element>(options: any) {\n const ref = useRef<T>(null)\n const [inView, setInView] = useState(false)\n\n useEffect(() => {\n if (inView) return // \u5DF2\u8FDB\u5165\u8FC7\uFF0C\u5219\u4E0D\u518D\u89C2\u5BDF\n const el = ref.current\n if (!el || typeof IntersectionObserver === 'undefined') return\n\n const observer = new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting) {\n setInView(true)\n observer.disconnect() // \u505C\u6B62\u89C2\u5BDF\n }\n }, options)\n\n observer.observe(el)\n return () => observer.disconnect()\n }, [inView, options])\n\n return [ref, inView]\n}\n\nconst ShelfDisplayItem = ({ data, configuration }: { data: any; configuration?: any }) => {\n const { locale = 'us', copyWriting } = useAiuiContext()\n const isMobile = useMediaQuery({ query: '(max-width: 768px)' })\n\n const onPrimaryButton = (params: ShelfDisplayItem, index: number, data: ShelfDisplayType) =>\n configuration?.event?.primaryButton?.(params, index + 1, data)\n\n const onSecondaryButton = (params: ShelfDisplayItem, index: number, data: ShelfDisplayType) =>\n configuration?.event?.secondaryButton?.(params, index + 1, data)\n\n const variant = data?.variants?.find((item: any) => item?.sku === data?.sku) || data?.variants?.[0] || {}\n\n const isSoldOut = !variant?.availableForSale && variant?.price?.amount === SOLD_OUT_PRICE\n const isShowTag = configuration?.isShowTag\n const isShowOriginalPrice = configuration?.isShowOriginalPrice\n\n // active \u7684 \u901A\u7528\u6298\u6263\n const coupon = variant?.coupons?.[0]\n\n const { price, basePrice } = formatVariantPrice({\n locale: locale,\n amount: isShowOriginalPrice && coupon ? coupon.variant_price4wscode : variant.price,\n baseAmount: isShowOriginalPrice && coupon ? variant.price : 0,\n currencyCode: data?.price?.currencyCode || 'USD',\n })\n\n const handleUrl = () => {\n const sku = data?.sku\n const skuArray = data?.variants\n const findSku = skuArray?.find((item: any) => item?.sku === sku)\n return findSku?.image?.url || skuArray?.[0]?.image?.url || ''\n }\n\n const displayTitle = data?.custom_name || data?.title\n const displayDescription = data?.custom_description || data?.description\n\n return (\n <div\n key={data?.id || data?.handle}\n className={cn(\n 'bg-container-secondary-1 tablet:hover:bg-info-white box-border w-full cursor-pointer overflow-hidden duration-300',\n configuration?.itemShape === 'round' ? 'rounded-2xl' : 'rounded-none',\n 'lg-desktop:aspect-w-[404] lg-desktop:aspect-h-[480] desktop:aspect-w-[316] desktop:aspect-h-[384]',\n 'laptop:aspect-w-[288] laptop:aspect-h-[360] aspect-w-[296] aspect-h-[360] relative',\n {\n 'h-[360px]': isMobile,\n }\n )}\n >\n <div className=\"absolute inset-0 box-border flex flex-col justify-between overflow-hidden p-4\">\n <div\n className={cn(\n 'lg-desktop:mb-3 lg-desktop:h-[195px] relative mb-2 inline-block h-[140px] w-full flex-1 overflow-hidden'\n )}\n >\n <a\n aria-label={displayTitle}\n target={configuration?.target}\n href={trackUrlRef(\n `${locale === 'us' || !locale ? '' : `/${locale}`}/products/${data?.handle}`,\n `${componentType}_${componentName}`\n )}\n onClick={() => {\n gaTrack({\n event: 'ga4Event',\n event_name: 'select_item',\n event_parameters: {\n page_group: 'Home Page',\n item_list_name: 'Home_Page_Bundle',\n items: [\n {\n item_id: data?.sku || variant?.sku,\n item_name: data?.name,\n item_variant: variant?.name,\n price: variant?.price,\n index: configuration?.index + 1,\n },\n ],\n },\n })\n }}\n >\n <Picture source={handleUrl()} alt=\"\" className=\"flex h-full justify-center object-cover [&_img]:w-auto\" />\n </a>\n </div>\n {isShowTag ? (\n <div className=\"mb-1 box-border flex h-8 flex-wrap gap-1 overflow-hidden\">\n {data?.tags\n ?.filter?.((item: any) => item?.startsWith?.('CLtag'))\n ?.map?.((item: any) => item?.replace?.('CLtag:', ''))\n ?.slice?.(0, 2)\n ?.map?.((item: any, index: number) => <Badge key={index}>{item}</Badge>)}\n </div>\n ) : null}\n {displayTitle ? (\n <Heading\n as=\"h3\"\n title={displayTitle || ''}\n size={2}\n className=\"shelf-display-product-title lg-desktop:h-[58px] mb-1 line-clamp-2 flex h-[48px] items-end justify-start\"\n html={displayTitle || ''}\n />\n ) : null}\n {displayDescription ? (\n <Text\n size={2}\n className=\"shelf-display-product-description lg-desktop:text-[18px] lg-desktop:h-[26px] desktop:text-[16px] desktop:h-[24px] line-clamp-1 h-[20px] text-[14px]\"\n html={displayDescription || ''}\n />\n ) : null}\n <div className=\"mb-2 mt-[20px] flex items-center\">\n {isSoldOut ? (\n <div className=\"tablet:text-2xl text-info-primary text-xl font-bold\">{copyWriting?.soldOutText}</div>\n ) : (\n <>\n <div className=\"final-price tablet:text-2xl text-info-primary text-xl font-bold\">\n {variant?.availableForSale ? price || '' : ''}\n </div>\n <div className=\"origin-price tablet:text-xl text-info-secondary ml-1 text-lg font-bold line-through\">\n {variant?.availableForSale ? basePrice || '' : ''}\n </div>\n </>\n )}\n </div>\n {/* \u6309\u94AE\u7EC4 */}\n <div\n className={cn(\n 'lg-desktop:gap-3 flex items-center gap-2',\n configuration.direction === 'vertical' ? 'flex-col' : ''\n )}\n >\n {configuration?.secondaryButton ? (\n <Button\n variant=\"secondary\"\n onClick={() => onSecondaryButton(data, configuration?.index, configuration)}\n className={`\n ${configuration.direction === 'vertical' ? 'w-full' : ''}\n `}\n >\n {configuration?.secondaryButton || ''}\n </Button>\n ) : null}\n {configuration?.primaryButton ? (\n <Button\n variant=\"primary\"\n onClick={() => onPrimaryButton(data, configuration?.index, configuration)}\n className={`\n ${configuration.direction === 'vertical' ? 'w-full' : ''}\n `}\n >\n {configuration?.primaryButton || ''}\n </Button>\n ) : null}\n </div>\n </div>\n </div>\n )\n}\n\nconst ShelfDisplay = React.forwardRef<HTMLDivElement, ShelfDisplayProps>(\n ({ data, buildData, className = '', key, event, recommendedData, target = '_self' }, ref) => {\n const [tabId, setTabId] = useState<string>('')\n const [currentItems, setCurrentItems] = useState<ShelfDisplayItem[]>([])\n\n const isMobile = useMediaQuery({ query: '(max-width: 768px)' })\n\n const [viewRef, inView] = useOnceInView<HTMLDivElement>({ threshold: 0 })\n const isRecommend = useRef<boolean>(false)\n const isView = useRef<boolean>(false)\n const innerRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n useExposure(innerRef, {\n componentType: componentType,\n componentName: componentName,\n componentTitle: data?.title,\n navigation: tabId,\n })\n\n const {\n productsTab = [],\n productsCard = [],\n title,\n isShowTab = true,\n tabShape = 'square',\n isShowTag = false,\n isShowOriginalPrice = true,\n isShowRecommendedCard = false,\n ...other\n } = data\n\n const gackViewEvent = () => {\n gaTrack({\n event: 'ga4Event',\n event_name: 'view_item_list',\n event_parameters: {\n page_group: 'Home Page',\n item_list_name: 'Home_Page_Bundle',\n items: recommendedData?.map((item, index) => {\n const findData = item?.variants?.find((v: any) => v?.sku === item?.sku)\n const variant = findData || item?.variants?.[0]\n return {\n item_id: item?.sku || variant?.sku,\n item_name: item?.name,\n item_variant: variant?.name,\n price: variant?.price,\n index: index + 1,\n }\n }),\n },\n })\n }\n\n const handleCurrentTab = (currentData: ShelfDisplayItem[], flag: boolean) => {\n if (flag) {\n const newCurrentData = recommendedData?.map(item => {\n return {\n ...item,\n isShowRecommended: true,\n }\n })\n setCurrentItems(newCurrentData || [])\n } else {\n const newCurrentData = currentData\n ?.map(item => {\n const findData = buildData?.products?.find(params => params?.handle === item?.handle)\n if (findData) {\n return {\n sku: item.sku,\n isShowRecommended: false,\n custom_name: item.custom_name,\n custom_description: item.custom_description,\n ...findData,\n }\n }\n })\n ?.filter(item => item)\n setCurrentItems(newCurrentData || [])\n }\n }\n\n useEffect(() => {\n if (inView && recommendedData?.length && !isView.current) {\n isView.current = true\n gackViewEvent()\n }\n }, [inView, recommendedData])\n\n // \u7B97\u6CD5\u6570\u636E\u4F1A\u7A0D\u5FAE\u5EF6\u8FDF\uFF0C\u6240\u4EE5\u9700\u76D1\u542CrecommendedData\uFF0C\u4E3A\u4E86\u9632\u6B62\u5728\u6709\u7B97\u6CD5\u6570\u636E\u4E14\u5BF9\u9ED8\u8BA4\u6E32\u67D3\u7B2C\u4E00\u4E2A\u540E\u53CD\u590D\u89E6\u53D1\uFF0C\u7528isRecommend\u5173\u95ED\n useEffect(() => {\n if (isRecommend.current) return\n if (!isRecommend.current && recommendedData?.length) {\n isRecommend.current = true\n }\n if (isShowTab) {\n setTabId(productsTab?.[0]?.tab || '')\n handleCurrentTab(productsTab?.[0]?.data || [], productsTab?.[0]?.isShowRecommendedTab)\n return\n }\n handleCurrentTab(productsCard, isShowRecommendedCard)\n }, [recommendedData])\n\n return (\n <div\n ref={innerRef}\n className={cn('shelf-display-wrap w-full', className, { 'aiui-dark': data?.theme === 'dark' })}\n >\n {title && <Title data={{ title: title }} />}\n {isShowTab && (\n <div className={`${isMobile ? 'w-full overflow-hidden' : ''}`}>\n <TabSwitch\n value={tabId}\n tabs={productsTab}\n tabShape={tabShape}\n onTabClick={v => {\n setTabId(v?.tab)\n handleCurrentTab(v?.data || [], v?.isShowRecommendedTab)\n if (!v?.isShowRecommendedTab) {\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_click',\n event_parameters: {\n page_group: 'Home Page',\n component_type: componentType,\n component_name: componentName,\n component_title: data?.title,\n component_position: 1,\n navigation: v?.tab,\n },\n })\n return\n }\n gackViewEvent()\n }}\n />\n </div>\n )}\n <div\n ref={viewRef as any}\n className=\"tablet:min-h-[393px] laptop:min-h-[425px] desktop:min-h-[405px] lg-desktop:min-h-[409px]\"\n >\n <SwiperBox\n className={`${isShowTab ? 'mt-6' : ''} !overflow-visible`}\n id={`ShelfDisplay${key}${tabId}`}\n data={{\n list: currentItems,\n configuration: { ...other, event: event, isShowTag, isShowOriginalPrice, target: target },\n }}\n Slide={ShelfDisplayItem}\n breakpoints={{\n 0: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1,\n },\n 374: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1.2,\n },\n 768: {\n spaceBetween: 16,\n freeMode: false,\n slidesPerView: 2.3,\n },\n 1024: {\n spaceBetween: 16,\n freeMode: false,\n slidesPerView: 3,\n },\n 1440: {\n spaceBetween: 16,\n freeMode: false,\n slidesPerView: 4,\n },\n }}\n />\n </div>\n </div>\n )\n }\n)\n\nexport default withLayout(ShelfDisplay)\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["Fragment", "jsx", "jsxs", "React", "useState", "useEffect", "useRef", "useImperativeHandle", "cn", "Picture", "TabSwitch", "Button", "Title", "SwiperBox", "withLayout", "formatVariantPrice", "
|
|
4
|
+
"sourcesContent": ["'use client'\nimport React, { useState, useEffect, useRef, useImperativeHandle } from 'react'\nimport { cn } from '../../helpers/utils.js'\nimport Picture from '../../components/picture.js'\nimport TabSwitch from './tabSwitch.js'\nimport Button from '../../components/button.js'\nimport Title from '../Title/index.js'\nimport SwiperBox from '../SwiperBox/index.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { formatVariantPrice } from './shelfDisplay.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { gaTrack } from '../../shared/track.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport Badge from '../../components/badge.js'\nimport { Heading } from '../../components/heading.js'\nimport { Text } from '../../components/text.js'\nimport type { ContainerProps } from '../../types/props.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\n\nconst componentType = 'image'\nconst componentName = 'product_shelf'\n\nconst SOLD_OUT_PRICE = 9999999.99\n\nexport interface ShelfDisplayItem {\n id?: string\n /** \u4EA7\u54C1\u56FE\u7247*/\n img?: {\n url: string\n }\n handle?: string\n sku?: string\n /** \u6298\u6263\u540E\u4EF7\u683C*/\n price?: string\n title?: string\n /** \u6298\u6263\u524D\u4EF7\u683C*/\n basePrice?: string\n subTitle?: string\n /** \u6807\u7B7E*/\n tagItems?: string[]\n tab?: string\n data?: ShelfDisplayItem[]\n custom_name?: string\n custom_description?: string\n}\n\ntype EventType = {\n primaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n secondaryButton?: (v: any, index: number, data: ShelfDisplayType) => void\n}\n\ntype ShelfDisplayType = {\n title?: string\n isShowTab?: boolean\n isShowTag?: boolean\n isShowRecommendedCard?: boolean\n isShowOriginalPrice?: boolean\n direction?: 'horizontal' | 'vertical'\n align?: 'left' | 'center' | 'right'\n productsTab?: any[]\n productsCard?: any[]\n /** \u5361\u7247\u5F62\u72B6 */\n itemShape?: 'round' | 'square'\n /** \u6309\u94AE\u5F62\u72B6 */\n shape?: 'round' | 'square'\n /** \u6807\u7B7E\u9875\u5F62\u72B6*/\n tabShape?: 'rounded' | 'square'\n /** \u4E3B\u6309\u94AE\u914D\u7F6E */\n primaryButton?: string\n primaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n /** \u526F\u6309\u94AE\u914D\u7F6E */\n secondaryButton?: string\n secondaryFun?: 'AddCart' | 'BuyNow' | 'LearnMore'\n theme?: 'light' | 'dark'\n containerProps?: ContainerProps\n}\n\nexport interface ShelfDisplayProps {\n data: ShelfDisplayType\n buildData?: {\n categories: any[]\n products: any[]\n }\n recommendedData?: any[]\n /** \u6309\u94AE\u4E8B\u4EF6*/\n event?: EventType\n className?: string\n key?: string\n target?: '_self' | '_blank'\n}\n\nfunction useOnceInView<T extends Element>(options: any) {\n const ref = useRef<T>(null)\n const [inView, setInView] = useState(false)\n\n useEffect(() => {\n if (inView) return // \u5DF2\u8FDB\u5165\u8FC7\uFF0C\u5219\u4E0D\u518D\u89C2\u5BDF\n const el = ref.current\n if (!el || typeof IntersectionObserver === 'undefined') return\n\n const observer = new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting) {\n setInView(true)\n observer.disconnect() // \u505C\u6B62\u89C2\u5BDF\n }\n }, options)\n\n observer.observe(el)\n return () => observer.disconnect()\n }, [inView, options])\n\n return [ref, inView]\n}\n\nconst ShelfDisplayItem = ({ data, configuration }: { data: any; configuration?: any }) => {\n const { locale = 'us', copyWriting } = useAiuiContext()\n\n const onPrimaryButton = (params: ShelfDisplayItem, index: number, data: ShelfDisplayType) =>\n configuration?.event?.primaryButton?.(params, index + 1, data)\n\n const onSecondaryButton = (params: ShelfDisplayItem, index: number, data: ShelfDisplayType) =>\n configuration?.event?.secondaryButton?.(params, index + 1, data)\n\n const variant = data?.variants?.find((item: any) => item?.sku === data?.sku) || data?.variants?.[0] || {}\n\n const isSoldOut = !variant?.availableForSale && variant?.price?.amount === SOLD_OUT_PRICE\n const isShowTag = configuration?.isShowTag\n const isShowOriginalPrice = configuration?.isShowOriginalPrice\n\n // active \u7684 \u901A\u7528\u6298\u6263\n const coupon = variant?.coupons?.[0]\n\n const { price, basePrice } = formatVariantPrice({\n locale: locale,\n amount: isShowOriginalPrice && coupon ? coupon.variant_price4wscode : variant.price,\n baseAmount: isShowOriginalPrice && coupon ? variant.price : 0,\n currencyCode: data?.price?.currencyCode || 'USD',\n })\n\n const handleUrl = () => {\n const sku = data?.sku\n const skuArray = data?.variants\n const findSku = skuArray?.find((item: any) => item?.sku === sku)\n return findSku?.image?.url || skuArray?.[0]?.image?.url || ''\n }\n\n const displayTitle = data?.custom_name || data?.title\n const displayDescription = data?.custom_description || data?.description\n\n return (\n <div\n key={data?.id || data?.handle}\n className={cn(\n 'bg-container-secondary-1 tablet:hover:bg-info-white box-border w-full cursor-pointer overflow-hidden duration-300',\n configuration?.itemShape === 'round' ? 'rounded-2xl' : 'rounded-none',\n 'lg-desktop:aspect-w-[404] lg-desktop:aspect-h-[480] desktop:aspect-w-[316] desktop:aspect-h-[384]',\n 'laptop:aspect-w-[288] laptop:aspect-h-[360] aspect-w-[296] aspect-h-[360] relative',\n 'md-tablet:h-[360px]'\n )}\n >\n <div className=\"desktop:p-6 absolute inset-0 box-border flex flex-col justify-between overflow-hidden p-4\">\n <div\n className={cn(\n 'lg-desktop:mb-3 lg-desktop:h-[195px] relative mb-2 inline-block h-[140px] w-full flex-1 overflow-hidden'\n )}\n >\n <a\n aria-label={displayTitle}\n target={configuration?.target}\n href={trackUrlRef(\n `${locale === 'us' || !locale ? '' : `/${locale}`}/products/${data?.handle}`,\n `${componentType}_${componentName}`\n )}\n onClick={() => {\n gaTrack({\n event: 'ga4Event',\n event_name: 'select_item',\n event_parameters: {\n page_group: 'Home Page',\n item_list_name: 'Home_Page_Bundle',\n items: [\n {\n item_id: data?.sku || variant?.sku,\n item_name: data?.name,\n item_variant: variant?.name,\n price: variant?.price,\n index: configuration?.index + 1,\n },\n ],\n },\n })\n }}\n >\n <Picture source={handleUrl()} alt=\"\" className=\"flex h-full justify-center object-cover [&_img]:w-auto\" />\n </a>\n </div>\n {isShowTag ? (\n <div className=\"mb-1 box-border flex h-8 flex-wrap gap-1 overflow-hidden\">\n {data?.tags\n ?.filter?.((item: any) => item?.startsWith?.('CLtag'))\n ?.map?.((item: any) => item?.replace?.('CLtag:', ''))\n ?.slice?.(0, 2)\n ?.map?.((item: any, index: number) => <Badge key={index}>{item}</Badge>)}\n </div>\n ) : null}\n {displayTitle ? (\n <Heading\n as=\"h3\"\n title={displayTitle || ''}\n size={2}\n className=\"shelf-display-product-title lg-desktop:h-[58px] mb-1 line-clamp-2 flex h-[48px] items-end justify-start\"\n html={displayTitle || ''}\n />\n ) : null}\n {displayDescription ? (\n <Text\n size={2}\n className=\"shelf-display-product-description lg-desktop:text-[18px] lg-desktop:h-[26px] desktop:text-[16px] desktop:h-[24px] line-clamp-1 h-[20px] text-[14px]\"\n html={displayDescription || ''}\n />\n ) : null}\n <div className=\"mb-2 mt-[20px] flex items-center\">\n {isSoldOut ? (\n <div className=\"tablet:text-2xl text-info-primary text-xl font-bold\">{copyWriting?.soldOutText}</div>\n ) : (\n <>\n <div className=\"final-price tablet:text-2xl text-info-primary text-xl font-bold\">\n {variant?.availableForSale ? price || '' : ''}\n </div>\n <div className=\"origin-price tablet:text-xl text-info-secondary ml-1 text-lg font-bold line-through\">\n {variant?.availableForSale ? basePrice || '' : ''}\n </div>\n </>\n )}\n </div>\n {/* \u6309\u94AE\u7EC4 */}\n <div\n className={cn(\n 'shelf-flex-button-group',\n 'lg-desktop:gap-3 flex items-center gap-2',\n configuration.direction === 'vertical' ? 'flex-col' : ''\n )}\n >\n {configuration?.secondaryButton ? (\n <Button\n variant=\"secondary\"\n onClick={() => onSecondaryButton(data, configuration?.index, configuration)}\n className={`\n ${configuration.direction === 'vertical' ? 'w-full' : ''}\n `}\n >\n {configuration?.secondaryButton || ''}\n </Button>\n ) : null}\n {configuration?.primaryButton ? (\n <Button\n variant=\"primary\"\n onClick={() => onPrimaryButton(data, configuration?.index, configuration)}\n className={`\n ${configuration.direction === 'vertical' ? 'w-full' : ''}\n `}\n >\n {configuration?.primaryButton || ''}\n </Button>\n ) : null}\n </div>\n </div>\n </div>\n )\n}\n\nconst ShelfDisplay = React.forwardRef<HTMLDivElement, ShelfDisplayProps>(\n ({ data, buildData, className = '', key, event, recommendedData, target = '_self' }, ref) => {\n const [tabId, setTabId] = useState<string>('')\n const [currentItems, setCurrentItems] = useState<ShelfDisplayItem[]>([])\n\n const [viewRef, inView] = useOnceInView<HTMLDivElement>({ threshold: 0 })\n const isRecommend = useRef<boolean>(false)\n const isView = useRef<boolean>(false)\n const innerRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n useExposure(innerRef, {\n componentType: componentType,\n componentName: componentName,\n componentTitle: data?.title,\n navigation: tabId,\n })\n\n const {\n productsTab = [],\n productsCard = [],\n title,\n isShowTab = true,\n tabShape = 'square',\n isShowTag = false,\n isShowOriginalPrice = true,\n isShowRecommendedCard = false,\n ...other\n } = data\n\n const gackViewEvent = () => {\n gaTrack({\n event: 'ga4Event',\n event_name: 'view_item_list',\n event_parameters: {\n page_group: 'Home Page',\n item_list_name: 'Home_Page_Bundle',\n items: recommendedData?.map((item, index) => {\n const findData = item?.variants?.find((v: any) => v?.sku === item?.sku)\n const variant = findData || item?.variants?.[0]\n return {\n item_id: item?.sku || variant?.sku,\n item_name: item?.name,\n item_variant: variant?.name,\n price: variant?.price,\n index: index + 1,\n }\n }),\n },\n })\n }\n\n const handleCurrentTab = (currentData: ShelfDisplayItem[], flag: boolean) => {\n if (flag) {\n const newCurrentData = recommendedData?.map?.(item => {\n return {\n ...item,\n isShowRecommended: true,\n }\n })\n setCurrentItems(newCurrentData?.length ? newCurrentData || [] : [])\n } else {\n const isArray = Array.isArray(currentData)\n if (isArray) {\n const newCurrentData = currentData\n ?.map?.(item => {\n const findData = buildData?.products?.find(params => params?.handle === item?.handle)\n if (findData) {\n return {\n sku: item.sku,\n isShowRecommended: false,\n custom_name: item.custom_name,\n custom_description: item.custom_description,\n ...findData,\n }\n }\n })\n ?.filter(item => item)\n setCurrentItems(newCurrentData?.length ? newCurrentData || [] : [])\n } else {\n setCurrentItems([])\n }\n }\n }\n\n useEffect(() => {\n if (inView && recommendedData?.length && !isView.current) {\n isView.current = true\n gackViewEvent()\n }\n }, [inView, recommendedData])\n\n // \u7B97\u6CD5\u6570\u636E\u4F1A\u7A0D\u5FAE\u5EF6\u8FDF\uFF0C\u6240\u4EE5\u9700\u76D1\u542CrecommendedData\uFF0C\u4E3A\u4E86\u9632\u6B62\u5728\u6709\u7B97\u6CD5\u6570\u636E\u4E14\u5BF9\u9ED8\u8BA4\u6E32\u67D3\u7B2C\u4E00\u4E2A\u540E\u53CD\u590D\u89E6\u53D1\uFF0C\u7528isRecommend\u5173\u95ED\n useEffect(() => {\n if (isRecommend.current) return\n if (!isRecommend.current && recommendedData?.length) {\n isRecommend.current = true\n }\n if (isShowTab) {\n setTabId(productsTab?.[0]?.tab || '')\n handleCurrentTab(productsTab?.[0]?.data || [], productsTab?.[0]?.isShowRecommendedTab)\n return\n }\n handleCurrentTab(productsCard, isShowRecommendedCard)\n }, [recommendedData])\n\n return (\n <div\n ref={innerRef}\n className={cn('shelf-display-wrap w-full', className, { 'aiui-dark': data?.theme === 'dark' })}\n >\n {title && <Title data={{ title: title }} />}\n {isShowTab && (\n <div className=\"md-tablet:w-full md-tablet:overflow-hidden\">\n <TabSwitch\n value={tabId}\n tabs={productsTab}\n tabShape={tabShape}\n onTabClick={v => {\n setTabId(v?.tab)\n handleCurrentTab(v?.data || [], v?.isShowRecommendedTab)\n if (!v?.isShowRecommendedTab) {\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_click',\n event_parameters: {\n page_group: 'Home Page',\n component_type: componentType,\n component_name: componentName,\n component_title: data?.title,\n component_position: 1,\n navigation: v?.tab,\n },\n })\n return\n }\n gackViewEvent()\n }}\n />\n </div>\n )}\n <div\n ref={viewRef as any}\n className=\"tablet:min-h-[393px] laptop:min-h-[425px] desktop:min-h-[405px] lg-desktop:min-h-[409px]\"\n >\n <SwiperBox\n className={`${isShowTab ? 'mt-6' : ''} !overflow-visible`}\n id={`ShelfDisplay${key}${tabId}`}\n data={{\n list: currentItems,\n configuration: { ...other, event: event, isShowTag, isShowOriginalPrice, target: target },\n }}\n Slide={ShelfDisplayItem}\n breakpoints={{\n 0: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1,\n },\n 374: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1.2,\n },\n 768: {\n spaceBetween: 16,\n freeMode: false,\n slidesPerView: 2.3,\n },\n 1024: {\n spaceBetween: 16,\n freeMode: false,\n slidesPerView: 3,\n },\n 1440: {\n spaceBetween: 16,\n freeMode: false,\n slidesPerView: 4,\n },\n }}\n />\n </div>\n </div>\n )\n }\n)\n\nexport default withLayout(ShelfDisplay)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Fragment", "jsx", "jsxs", "React", "useState", "useEffect", "useRef", "useImperativeHandle", "cn", "Picture", "TabSwitch", "Button", "Title", "SwiperBox", "withLayout", "formatVariantPrice", "useExposure", "gaTrack", "useAiuiContext", "Badge", "Heading", "Text", "trackUrlRef", "componentType", "componentName", "SOLD_OUT_PRICE", "useOnceInView", "options", "ref", "inView", "setInView", "el", "observer", "entry", "ShelfDisplayItem", "data", "configuration", "locale", "copyWriting", "onPrimaryButton", "params", "index", "onSecondaryButton", "variant", "item", "isSoldOut", "isShowTag", "isShowOriginalPrice", "coupon", "price", "basePrice", "handleUrl", "sku", "skuArray", "displayTitle", "displayDescription", "ShelfDisplay", "buildData", "className", "key", "event", "recommendedData", "target", "tabId", "setTabId", "currentItems", "setCurrentItems", "viewRef", "isRecommend", "isView", "innerRef", "productsTab", "productsCard", "title", "isShowTab", "tabShape", "isShowRecommendedCard", "other", "gackViewEvent", "v", "handleCurrentTab", "currentData", "flag", "newCurrentData", "findData", "ShelfDisplay_default"]
|
|
7
7
|
}
|