@dnanpm/ui-components 0.7.0 → 0.9.0
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/components/Accordion/Accordion.css +6 -3
- package/dist/components/AccordionItem/AccordionItem.css +6 -3
- package/dist/components/Breadcrumb/Breadcrumb.css +15 -12
- package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +6 -6
- package/dist/components/Breadcrumb/Breadcrumb.module.css.js +6 -6
- package/dist/components/Button/Button.css +33 -32
- package/dist/components/Button/Button.module.css.cjs +11 -11
- package/dist/components/Button/Button.module.css.js +11 -11
- package/dist/components/ButtonCard/ButtonCard.cjs +105 -0
- package/dist/components/ButtonCard/ButtonCard.cjs.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.css +166 -0
- package/dist/components/ButtonCard/ButtonCard.d.ts +3 -0
- package/dist/components/ButtonCard/ButtonCard.d.ts.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.js +105 -0
- package/dist/components/ButtonCard/ButtonCard.js.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.cjs +18 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.cjs.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.js +19 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.js.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.types.d.ts +103 -0
- package/dist/components/ButtonCard/ButtonCard.types.d.ts.map +1 -0
- package/dist/components/ButtonCard/index.d.ts +3 -0
- package/dist/components/ButtonCard/index.d.ts.map +1 -0
- package/dist/components/ContentCard/ContentCard.cjs +96 -0
- package/dist/components/ContentCard/ContentCard.cjs.map +1 -0
- package/dist/components/ContentCard/ContentCard.css +249 -0
- package/dist/components/ContentCard/ContentCard.d.ts +3 -0
- package/dist/components/ContentCard/ContentCard.d.ts.map +1 -0
- package/dist/components/ContentCard/ContentCard.js +96 -0
- package/dist/components/ContentCard/ContentCard.js.map +1 -0
- package/dist/components/ContentCard/ContentCard.module.css.cjs +24 -0
- package/dist/components/ContentCard/ContentCard.module.css.cjs.map +1 -0
- package/dist/components/ContentCard/ContentCard.module.css.js +25 -0
- package/dist/components/ContentCard/ContentCard.module.css.js.map +1 -0
- package/dist/components/ContentCard/ContentCard.types.d.ts +99 -0
- package/dist/components/ContentCard/ContentCard.types.d.ts.map +1 -0
- package/dist/components/ContentCard/index.d.ts +3 -0
- package/dist/components/ContentCard/index.d.ts.map +1 -0
- package/dist/components/Drawer/Drawer.cjs +101 -0
- package/dist/components/Drawer/Drawer.cjs.map +1 -0
- package/dist/components/Drawer/Drawer.css +218 -0
- package/dist/components/Drawer/Drawer.d.ts +3 -0
- package/dist/components/Drawer/Drawer.d.ts.map +1 -0
- package/dist/components/Drawer/Drawer.js +101 -0
- package/dist/components/Drawer/Drawer.js.map +1 -0
- package/dist/components/Drawer/Drawer.module.css.cjs +37 -0
- package/dist/components/Drawer/Drawer.module.css.cjs.map +1 -0
- package/dist/components/Drawer/Drawer.module.css.js +37 -0
- package/dist/components/Drawer/Drawer.module.css.js.map +1 -0
- package/dist/components/Drawer/Drawer.types.d.ts +63 -0
- package/dist/components/Drawer/Drawer.types.d.ts.map +1 -0
- package/dist/components/Drawer/index.d.ts +3 -0
- package/dist/components/Drawer/index.d.ts.map +1 -0
- package/dist/components/Footer/Footer.css +87 -77
- package/dist/components/Footer/Footer.module.css.cjs +39 -39
- package/dist/components/Footer/Footer.module.css.js +39 -39
- package/dist/components/FunctionButton/FunctionButton.cjs +34 -0
- package/dist/components/FunctionButton/FunctionButton.cjs.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.css +124 -0
- package/dist/components/FunctionButton/FunctionButton.d.ts +3 -0
- package/dist/components/FunctionButton/FunctionButton.d.ts.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.js +34 -0
- package/dist/components/FunctionButton/FunctionButton.js.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.cjs +11 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.cjs.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.js +12 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.js.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.types.d.ts +21 -0
- package/dist/components/FunctionButton/FunctionButton.types.d.ts.map +1 -0
- package/dist/components/FunctionButton/index.d.ts +3 -0
- package/dist/components/FunctionButton/index.d.ts.map +1 -0
- package/dist/components/Hero/Hero.cjs +24 -26
- package/dist/components/Hero/Hero.cjs.map +1 -1
- package/dist/components/Hero/Hero.css +81 -74
- package/dist/components/Hero/Hero.js +24 -26
- package/dist/components/Hero/Hero.js.map +1 -1
- package/dist/components/Hero/Hero.module.css.cjs +20 -17
- package/dist/components/Hero/Hero.module.css.cjs.map +1 -1
- package/dist/components/Hero/Hero.module.css.js +20 -17
- package/dist/components/Hero/Hero.module.css.js.map +1 -1
- package/dist/components/IconButton/IconButton.css +32 -34
- package/dist/components/IconButton/IconButton.module.css.cjs +9 -9
- package/dist/components/IconButton/IconButton.module.css.js +9 -9
- package/dist/components/Label/Label.css +2 -3
- package/dist/components/MainNavigation/MainNavigation.cjs +415 -120
- package/dist/components/MainNavigation/MainNavigation.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.css +265 -159
- package/dist/components/MainNavigation/MainNavigation.d.ts +1 -1
- package/dist/components/MainNavigation/MainNavigation.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.js +417 -122
- package/dist/components/MainNavigation/MainNavigation.js.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.module.css.cjs +78 -68
- package/dist/components/MainNavigation/MainNavigation.module.css.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.module.css.js +78 -68
- package/dist/components/MainNavigation/MainNavigation.module.css.js.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.types.d.ts +64 -17
- package/dist/components/MainNavigation/MainNavigation.types.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.cjs +20 -0
- package/dist/components/MainNavigation/MainNavigation.utils.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.d.ts +10 -1
- package/dist/components/MainNavigation/MainNavigation.utils.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.js +20 -0
- package/dist/components/MainNavigation/MainNavigation.utils.js.map +1 -1
- package/dist/components/MainNavigation/index.d.ts +1 -1
- package/dist/components/MainNavigation/index.d.ts.map +1 -1
- package/dist/components/Modal/Modal.cjs +101 -0
- package/dist/components/Modal/Modal.cjs.map +1 -0
- package/dist/components/Modal/Modal.css +204 -0
- package/dist/components/Modal/Modal.d.ts +3 -0
- package/dist/components/Modal/Modal.d.ts.map +1 -0
- package/dist/components/Modal/Modal.js +101 -0
- package/dist/components/Modal/Modal.js.map +1 -0
- package/dist/components/Modal/Modal.module.css.cjs +39 -0
- package/dist/components/Modal/Modal.module.css.cjs.map +1 -0
- package/dist/components/Modal/Modal.module.css.js +39 -0
- package/dist/components/Modal/Modal.module.css.js.map +1 -0
- package/dist/components/Modal/Modal.types.d.ts +62 -0
- package/dist/components/Modal/Modal.types.d.ts.map +1 -0
- package/dist/components/Modal/index.d.ts +3 -0
- package/dist/components/Modal/index.d.ts.map +1 -0
- package/dist/components/Modal/useDialogDismissal.cjs +41 -0
- package/dist/components/Modal/useDialogDismissal.cjs.map +1 -0
- package/dist/components/Modal/useDialogDismissal.d.ts +17 -0
- package/dist/components/Modal/useDialogDismissal.d.ts.map +1 -0
- package/dist/components/Modal/useDialogDismissal.js +41 -0
- package/dist/components/Modal/useDialogDismissal.js.map +1 -0
- package/dist/components/Modal/useNativeDialog.cjs +126 -0
- package/dist/components/Modal/useNativeDialog.cjs.map +1 -0
- package/dist/components/Modal/useNativeDialog.d.ts +14 -0
- package/dist/components/Modal/useNativeDialog.d.ts.map +1 -0
- package/dist/components/Modal/useNativeDialog.js +126 -0
- package/dist/components/Modal/useNativeDialog.js.map +1 -0
- package/dist/components/Notification/Notification.css +6 -3
- package/dist/components/Pictograph/Pictograph.css +6 -3
- package/dist/components/Pictograph/PictographItem.css +6 -3
- package/dist/components/Quote/Quote.css +2 -3
- package/dist/components/Spinner/Spinner.css +6 -3
- package/dist/index.cjs +10 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/styles/utils/elevation.css +2 -3
- package/dist/styles/utils/elevation.module.css.cjs +3 -0
- package/dist/styles/utils/elevation.module.css.cjs.map +1 -1
- package/dist/styles/utils/elevation.module.css.js +4 -1
- package/dist/styles/utils/elevation.module.css.js.map +1 -1
- package/dist/styles/utils/focus.css +26 -24
- package/dist/styles/utils/focus.module.css.cjs +3 -6
- package/dist/styles/utils/focus.module.css.cjs.map +1 -1
- package/dist/styles/utils/focus.module.css.js +4 -7
- package/dist/styles/utils/focus.module.css.js.map +1 -1
- package/dist/styles/utils/overlay.css +2 -3
- package/dist/styles/utils/text-decoration.css +4 -4
- package/dist/styles/utils/text-decoration.module.css.cjs +2 -2
- package/dist/styles/utils/text-decoration.module.css.js +2 -2
- package/dist/styles.css +17 -7
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainNavigation.cjs","sources":["../../../src/components/MainNavigation/MainNavigation.tsx"],"sourcesContent":["import { Fragment, useCallback, useEffect, useRef, useState } from 'react';\nimport type { JSX } from 'react';\nimport { ArrowRight, Cart, ChevronRight, Close, Globe, Open, Search, Menu } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport focusStyles from '../../styles/utils/focus.module.css';\nimport overlayStyles from '../../styles/utils/overlay.module.css';\nimport elevationStyles from '../../styles/utils/elevation.module.css';\nimport textDecorationStyles from '../../styles/utils/text-decoration.module.css';\nimport { Button } from '../Button';\nimport { IconButton } from '../IconButton';\nimport styles from './MainNavigation.module.css';\nimport {\n assignRef,\n getLinkRel,\n getLinkTarget,\n isDesktopViewportByEnvironment,\n isExternalLink,\n isExternalTarget,\n isItemInCurrentPath,\n isLinkInCurrentPage,\n isMobileIosDeviceByEnvironment,\n isMobileViewportByEnvironment,\n toNavigableHref,\n} from './MainNavigation.utils';\nimport type {\n MainNavigationItem,\n MainNavigationLink,\n MainNavigationRenderLink,\n MainNavigationOrganizationLink,\n MainNavigationProps,\n MainNavigationRenderLinkProps,\n} from './MainNavigation.types';\n\nconst defaultOrganizations: readonly MainNavigationOrganizationLink[] = [];\nconst defaultItems: readonly MainNavigationItem[] = [];\nconst defaultLogoSvg =\n '<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_6509_143)\"><g clip-path=\"url(#clip1_6509_143)\"><rect width=\"40\" height=\"40\" fill=\"white\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M-0.0314789 40V0H40.0019V40H-0.0314789ZM9.33519 27.05C11.6685 27.05 13.5685 25.15 13.5685 22.7667V17.1667C13.5685 14.7833 11.6685 12.8833 9.33519 12.8833H5.10186V27.05H9.33519ZM21.6352 27.05H24.1685V17.1167C24.1685 14.7833 22.2685 12.8833 19.9352 12.8833H15.7019V27.05H18.1852V15.4167H19.9352C20.9019 15.4167 21.6352 16.15 21.6352 17.1167V27.05ZM32.4019 27.05H34.9352V17.05C34.9352 14.7167 33.0352 12.8167 30.7019 12.8167H30.6519C28.3185 12.8167 26.4185 14.7167 26.4185 17.05V27.0667H28.9519V22H32.4019V27.05ZM30.65 15.3333H30.7C31.6167 15.3333 32.4 16.1 32.4 17.0333V19.6167H28.95V17.0333C28.95 16.1167 29.6833 15.3333 30.65 15.3333ZM7.56667 15.4333H9.36667C10.3 15.4333 11.0833 16.15 11.0667 17.1333V22.8333C11.0667 23.75 10.3 24.5333 9.36667 24.5333H7.56667V15.4333Z\" fill=\"#FF007D\"/></g></g><defs><clipPath id=\"clip0_6509_143\"><rect width=\"40\" height=\"40\" fill=\"white\"/></clipPath><clipPath id=\"clip1_6509_143\"><rect width=\"40\" height=\"40\" fill=\"white\"/></clipPath></defs></svg>';\nconst defaultLogoSrc = `data:image/svg+xml,${encodeURIComponent(defaultLogoSvg)}`;\nconst mobilePanelAnimationDurationMs = 200;\nconst mobileBodyScrollLockClass = 'dds-un-scrollable';\nconst defaultOverflowCategoryLabel = 'Muut kategoriat';\nconst desktopMinWidthMediaQuery = '(min-width: 1024px)';\n\nconst defaultRenderLink: MainNavigationRenderLink = (props) => <a {...props} />;\n\nexport const MainNavigation = ({\n organizations = defaultOrganizations,\n items = defaultItems,\n loginHref = '#',\n loginLabel = 'Kirjaudu',\n logoHref = '/',\n languageSelectorLabel = 'FI',\n searchLabel = 'Haku',\n cartLabel = 'Ostoskori',\n showLanguageSelector = false,\n showSearch = false,\n showCart = false,\n cartCounter,\n cartCounterLabel = 'tuotetta ostoskorissa',\n onLanguageSelectorClick,\n onSearchClick,\n onCartClick,\n mobileMenuOpenAriaLabel = 'Avaa valikko',\n mobileMenuCloseAriaLabel = 'Sulje valikko',\n organizationStripAriaLabel = 'Sivustot',\n logoAriaLabel = 'Siirry etusivulle',\n mobilePrimaryNavigationAriaLabel = 'Päävalikko',\n externalLinkAriaLabel = 'avautuu uuteen välilehteen',\n defaultMobileMenuOpen = false,\n defaultOpenItemIndex = null,\n currentPathname,\n overflowCategoryLabel = defaultOverflowCategoryLabel,\n onMobileMenuToggle,\n onDesktopItemToggle,\n renderLink = defaultRenderLink,\n className,\n 'aria-label': ariaLabel = 'Päänavigaatio',\n ref,\n ...props\n}: MainNavigationProps) => {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(defaultMobileMenuOpen);\n const [isMobileMenuClosing, setIsMobileMenuClosing] = useState(false);\n const [openTopLevelItemIndex, setOpenTopLevelItemIndex] = useState<number | null>(\n defaultOpenItemIndex,\n );\n const [isDesktopHeaderOpen, setIsDesktopHeaderOpen] = useState(true);\n const [mobileActiveCategoryIndex, setMobileActiveCategoryIndex] = useState<number | null>(null);\n const [isMobileSecondPanelClosing, setIsMobileSecondPanelClosing] = useState(false);\n const [isMobileThirdPanelClosing, setIsMobileThirdPanelClosing] = useState(false);\n const mobileSecondPanelCloseTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const mobileThirdPanelCloseTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const mobileMenuCloseResetTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const focusMobileSecondPanelTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const focusMobileThirdPanelTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const focusReturnToMobileTopLevelItemTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n const resetMobileThirdPanelScrollTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n const headerElementRef = useRef<HTMLElement | null>(null);\n const desktopPanelTriggerButtonRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const mobilePrimaryNavRef = useRef<HTMLElement | null>(null);\n const mobileMenuToggleButtonRef = useRef<HTMLButtonElement | null>(null);\n const mobileModalPanelRef = useRef<HTMLDivElement | null>(null);\n const mobileThirdPanelRef = useRef<HTMLDivElement | null>(null);\n const mobilePanelBackButtonRef = useRef<HTMLButtonElement | null>(null);\n const mobileThirdPanelBackButtonRef = useRef<HTMLButtonElement | null>(null);\n const mobileLevelTwoCategoryButtonRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const focusMobilePanelBackOnOpenRef = useRef(false);\n const focusMobileThirdPanelBackOnOpenRef = useRef(false);\n const focusReturnToMobileCategoryTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n\n const setHeaderRef = useCallback(\n (node: HTMLElement | null) => {\n headerElementRef.current = node;\n assignRef(ref, node);\n },\n [ref],\n );\n\n useEffect(() => {\n return () => {\n if (mobileSecondPanelCloseTimeoutRef.current != null) {\n clearTimeout(mobileSecondPanelCloseTimeoutRef.current);\n }\n\n if (mobileThirdPanelCloseTimeoutRef.current != null) {\n clearTimeout(mobileThirdPanelCloseTimeoutRef.current);\n }\n\n if (focusMobileSecondPanelTimeoutRef.current != null) {\n clearTimeout(focusMobileSecondPanelTimeoutRef.current);\n }\n\n if (focusMobileThirdPanelTimeoutRef.current != null) {\n clearTimeout(focusMobileThirdPanelTimeoutRef.current);\n }\n\n clearTimeout(focusReturnToMobileTopLevelItemTimeoutRef.current ?? undefined);\n\n if (resetMobileThirdPanelScrollTimeoutRef.current != null) {\n clearTimeout(resetMobileThirdPanelScrollTimeoutRef.current);\n }\n\n if (mobileMenuCloseResetTimeoutRef.current != null) {\n clearTimeout(mobileMenuCloseResetTimeoutRef.current);\n }\n\n if (focusReturnToMobileCategoryTimeoutRef.current != null) {\n clearTimeout(focusReturnToMobileCategoryTimeoutRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n // Header ref is assigned on commit; this effect keeps header visibility in sync with scroll.\n const headerElement = headerElementRef.current as HTMLElement;\n\n const desktopQuery = window.matchMedia(desktopMinWidthMediaQuery);\n let previousScrollY = window.pageYOffset;\n let headerHeight =\n parseFloat(window.getComputedStyle(headerElement).height.replace('px', '')) ||\n headerElement.offsetHeight;\n\n const openHeader = () => {\n setIsDesktopHeaderOpen(true);\n };\n\n const closeHeader = () => {\n setIsDesktopHeaderOpen(false);\n };\n\n const handleScroll = () => {\n const currentScrollY = window.pageYOffset;\n\n if (!desktopQuery.matches) {\n openHeader();\n previousScrollY = currentScrollY;\n return;\n }\n\n if (mobileMenuOpen || openTopLevelItemIndex != null) {\n openHeader();\n previousScrollY = currentScrollY;\n return;\n }\n\n if (currentScrollY <= headerHeight) {\n openHeader();\n } else if (currentScrollY > previousScrollY) {\n closeHeader();\n } else if (currentScrollY < previousScrollY) {\n openHeader();\n }\n\n previousScrollY = currentScrollY;\n };\n\n const handleViewportChange = () => {\n openHeader();\n previousScrollY = window.pageYOffset;\n headerHeight =\n parseFloat(window.getComputedStyle(headerElement).height.replace('px', '')) ||\n headerElement.offsetHeight;\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n window.addEventListener('resize', handleViewportChange);\n\n desktopQuery.addEventListener('change', handleViewportChange);\n\n handleScroll();\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('resize', handleViewportChange);\n\n desktopQuery.removeEventListener('change', handleViewportChange);\n };\n }, [mobileMenuOpen, openTopLevelItemIndex]);\n\n useEffect(() => {\n const browserWindow = globalThis.window;\n const browserDocument = globalThis.document;\n\n if (!mobileMenuOpen || browserWindow == null || browserDocument == null) {\n return;\n }\n\n const isMobileViewport = isMobileViewportByEnvironment(browserWindow);\n\n if (!isMobileViewport) {\n return;\n }\n\n const body = browserDocument.body;\n\n if (isMobileIosDeviceByEnvironment(browserWindow, globalThis.navigator)) {\n const scrollY = browserWindow.pageYOffset;\n\n body.style.position = 'fixed';\n body.style.top = `-${scrollY}px`;\n body.style.width = '100%';\n\n return () => {\n const top = body.style.top;\n\n body.style.position = '';\n body.style.top = '';\n body.style.width = '';\n\n if (top !== '') {\n browserWindow.scrollTo(0, Number.parseInt(top, 10) * -1);\n }\n };\n }\n\n body.classList.add(mobileBodyScrollLockClass);\n\n return () => {\n body.classList.remove(mobileBodyScrollLockClass);\n };\n }, [mobileMenuOpen]);\n\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const desktopQuery = window.matchMedia(desktopMinWidthMediaQuery);\n\n const applyViewportModeChange = ({ matches: isDesktopViewport }: { matches: boolean }) => {\n // Keep mobile and desktop panel states mutually exclusive on breakpoint transitions.\n if (isDesktopViewport) {\n clearTimeout(mobileSecondPanelCloseTimeoutRef.current ?? undefined);\n mobileSecondPanelCloseTimeoutRef.current = null;\n\n clearTimeout(mobileThirdPanelCloseTimeoutRef.current ?? undefined);\n mobileThirdPanelCloseTimeoutRef.current = null;\n\n clearTimeout(resetMobileThirdPanelScrollTimeoutRef.current ?? undefined);\n resetMobileThirdPanelScrollTimeoutRef.current = null;\n\n setMobileMenuOpen((previous) => {\n if (previous) {\n onMobileMenuToggle?.(false);\n }\n\n return false;\n });\n setMobileActiveCategoryIndex(null);\n setIsMobileSecondPanelClosing(false);\n setIsMobileThirdPanelClosing(false);\n return;\n }\n\n setOpenTopLevelItemIndex((previous) => {\n if (previous !== null) {\n onDesktopItemToggle?.(null);\n }\n\n return null;\n });\n };\n\n applyViewportModeChange(desktopQuery);\n\n desktopQuery.addEventListener('change', applyViewportModeChange);\n\n return () => {\n desktopQuery.removeEventListener('change', applyViewportModeChange);\n };\n }, [onDesktopItemToggle, onMobileMenuToggle]);\n\n const resetMobilePanelState = useCallback(() => {\n setOpenTopLevelItemIndex(null);\n setMobileActiveCategoryIndex(null);\n setIsMobileSecondPanelClosing(false);\n setIsMobileThirdPanelClosing(false);\n }, []);\n\n const closeMobileMenu = useCallback(() => {\n clearTimeout(mobileSecondPanelCloseTimeoutRef.current ?? undefined);\n mobileSecondPanelCloseTimeoutRef.current = null;\n\n clearTimeout(mobileThirdPanelCloseTimeoutRef.current ?? undefined);\n mobileThirdPanelCloseTimeoutRef.current = null;\n\n clearTimeout(resetMobileThirdPanelScrollTimeoutRef.current ?? undefined);\n resetMobileThirdPanelScrollTimeoutRef.current = null;\n\n if (!mobileMenuOpen && openTopLevelItemIndex === null) {\n return;\n }\n\n const shouldAnimateMobileClose = mobileMenuOpen;\n\n clearTimeout(mobileMenuCloseResetTimeoutRef.current ?? undefined);\n setIsMobileMenuClosing(shouldAnimateMobileClose);\n setMobileMenuOpen((previous) => {\n if (previous) {\n onMobileMenuToggle?.(false);\n }\n\n return false;\n });\n setOpenTopLevelItemIndex((previous) => {\n if (previous !== null) {\n onDesktopItemToggle?.(null);\n }\n\n return null;\n });\n\n if (shouldAnimateMobileClose) {\n mobileMenuCloseResetTimeoutRef.current = setTimeout(() => {\n resetMobilePanelState();\n setIsMobileMenuClosing(false);\n mobileMenuCloseResetTimeoutRef.current = null;\n }, mobilePanelAnimationDurationMs);\n return;\n }\n\n resetMobilePanelState();\n setIsMobileMenuClosing(false);\n }, [\n mobileMenuOpen,\n onDesktopItemToggle,\n onMobileMenuToggle,\n openTopLevelItemIndex,\n resetMobilePanelState,\n ]);\n\n const toggleMobileMenu = () => {\n if (mobileMenuOpen) {\n closeMobileMenu();\n return;\n }\n\n setMobileMenuOpen(true);\n setIsMobileMenuClosing(false);\n onMobileMenuToggle?.(true);\n };\n\n const toggleTopLevelItem = (index: number) => {\n setOpenTopLevelItemIndex((previous) => {\n const next = previous === index ? null : index;\n setMobileActiveCategoryIndex(null);\n setIsMobileSecondPanelClosing(false);\n setIsMobileThirdPanelClosing(false);\n onDesktopItemToggle?.(next);\n return next;\n });\n };\n\n const isDesktopViewport = useCallback(() => {\n return isDesktopViewportByEnvironment(globalThis.window);\n }, []);\n\n const isFocusable = useCallback((element: HTMLElement) => {\n /* v8 ignore next -- defensive filter branch */\n if (element.tabIndex < 0 || element.hasAttribute('disabled')) {\n return false;\n }\n\n /* v8 ignore next -- defensive filter branch */\n if (element.getAttribute('aria-hidden') === 'true') {\n return false;\n }\n\n /* v8 ignore next -- defensive filter branch */\n if (element.closest('[hidden]') != null) {\n return false;\n }\n\n let currentElement: HTMLElement | null = element;\n\n while (currentElement != null) {\n const computedStyle = window.getComputedStyle(currentElement);\n\n /* v8 ignore next -- defensive filter branch */\n if (computedStyle.display === 'none' || computedStyle.visibility === 'hidden') {\n return false;\n }\n\n currentElement = currentElement.parentElement;\n }\n\n return true;\n }, []);\n\n const getFocusableElements = useCallback(\n (container: ParentNode | null, selector: string) =>\n /* v8 ignore next -- defensive null guard for transient panel refs */\n container == null\n ? []\n : Array.from(container.querySelectorAll<HTMLElement>(selector)).filter(isFocusable),\n [isFocusable],\n );\n\n const getDesktopPanelInteractiveElements = useCallback(() => {\n return getFocusableElements(\n headerElementRef.current,\n `.${styles['main-navigation__panel--desktop']} a[href], .${styles['main-navigation__panel--desktop']} button:not([disabled]), .${styles['main-navigation__panel--desktop']} [tabindex]:not([tabindex=\"-1\"])`,\n );\n }, [getFocusableElements]);\n\n const getDesktopFocusLoopElements = useCallback(\n (openDesktopItemIndex: number) => {\n const focusLoopElements = new Set<HTMLElement>();\n const triggerButton = desktopPanelTriggerButtonRefs.current[openDesktopItemIndex];\n\n if (triggerButton != null && isFocusable(triggerButton)) {\n focusLoopElements.add(triggerButton);\n }\n\n getDesktopPanelInteractiveElements().forEach((element) => {\n focusLoopElements.add(element);\n });\n\n return Array.from(focusLoopElements);\n },\n [getDesktopPanelInteractiveElements, isFocusable],\n );\n\n const getMobileFocusableElements = useCallback(() => {\n const focusableElements: HTMLElement[] = [];\n const addFocusableElements = (elements: readonly HTMLElement[]) => {\n focusableElements.push(...elements);\n };\n\n if (\n mobileMenuToggleButtonRef.current != null &&\n isFocusable(mobileMenuToggleButtonRef.current)\n ) {\n focusableElements.push(mobileMenuToggleButtonRef.current);\n }\n\n if (openTopLevelItemIndex == null) {\n addFocusableElements(\n getFocusableElements(\n mobilePrimaryNavRef.current,\n `.${styles['main-navigation__primary-list']} .${styles['main-navigation__item-toggle']}, .${styles['main-navigation__primary-list']} .${styles['main-navigation__item-link']}`,\n ),\n );\n return Array.from(new Set(focusableElements));\n }\n\n if (mobileActiveCategoryIndex == null) {\n addFocusableElements(\n getFocusableElements(\n mobileModalPanelRef.current,\n `.${styles['main-navigation__mobile-back-item']}, .${styles['main-navigation__mobile-feature-link']}, .${styles['main-navigation__mobile-level-2-category-button']}`,\n ),\n );\n return Array.from(new Set(focusableElements));\n }\n\n addFocusableElements(\n getFocusableElements(\n mobileThirdPanelRef.current,\n `.${styles['main-navigation__mobile-back-item']}, .${styles['main-navigation__mobile-level-3-link']}`,\n ),\n );\n\n return Array.from(new Set(focusableElements));\n }, [getFocusableElements, isFocusable, mobileActiveCategoryIndex, openTopLevelItemIndex]);\n\n const openMobileCategoryPanel = useCallback((index: number) => {\n clearTimeout(resetMobileThirdPanelScrollTimeoutRef.current ?? undefined);\n setIsMobileThirdPanelClosing(false);\n setMobileActiveCategoryIndex(index);\n resetMobileThirdPanelScrollTimeoutRef.current = setTimeout(() => {\n (mobileThirdPanelRef.current ?? { scrollTop: 0 }).scrollTop = 0;\n resetMobileThirdPanelScrollTimeoutRef.current = null;\n }, 0);\n }, []);\n\n const closeMenus = useCallback(() => {\n clearTimeout(mobileSecondPanelCloseTimeoutRef.current ?? undefined);\n mobileSecondPanelCloseTimeoutRef.current = null;\n\n clearTimeout(mobileThirdPanelCloseTimeoutRef.current ?? undefined);\n mobileThirdPanelCloseTimeoutRef.current = null;\n\n clearTimeout(focusMobileSecondPanelTimeoutRef.current ?? undefined);\n focusMobileSecondPanelTimeoutRef.current = null;\n\n clearTimeout(focusMobileThirdPanelTimeoutRef.current ?? undefined);\n focusMobileThirdPanelTimeoutRef.current = null;\n\n clearTimeout(resetMobileThirdPanelScrollTimeoutRef.current ?? undefined);\n resetMobileThirdPanelScrollTimeoutRef.current = null;\n\n clearTimeout(focusReturnToMobileTopLevelItemTimeoutRef.current ?? undefined);\n focusReturnToMobileTopLevelItemTimeoutRef.current = null;\n\n clearTimeout(focusReturnToMobileCategoryTimeoutRef.current ?? undefined);\n focusReturnToMobileCategoryTimeoutRef.current = null;\n closeMobileMenu();\n }, [closeMobileMenu]);\n\n const closeMobilePanel = useCallback(\n ({\n isClosing,\n setIsClosing,\n closeTimeoutRef,\n onClosed,\n }: {\n isClosing: boolean;\n setIsClosing: (isClosing: boolean) => void;\n closeTimeoutRef: { current: ReturnType<typeof setTimeout> | null };\n onClosed?: () => void;\n }) => {\n /* v8 ignore next -- rapid double click during closing animation */\n if (isClosing) {\n return;\n }\n\n clearTimeout(closeTimeoutRef.current ?? undefined);\n setIsClosing(true);\n closeTimeoutRef.current = setTimeout(() => {\n onClosed?.();\n setIsClosing(false);\n closeTimeoutRef.current = null;\n }, mobilePanelAnimationDurationMs);\n },\n [],\n );\n\n const renderNavigationLink = useCallback(\n ({\n link,\n className,\n children,\n ariaCurrent,\n onKeyDown,\n }: {\n link: MainNavigationLink;\n className: string;\n children: MainNavigationRenderLinkProps['children'];\n ariaCurrent?: 'page';\n onKeyDown?: MainNavigationRenderLinkProps['onKeyDown'];\n }) =>\n renderLink(\n {\n href: toNavigableHref(link.href),\n className,\n rel: getLinkRel(link.target),\n target: getLinkTarget(link.target),\n 'aria-current': ariaCurrent,\n onKeyDown,\n children,\n },\n { external: isExternalLink(link) },\n ),\n [renderLink],\n );\n\n const renderUtilityLink = useCallback(\n (props: MainNavigationRenderLinkProps) => renderLink(props, { external: false }),\n [renderLink],\n );\n\n const openItem = openTopLevelItemIndex != null ? items[openTopLevelItemIndex] : undefined;\n const openPanel = openItem?.panel;\n const isMobilePanelClosingOut = isMobileMenuClosing && !mobileMenuOpen;\n const showPageOverlay = mobileMenuOpen || openPanel != null || isMobilePanelClosingOut;\n const isOverlayClosingOut = isMobilePanelClosingOut && openPanel == null;\n const cartAccessibleLabel =\n cartCounter != null ? `${cartLabel} ${cartCounter} ${cartCounterLabel}` : cartLabel;\n\n useEffect(() => {\n if (!showPageOverlay) {\n return;\n }\n\n const handleOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n\n if (headerElementRef.current?.contains(target)) {\n return;\n }\n\n closeMenus();\n };\n\n document.addEventListener('pointerdown', handleOutsidePointerDown, true);\n\n return () => {\n document.removeEventListener('pointerdown', handleOutsidePointerDown, true);\n };\n }, [closeMenus, showPageOverlay]);\n\n useEffect(() => {\n if (\n !focusMobilePanelBackOnOpenRef.current ||\n openTopLevelItemIndex == null ||\n mobileMenuOpen === false\n ) {\n return;\n }\n\n /* v8 ignore next -- guard for viewport flip during keyboard open */\n if (isDesktopViewport()) {\n focusMobilePanelBackOnOpenRef.current = false;\n return;\n }\n\n clearTimeout(focusMobileSecondPanelTimeoutRef.current ?? undefined);\n\n // Delay keyboard focus transfer so Enter animation timing matches pointer interactions.\n focusMobileSecondPanelTimeoutRef.current = setTimeout(() => {\n mobilePanelBackButtonRef.current?.focus();\n focusMobilePanelBackOnOpenRef.current = false;\n focusMobileSecondPanelTimeoutRef.current = null;\n }, mobilePanelAnimationDurationMs);\n }, [isDesktopViewport, mobileMenuOpen, openTopLevelItemIndex]);\n\n useEffect(() => {\n if (!focusMobileThirdPanelBackOnOpenRef.current || mobileActiveCategoryIndex == null) {\n return;\n }\n\n focusMobileThirdPanelBackOnOpenRef.current =\n focusMobileThirdPanelBackOnOpenRef.current && !isDesktopViewport();\n\n if (focusMobileThirdPanelBackOnOpenRef.current) {\n clearTimeout(focusMobileThirdPanelTimeoutRef.current ?? undefined);\n\n // Delay keyboard focus transfer so Enter animation timing matches pointer interactions.\n focusMobileThirdPanelTimeoutRef.current = setTimeout(() => {\n mobileThirdPanelBackButtonRef.current?.focus();\n focusMobileThirdPanelBackOnOpenRef.current = false;\n focusMobileThirdPanelTimeoutRef.current = null;\n }, mobilePanelAnimationDurationMs);\n }\n }, [isDesktopViewport, mobileActiveCategoryIndex]);\n\n useEffect(() => {\n if (!mobileMenuOpen || openTopLevelItemIndex == null || isDesktopViewport()) {\n return;\n }\n\n const mobileSecondPanel = mobileModalPanelRef.current;\n if (mobileSecondPanel == null) {\n return;\n }\n\n mobileSecondPanel.scrollTop = 0;\n }, [isDesktopViewport, mobileMenuOpen, openTopLevelItemIndex]);\n\n const renderPanel = (panelClassName: string, isMobileModal = false): JSX.Element | null => {\n if (openPanel == null || openItem == null) {\n return null;\n }\n\n const hasFeatureLinks = openPanel.featureLinks != null && openPanel.featureLinks.length > 0;\n const panelColumns = openPanel.columns ?? [];\n const lastDesktopVisibleColumnIndex = panelColumns.reduce((lastIndex, column, index) => {\n /* v8 ignore next -- branch only hit with mobile-only columns in desktop panel data */\n if (column.mobileOnly) {\n return lastIndex;\n }\n\n return index;\n }, -1);\n const mobilePanelColumns = panelColumns.filter((column) => !column.desktopOnly);\n const getColumnHeading = (heading: string, isOverflow?: boolean) => {\n if (!isOverflow) {\n return heading;\n }\n\n /* v8 ignore next -- branch only hit by synthetic empty overflow heading */\n return heading.trim() === '' ? overflowCategoryLabel : heading;\n };\n\n if (isMobileModal) {\n const selectedColumn =\n mobileActiveCategoryIndex != null\n ? mobilePanelColumns[mobileActiveCategoryIndex]\n : null;\n const isLevelThreePanelOpen = selectedColumn != null && !isMobileThirdPanelClosing;\n const shouldHideLevelTwoFromAssistiveTech = isLevelThreePanelOpen;\n\n return (\n <div\n ref={mobileModalPanelRef}\n className={cn(\n panelClassName,\n isMobileSecondPanelClosing && styles['main-navigation__panel--is-closing'],\n )}\n aria-label={openItem.label}\n aria-hidden={isMobilePanelClosingOut || undefined}\n >\n <div className={styles['main-navigation__mobile-level-2-content']}>\n <button\n ref={mobilePanelBackButtonRef}\n type=\"button\"\n className={cn(\n styles['main-navigation__mobile-back-item'],\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n )}\n onClick={() =>\n closeMobilePanel({\n isClosing: isMobileSecondPanelClosing,\n setIsClosing: setIsMobileSecondPanelClosing,\n closeTimeoutRef: mobileSecondPanelCloseTimeoutRef,\n onClosed: () => {\n const closedTopLevelItemIndex = openTopLevelItemIndex;\n setOpenTopLevelItemIndex(null);\n setMobileActiveCategoryIndex(null);\n onDesktopItemToggle?.(null);\n\n clearTimeout(\n focusReturnToMobileTopLevelItemTimeoutRef.current ??\n undefined,\n );\n focusReturnToMobileTopLevelItemTimeoutRef.current =\n setTimeout(() => {\n desktopPanelTriggerButtonRefs.current[\n closedTopLevelItemIndex as number\n ]?.focus();\n focusReturnToMobileTopLevelItemTimeoutRef.current =\n null;\n }, 0);\n },\n })\n }\n >\n <ChevronRight className={styles['main-navigation__mobile-back-icon']} />\n <span className={styles['main-navigation__mobile-back-label']}>\n {openItem.label}\n </span>\n </button>\n\n {hasFeatureLinks && (\n <div\n className={styles['main-navigation__mobile-level-2-feature-links']}\n aria-hidden={shouldHideLevelTwoFromAssistiveTech || undefined}\n >\n <ul\n className={\n styles['main-navigation__mobile-level-2-feature-list']\n }\n >\n {openPanel.featureLinks!.map((link, index) => {\n const href = toNavigableHref(link.href);\n const isExternalFeatureLink = isExternalTarget(link.target);\n const MobileFeatureIcon = isExternalFeatureLink\n ? Open\n : ArrowRight;\n\n return (\n <li\n key={`mobile-feature-${index}`}\n className={\n styles[\n 'main-navigation__mobile-level-2-feature-list-item'\n ]\n }\n >\n <IconButton\n href={href}\n renderLink={(linkProps) =>\n renderLink(linkProps, {\n external: isExternalLink(link),\n })\n }\n className={\n styles[\n 'main-navigation__mobile-feature-link'\n ]\n }\n icon={MobileFeatureIcon}\n size=\"small\"\n labelBehavior=\"wrap\"\n rel={getLinkRel(link.target)}\n target={getLinkTarget(link.target)}\n >\n {link.label}\n {isExternalFeatureLink &&\n externalLinkAriaLabel && (\n <span\n className={\n styles[\n 'main-navigation__sr-only'\n ]\n }\n >\n {` (${externalLinkAriaLabel})`}\n </span>\n )}\n </IconButton>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n\n {\n <ul\n className={styles['main-navigation__mobile-level-2-category-list']}\n aria-hidden={shouldHideLevelTwoFromAssistiveTech || undefined}\n >\n {mobilePanelColumns.map((column, index) => (\n <li\n key={`mobile-category-${column.heading}-${index}`}\n className={\n styles['main-navigation__mobile-level-2-category-item']\n }\n >\n <button\n ref={(node) => {\n mobileLevelTwoCategoryButtonRefs.current[index] =\n node;\n }}\n type=\"button\"\n className={cn(\n styles[\n 'main-navigation__mobile-level-2-category-button'\n ],\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n )}\n onClick={() => openMobileCategoryPanel(index)}\n onKeyDown={(event) => {\n if (event.key !== 'Enter' || isDesktopViewport()) {\n return;\n }\n\n event.preventDefault();\n focusMobileThirdPanelBackOnOpenRef.current = true;\n openMobileCategoryPanel(index);\n }}\n >\n <span>\n {getColumnHeading(column.heading, column.overflow)}\n </span>\n <ChevronRight />\n </button>\n </li>\n ))}\n </ul>\n }\n\n <div\n ref={mobileThirdPanelRef}\n className={cn(\n styles['main-navigation__mobile-level-3-panel'],\n isLevelThreePanelOpen &&\n styles['main-navigation__mobile-level-3-panel--open'],\n isMobileThirdPanelClosing &&\n styles['main-navigation__mobile-level-3-panel--is-closing'],\n )}\n >\n {selectedColumn != null && (\n <>\n <button\n ref={mobileThirdPanelBackButtonRef}\n type=\"button\"\n className={cn(\n styles['main-navigation__mobile-back-item'],\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n )}\n onClick={() =>\n closeMobilePanel({\n isClosing: isMobileThirdPanelClosing,\n setIsClosing: setIsMobileThirdPanelClosing,\n closeTimeoutRef: mobileThirdPanelCloseTimeoutRef,\n onClosed: () => {\n const closedCategoryIndex =\n mobileActiveCategoryIndex;\n setMobileActiveCategoryIndex(null);\n\n clearTimeout(\n focusReturnToMobileCategoryTimeoutRef.current ??\n undefined,\n );\n focusReturnToMobileCategoryTimeoutRef.current =\n setTimeout(() => {\n mobileLevelTwoCategoryButtonRefs.current[\n closedCategoryIndex as number\n ]?.focus();\n focusReturnToMobileCategoryTimeoutRef.current =\n null;\n }, 0);\n },\n })\n }\n >\n <ChevronRight\n className={styles['main-navigation__mobile-back-icon']}\n />\n <span\n className={styles['main-navigation__mobile-back-label']}\n >\n {selectedColumn.heading}\n </span>\n </button>\n <ul className={styles['main-navigation__mobile-level-3-list']}>\n {selectedColumn.links.map((link, index) => (\n <li\n key={`${selectedColumn.heading}-${index}`}\n className={\n styles['main-navigation__mobile-level-3-item']\n }\n >\n {renderNavigationLink({\n link,\n className: cn(\n styles[\n 'main-navigation__mobile-level-3-link'\n ],\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n ),\n children: link.label,\n })}\n </li>\n ))}\n </ul>\n </>\n )}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={panelClassName} aria-label={openItem.label}>\n <div className={styles['main-navigation__panel-content']}>\n <div className={styles['main-navigation__panel-main']}>\n <div className={styles['main-navigation__panel-columns']}>\n {panelColumns.map((column, columnIndex) => (\n <section\n key={`column-${columnIndex}`}\n className={cn(\n styles['main-navigation__panel-column'],\n column.highlighted &&\n styles['main-navigation__panel-column--highlighted'],\n column.mobileOnly &&\n styles['main-navigation__panel-column--mobile-only'],\n column.desktopOnly &&\n styles['main-navigation__panel-column--desktop-only'],\n !hasFeatureLinks &&\n columnIndex === lastDesktopVisibleColumnIndex &&\n styles['main-navigation__panel-column--last'],\n )}\n >\n <h2 className={styles['main-navigation__panel-heading']}>\n {getColumnHeading(column.heading, column.overflow)}\n </h2>\n <ul className={styles['main-navigation__panel-list']}>\n {column.links.map((link, index) => {\n const isInCurrentPage = isLinkInCurrentPage(\n link,\n currentPathname,\n );\n\n return (\n <li\n key={`${column.heading}-${index}`}\n className={\n styles['main-navigation__panel-list-item']\n }\n >\n {renderNavigationLink({\n link,\n className: cn(\n styles['main-navigation__panel-link'],\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n textDecorationStyles.underlineLinkOnHover,\n isInCurrentPage &&\n styles[\n 'main-navigation__panel-link--current'\n ],\n ),\n ariaCurrent: isInCurrentPage\n ? 'page'\n : undefined,\n children: link.label,\n })}\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n </div>\n <aside\n className={cn(\n elevationStyles.elevationHigh,\n styles['main-navigation__panel-column'],\n styles['main-navigation__feature-links'],\n styles['main-navigation__panel-column--last'],\n openPanel.featureLinksHighlighted &&\n styles['main-navigation__panel-column--highlighted'],\n !hasFeatureLinks && styles['main-navigation__feature-links--empty'],\n )}\n >\n <ul className={styles['main-navigation__feature-list']}>\n {(openPanel.featureLinks ?? []).map((link, index) => {\n const href = toNavigableHref(link.href);\n const isExternalFeatureLink = isExternalTarget(link.target);\n\n return (\n <li\n key={`feature-${index}`}\n className={styles['main-navigation__panel-list-item']}\n >\n {renderNavigationLink({\n link: { ...link, href },\n className: cn(\n styles['main-navigation__feature-link'],\n textDecorationStyles.underlineLinkOnHover,\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n ),\n children: (\n <>\n {isExternalFeatureLink ? (\n <Open\n className={\n styles[\n 'main-navigation__feature-link-icon'\n ]\n }\n />\n ) : (\n <ArrowRight\n className={\n styles[\n 'main-navigation__feature-link-icon'\n ]\n }\n />\n )}\n <span\n className={\n styles[\n 'main-navigation__feature-link-label'\n ]\n }\n >\n {link.label}\n </span>\n {isExternalFeatureLink &&\n externalLinkAriaLabel && (\n <span\n className={\n styles[\n 'main-navigation__sr-only'\n ]\n }\n >\n {` (${externalLinkAriaLabel})`}\n </span>\n )}\n </>\n ),\n })}\n </li>\n );\n })}\n </ul>\n </aside>\n </div>\n </div>\n );\n };\n\n const renderPrimaryList = () => (\n <ul className={styles['main-navigation__primary-list']}>\n {items.map((item, index) => {\n const hasPanel = item.panel != null;\n const isOpen = openTopLevelItemIndex === index;\n const isCurrentPathItem = isItemInCurrentPath(item, currentPathname);\n\n return (\n <li key={item.label} className={styles['main-navigation__item']}>\n {hasPanel ? (\n <button\n ref={(node) => {\n desktopPanelTriggerButtonRefs.current[index] = node;\n }}\n type=\"button\"\n className={cn(\n styles['main-navigation__item-toggle'],\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n isCurrentPathItem &&\n styles['main-navigation__item-toggle--current'],\n isOpen && styles['main-navigation__item-toggle--open'],\n )}\n aria-expanded={isOpen}\n onClick={() => toggleTopLevelItem(index)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && !isDesktopViewport()) {\n focusMobilePanelBackOnOpenRef.current = true;\n }\n }}\n >\n <span className={styles['main-navigation__item-label']}>\n {item.label}\n </span>\n <ChevronRight\n className={styles['main-navigation__top-level-toggle-icon']}\n />\n </button>\n ) : (\n renderNavigationLink({\n link: item,\n className: cn(\n styles['main-navigation__item-link'],\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n isCurrentPathItem &&\n styles['main-navigation__item-link--current'],\n ),\n ariaCurrent: isCurrentPathItem ? 'page' : undefined,\n children: (\n <span className={styles['main-navigation__item-label']}>\n {item.label}\n </span>\n ),\n })\n )}\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <header\n ref={setHeaderRef}\n className={cn(\n styles['main-navigation'],\n isDesktopHeaderOpen && styles['main-navigation--open'],\n mobileMenuOpen && styles['main-navigation--menu-open'],\n isMobileMenuClosing && styles['main-navigation--menu-closing'],\n showPageOverlay && styles['main-navigation--overlay'],\n showPageOverlay && overlayStyles.overlayStrong,\n isOverlayClosingOut && overlayStyles.overlayClosing,\n className,\n )}\n {...props}\n onKeyDown={(event) => {\n if (event.key === 'Tab' && mobileMenuOpen && !isDesktopViewport()) {\n const focusableElements = getMobileFocusableElements();\n\n if (focusableElements.length > 0) {\n event.preventDefault();\n\n // Keep Tab traversal inside the active mobile navigation context.\n const currentIndex = focusableElements.indexOf(\n document.activeElement as HTMLElement,\n );\n const direction = event.shiftKey ? -1 : 1;\n const nextIndex =\n currentIndex === -1\n ? event.shiftKey\n ? focusableElements.length - 1\n : 0\n : (currentIndex + direction + focusableElements.length) %\n focusableElements.length;\n\n focusableElements[nextIndex]?.focus();\n }\n return;\n }\n\n if (event.key === 'Tab' && openTopLevelItemIndex != null && isDesktopViewport()) {\n const focusLoopElements = getDesktopFocusLoopElements(openTopLevelItemIndex);\n\n if (focusLoopElements.length > 0) {\n event.preventDefault();\n\n // Keep Tab traversal between the trigger and desktop panel controls.\n const currentIndex = focusLoopElements.indexOf(\n document.activeElement as HTMLElement,\n );\n const direction = event.shiftKey ? -1 : 1;\n const nextIndex =\n currentIndex === -1\n ? event.shiftKey\n ? focusLoopElements.length - 1\n : 0\n : (currentIndex + direction + focusLoopElements.length) %\n focusLoopElements.length;\n\n focusLoopElements[nextIndex]?.focus();\n return;\n }\n }\n\n if (event.key === 'Escape') {\n closeMenus();\n }\n\n props.onKeyDown?.(event);\n }}\n >\n <nav\n aria-label={organizationStripAriaLabel}\n className={styles['main-navigation__organization-strip']}\n >\n {organizations.map((organization) => (\n <Fragment key={organization.label}>\n {renderNavigationLink({\n link: organization,\n className: cn(\n styles['main-navigation__organization-link'],\n focusStyles.focusable,\n organization.current &&\n styles['main-navigation__organization-link--current'],\n ),\n ariaCurrent: organization.current ? 'page' : undefined,\n children: organization.label,\n })}\n </Fragment>\n ))}\n </nav>\n\n <div className={styles['main-navigation__navbar']}>\n {renderUtilityLink({\n href: toNavigableHref(logoHref),\n className: cn(\n styles['main-navigation__logo'],\n focusStyles.focusable,\n focusStyles.focusableRadiusSm,\n ),\n 'aria-label': logoAriaLabel,\n children: <img src={defaultLogoSrc} alt=\"\" aria-hidden=\"true\" />,\n })}\n\n <nav\n ref={mobilePrimaryNavRef}\n aria-label={mobileMenuOpen ? mobilePrimaryNavigationAriaLabel : ariaLabel}\n data-open={mobileMenuOpen ? 'true' : 'false'}\n className={cn(\n styles['main-navigation__primary'],\n mobileMenuOpen && styles['main-navigation__primary--open'],\n )}\n >\n {renderPrimaryList()}\n {(mobileMenuOpen || isMobileMenuClosing) &&\n renderPanel(\n cn(\n styles['main-navigation__panel'],\n styles['main-navigation__panel--mobile'],\n ),\n true,\n )}\n </nav>\n\n <div className={styles['main-navigation__icon-nav']}>\n {showLanguageSelector && (\n <button\n type=\"button\"\n className={cn(\n styles['main-navigation__icon-nav-item'],\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n )}\n aria-label={languageSelectorLabel}\n onClick={onLanguageSelectorClick}\n >\n <Globe />\n <span className={styles['main-navigation__icon-nav-label']}>\n {languageSelectorLabel}\n </span>\n </button>\n )}\n {showSearch && (\n <button\n type=\"button\"\n className={cn(\n styles['main-navigation__icon-nav-item'],\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n )}\n aria-label={searchLabel}\n onClick={onSearchClick}\n >\n <Search />\n <span className={styles['main-navigation__icon-nav-label']}>\n {searchLabel}\n </span>\n </button>\n )}\n {showCart && (\n <button\n type=\"button\"\n className={cn(\n styles['main-navigation__icon-nav-item'],\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n )}\n aria-label={cartAccessibleLabel}\n onClick={onCartClick}\n >\n <Cart />\n <span className={styles['main-navigation__icon-nav-label']}>\n {cartLabel}\n </span>\n {cartCounter != null && (\n <span\n aria-hidden=\"true\"\n className={styles['main-navigation__icon-nav-item--counter']}\n >\n {cartCounter}\n </span>\n )}\n </button>\n )}\n <Button\n href={toNavigableHref(loginHref)}\n size=\"small\"\n renderLink={renderUtilityLink}\n >\n {loginLabel}\n </Button>\n </div>\n\n <button\n ref={mobileMenuToggleButtonRef}\n type=\"button\"\n className={cn(\n styles['main-navigation__menu-toggle'],\n mobileMenuOpen && styles['main-navigation__menu-toggle--open'],\n focusStyles.focusableInset,\n focusStyles.focusableRadiusSm,\n )}\n aria-label={mobileMenuOpen ? mobileMenuCloseAriaLabel : mobileMenuOpenAriaLabel}\n aria-expanded={mobileMenuOpen}\n onClick={toggleMobileMenu}\n >\n {mobileMenuOpen ? <Close size=\"32px\" /> : <Menu size=\"32px\" />}\n </button>\n </div>\n\n {!mobileMenuOpen &&\n renderPanel(\n cn(styles['main-navigation__panel'], styles['main-navigation__panel--desktop']),\n )}\n </header>\n );\n};\n"],"names":["jsx","useState","useRef","useCallback","assignRef","useEffect","isMobileViewportByEnvironment","isMobileIosDeviceByEnvironment","isDesktopViewport","isDesktopViewportByEnvironment","styles","className","toNavigableHref","getLinkRel","getLinkTarget","isExternalLink","props","cn","jsxs","focusStyles","ChevronRight","isExternalTarget","Open","ArrowRight","IconButton","Fragment","isLinkInCurrentPage","textDecorationStyles","elevationStyles","isItemInCurrentPath","overlayStyles","Globe","Search","Cart","Button","Close","Menu"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MainNavigation.cjs","sources":["../../../src/components/MainNavigation/MainNavigation.tsx"],"sourcesContent":["import { Fragment, useCallback, useEffect, useId, useRef, useState } from 'react';\nimport type { JSX } from 'react';\nimport { ArrowRight, Cart, ChevronRight, Close, Globe, Open, Search, Menu } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport focusStyles from '../../styles/utils/focus.module.css';\nimport overlayStyles from '../../styles/utils/overlay.module.css';\nimport elevationStyles from '../../styles/utils/elevation.module.css';\nimport textDecorationStyles from '../../styles/utils/text-decoration.module.css';\nimport { Button } from '../Button';\nimport { Drawer } from '../Drawer';\nimport { IconButton } from '../IconButton';\nimport styles from './MainNavigation.module.css';\nimport {\n assignRef,\n getLanguageToggleAnnouncements,\n getLinkRel,\n getLinkTarget,\n isDesktopViewportByEnvironment,\n isExternalLink,\n isExternalTarget,\n isItemInCurrentPath,\n isLinkInCurrentPage,\n isMobileIosDeviceByEnvironment,\n isMobileViewportByEnvironment,\n languageLinkAriaLabels,\n toNavigableHref,\n} from './MainNavigation.utils';\nimport type {\n MainNavigationItem,\n MainNavigationLink,\n MainNavigationRenderLanguageLink,\n MainNavigationRenderLink,\n MainNavigationOrganizationLink,\n MainNavigationProps,\n MainNavigationRenderLinkProps,\n} from './MainNavigation.types';\n\nconst defaultOrganizations: readonly MainNavigationOrganizationLink[] = [];\nconst defaultItems: readonly MainNavigationItem[] = [];\nconst defaultLogoSvg =\n '<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_6509_143)\"><g clip-path=\"url(#clip1_6509_143)\"><rect width=\"40\" height=\"40\" fill=\"white\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M-0.0314789 40V0H40.0019V40H-0.0314789ZM9.33519 27.05C11.6685 27.05 13.5685 25.15 13.5685 22.7667V17.1667C13.5685 14.7833 11.6685 12.8833 9.33519 12.8833H5.10186V27.05H9.33519ZM21.6352 27.05H24.1685V17.1167C24.1685 14.7833 22.2685 12.8833 19.9352 12.8833H15.7019V27.05H18.1852V15.4167H19.9352C20.9019 15.4167 21.6352 16.15 21.6352 17.1167V27.05ZM32.4019 27.05H34.9352V17.05C34.9352 14.7167 33.0352 12.8167 30.7019 12.8167H30.6519C28.3185 12.8167 26.4185 14.7167 26.4185 17.05V27.0667H28.9519V22H32.4019V27.05ZM30.65 15.3333H30.7C31.6167 15.3333 32.4 16.1 32.4 17.0333V19.6167H28.95V17.0333C28.95 16.1167 29.6833 15.3333 30.65 15.3333ZM7.56667 15.4333H9.36667C10.3 15.4333 11.0833 16.15 11.0667 17.1333V22.8333C11.0667 23.75 10.3 24.5333 9.36667 24.5333H7.56667V15.4333Z\" fill=\"#FF007D\"/></g></g><defs><clipPath id=\"clip0_6509_143\"><rect width=\"40\" height=\"40\" fill=\"white\"/></clipPath><clipPath id=\"clip1_6509_143\"><rect width=\"40\" height=\"40\" fill=\"white\"/></clipPath></defs></svg>';\nconst defaultLogoSrc = `data:image/svg+xml,${encodeURIComponent(defaultLogoSvg)}`;\nconst mobilePanelAnimationDurationMs = 200;\nconst mobileBodyScrollLockClass = 'dds-un-scrollable';\nconst defaultOverflowCategoryLabel = 'Muut kategoriat';\nconst desktopMinWidthMediaQuery = '(min-width: 1024px)';\n\nconst defaultRenderLink: MainNavigationRenderLink = (props) => <a {...props} />;\nconst defaultRenderLanguageLink: MainNavigationRenderLanguageLink = (props) => <a {...props} />;\n\nexport const MainNavigation = ({\n organizations = defaultOrganizations,\n items = defaultItems,\n loginLabel = 'Kirjaudu',\n logoHref = '/',\n languages,\n renderLanguageLink = defaultRenderLanguageLink,\n searchLabel = 'Haku',\n cartLabel = 'Ostoskori',\n cartCounter,\n cartCounterLabel = 'tuotetta ostoskorissa',\n defaultCartOpen = false,\n cartOpen,\n onCartOpenChange,\n defaultOpenDropdown,\n onSearchOpenChange,\n onLanguageOpenChange,\n onLoginOpenChange,\n searchDropdownContent,\n loginDropdownContent,\n cartContent,\n mobileMenuOpenAriaLabel = 'Avaa päävalikko',\n mobileMenuCloseAriaLabel = 'Sulje päävalikko',\n organizationStripAriaLabel = 'Sivustot',\n logoAriaLabel = 'Siirry etusivulle',\n mobilePrimaryNavigationAriaLabel = 'Päävalikko',\n externalLinkAriaLabel = 'avautuu uuteen välilehteen',\n defaultMobileMenuOpen = false,\n defaultOpenItemIndex = null,\n currentPathname,\n overflowCategoryLabel = defaultOverflowCategoryLabel,\n onMobileMenuToggle,\n onDesktopItemToggle,\n renderLink = defaultRenderLink,\n className,\n 'aria-label': ariaLabel = 'Päänavigaatio',\n ref,\n ...props\n}: MainNavigationProps) => {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(defaultMobileMenuOpen);\n const [isMobileMenuClosing, setIsMobileMenuClosing] = useState(false);\n const [openTopLevelItemIndex, setOpenTopLevelItemIndex] = useState<number | null>(\n defaultOpenItemIndex,\n );\n const [isHeaderOpen, setIsHeaderOpen] = useState(true);\n const [mobileActiveCategoryIndex, setMobileActiveCategoryIndex] = useState<number | null>(null);\n const [internalCartOpen, setInternalCartOpen] = useState(defaultCartOpen);\n const isCartControlled = cartOpen !== undefined;\n const isCartOpen = cartOpen ?? internalCartOpen;\n // Any initially open navigation surface (sidecart, mobile menu, or mega panel) wins over a\n // default-open utility dropdown so only one surface starts open.\n const hasInitialNavigationSurface =\n (cartOpen ?? defaultCartOpen) ||\n defaultMobileMenuOpen ||\n (defaultOpenItemIndex != null && items[defaultOpenItemIndex]?.panel != null);\n const [openUtilityDropdown, setOpenUtilityDropdown] = useState<\n 'search' | 'language' | 'login' | null\n >(hasInitialNavigationSurface ? null : (defaultOpenDropdown ?? null));\n // Tracks the open utility dropdown synchronously so a close invoked from an effect (e.g.\n // StrictMode replaying setup before the state re-render) notifies the consumer exactly once.\n const openUtilityDropdownRef = useRef(openUtilityDropdown);\n const searchDropdownId = useId();\n const languageDropdownId = useId();\n const loginDropdownId = useId();\n const [isMobileSecondPanelClosing, setIsMobileSecondPanelClosing] = useState(false);\n const [isMobileThirdPanelClosing, setIsMobileThirdPanelClosing] = useState(false);\n const mobileSecondPanelCloseTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const mobileThirdPanelCloseTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const mobileMenuCloseResetTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const focusMobileSecondPanelTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const focusMobileThirdPanelTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const focusReturnToMobileTopLevelItemTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n const resetMobileThirdPanelScrollTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n const headerElementRef = useRef<HTMLElement | null>(null);\n const desktopPanelTriggerButtonRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const searchTriggerRef = useRef<HTMLButtonElement | null>(null);\n const languageTriggerRef = useRef<HTMLButtonElement | null>(null);\n const loginTriggerRef = useRef<HTMLButtonElement | null>(null);\n const mobilePrimaryNavRef = useRef<HTMLElement | null>(null);\n const mobileMenuToggleButtonRef = useRef<HTMLButtonElement | null>(null);\n const mobileModalPanelRef = useRef<HTMLDivElement | null>(null);\n const mobileThirdPanelRef = useRef<HTMLDivElement | null>(null);\n const mobilePanelBackButtonRef = useRef<HTMLButtonElement | null>(null);\n const mobileThirdPanelBackButtonRef = useRef<HTMLButtonElement | null>(null);\n const mobileLevelTwoCategoryButtonRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const focusMobilePanelBackOnOpenRef = useRef(false);\n const focusMobileThirdPanelBackOnOpenRef = useRef(false);\n const lastInteractionWasKeyboardRef = useRef(false);\n const focusReturnToMobileCategoryTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n // Synchronous source of truth for whether the mobile menu / desktop panel is open. Every open\n // and close path keeps these in step with state; close paths read and clear them before\n // notifying so a close invoked from an effect stays idempotent when StrictMode replays setup.\n const mobileMenuOpenRef = useRef(mobileMenuOpen);\n const openTopLevelItemIndexRef = useRef(openTopLevelItemIndex);\n // Records the viewport mode already reconciled so StrictMode's effect-setup replay (and any\n // redundant re-subscribe) does not fire the toggle callbacks again for the same transition.\n const lastAppliedViewportModeRef = useRef<'desktop' | 'mobile' | null>(null);\n // Synchronous mirror of the uncontrolled sidecart so its stale-content close notifies exactly\n // once even when StrictMode replays the effect setup.\n const internalCartOpenRef = useRef(internalCartOpen);\n\n const setHeaderRef = useCallback(\n (node: HTMLElement | null) => {\n headerElementRef.current = node;\n assignRef(ref, node);\n },\n [ref],\n );\n\n useEffect(() => {\n return () => {\n if (mobileSecondPanelCloseTimeoutRef.current != null) {\n clearTimeout(mobileSecondPanelCloseTimeoutRef.current);\n }\n\n if (mobileThirdPanelCloseTimeoutRef.current != null) {\n clearTimeout(mobileThirdPanelCloseTimeoutRef.current);\n }\n\n if (focusMobileSecondPanelTimeoutRef.current != null) {\n clearTimeout(focusMobileSecondPanelTimeoutRef.current);\n }\n\n if (focusMobileThirdPanelTimeoutRef.current != null) {\n clearTimeout(focusMobileThirdPanelTimeoutRef.current);\n }\n\n clearTimeout(focusReturnToMobileTopLevelItemTimeoutRef.current ?? undefined);\n\n if (resetMobileThirdPanelScrollTimeoutRef.current != null) {\n clearTimeout(resetMobileThirdPanelScrollTimeoutRef.current);\n }\n\n if (mobileMenuCloseResetTimeoutRef.current != null) {\n clearTimeout(mobileMenuCloseResetTimeoutRef.current);\n }\n\n if (focusReturnToMobileCategoryTimeoutRef.current != null) {\n clearTimeout(focusReturnToMobileCategoryTimeoutRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n // Header ref is assigned on commit; this effect keeps header visibility in sync with scroll.\n const headerElement = headerElementRef.current as HTMLElement;\n\n const desktopQuery = window.matchMedia(desktopMinWidthMediaQuery);\n let previousScrollY = window.pageYOffset;\n let headerHeight =\n parseFloat(window.getComputedStyle(headerElement).height.replace('px', '')) ||\n headerElement.offsetHeight;\n\n const openHeader = () => {\n setIsHeaderOpen(true);\n };\n\n const closeHeader = () => {\n setIsHeaderOpen(false);\n };\n\n // Emulate :focus-visible: only keyboard focus pins the header, so pointer-focused controls still hide on scroll.\n const headerHasVisibleFocus = () => {\n const active = document.activeElement;\n return (\n lastInteractionWasKeyboardRef.current &&\n active instanceof HTMLElement &&\n headerElement.contains(active)\n );\n };\n\n const handleScroll = () => {\n const currentScrollY = window.pageYOffset;\n\n // Keep the header pinned so an open dropdown trigger or focused control cannot scroll away.\n if (\n mobileMenuOpen ||\n openTopLevelItemIndex != null ||\n openUtilityDropdown != null ||\n headerHasVisibleFocus()\n ) {\n openHeader();\n previousScrollY = currentScrollY;\n return;\n }\n\n if (currentScrollY <= headerHeight) {\n openHeader();\n } else if (currentScrollY > previousScrollY) {\n closeHeader();\n } else if (currentScrollY < previousScrollY) {\n openHeader();\n }\n\n previousScrollY = currentScrollY;\n };\n\n const handleFocusIn = () => {\n if (headerHasVisibleFocus()) {\n openHeader();\n }\n };\n\n const handleViewportChange = () => {\n openHeader();\n previousScrollY = window.pageYOffset;\n headerHeight =\n parseFloat(window.getComputedStyle(headerElement).height.replace('px', '')) ||\n headerElement.offsetHeight;\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n window.addEventListener('resize', handleViewportChange);\n document.addEventListener('focusin', handleFocusIn);\n\n desktopQuery.addEventListener('change', handleViewportChange);\n\n handleScroll();\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('resize', handleViewportChange);\n document.removeEventListener('focusin', handleFocusIn);\n\n desktopQuery.removeEventListener('change', handleViewportChange);\n };\n }, [mobileMenuOpen, openTopLevelItemIndex, openUtilityDropdown]);\n\n // Track input modality once so headerHasVisibleFocus can emulate :focus-visible.\n useEffect(() => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const handleKeyDown = () => {\n lastInteractionWasKeyboardRef.current = true;\n };\n\n const handlePointerDown = () => {\n lastInteractionWasKeyboardRef.current = false;\n };\n\n document.addEventListener('keydown', handleKeyDown, true);\n document.addEventListener('pointerdown', handlePointerDown, true);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, true);\n document.removeEventListener('pointerdown', handlePointerDown, true);\n };\n }, []);\n\n useEffect(() => {\n const browserWindow = globalThis.window;\n const browserDocument = globalThis.document;\n\n if (!mobileMenuOpen || browserWindow == null || browserDocument == null) {\n return;\n }\n\n const isMobileViewport = isMobileViewportByEnvironment(browserWindow);\n\n if (!isMobileViewport) {\n return;\n }\n\n const body = browserDocument.body;\n\n if (isMobileIosDeviceByEnvironment(browserWindow, globalThis.navigator)) {\n const scrollY = browserWindow.pageYOffset;\n\n body.style.position = 'fixed';\n body.style.top = `-${scrollY}px`;\n body.style.width = '100%';\n\n return () => {\n const top = body.style.top;\n\n body.style.position = '';\n body.style.top = '';\n body.style.width = '';\n\n if (top !== '') {\n browserWindow.scrollTo(0, Number.parseInt(top, 10) * -1);\n }\n };\n }\n\n body.classList.add(mobileBodyScrollLockClass);\n\n return () => {\n body.classList.remove(mobileBodyScrollLockClass);\n };\n }, [mobileMenuOpen]);\n\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const desktopQuery = window.matchMedia(desktopMinWidthMediaQuery);\n\n const applyViewportModeChange = ({ matches: isDesktopViewport }: { matches: boolean }) => {\n // Keep mobile and desktop panel states mutually exclusive on breakpoint transitions.\n const viewportMode = isDesktopViewport ? 'desktop' : 'mobile';\n\n // Real `change` events always alternate modes; a repeat of the same mode means an\n // effect-setup replay (StrictMode) or redundant re-subscribe, so skip to stay idempotent.\n if (lastAppliedViewportModeRef.current === viewportMode) {\n return;\n }\n lastAppliedViewportModeRef.current = viewportMode;\n\n if (isDesktopViewport) {\n clearTimeout(mobileSecondPanelCloseTimeoutRef.current ?? undefined);\n mobileSecondPanelCloseTimeoutRef.current = null;\n\n clearTimeout(mobileThirdPanelCloseTimeoutRef.current ?? undefined);\n mobileThirdPanelCloseTimeoutRef.current = null;\n\n clearTimeout(resetMobileThirdPanelScrollTimeoutRef.current ?? undefined);\n resetMobileThirdPanelScrollTimeoutRef.current = null;\n\n const wasMobileMenuOpen = mobileMenuOpenRef.current;\n mobileMenuOpenRef.current = false;\n if (wasMobileMenuOpen) {\n onMobileMenuToggle?.(false);\n }\n setMobileMenuOpen(false);\n setMobileActiveCategoryIndex(null);\n setIsMobileSecondPanelClosing(false);\n setIsMobileThirdPanelClosing(false);\n return;\n }\n\n const hadOpenDesktopItem = openTopLevelItemIndexRef.current !== null;\n openTopLevelItemIndexRef.current = null;\n if (hadOpenDesktopItem) {\n onDesktopItemToggle?.(null);\n }\n setOpenTopLevelItemIndex(null);\n };\n\n applyViewportModeChange(desktopQuery);\n\n desktopQuery.addEventListener('change', applyViewportModeChange);\n\n return () => {\n desktopQuery.removeEventListener('change', applyViewportModeChange);\n };\n }, [onDesktopItemToggle, onMobileMenuToggle]);\n\n const resetMobilePanelState = useCallback(() => {\n openTopLevelItemIndexRef.current = null;\n setOpenTopLevelItemIndex(null);\n setMobileActiveCategoryIndex(null);\n setIsMobileSecondPanelClosing(false);\n setIsMobileThirdPanelClosing(false);\n }, []);\n\n const closeMobileMenu = useCallback(() => {\n clearTimeout(mobileSecondPanelCloseTimeoutRef.current ?? undefined);\n mobileSecondPanelCloseTimeoutRef.current = null;\n\n clearTimeout(mobileThirdPanelCloseTimeoutRef.current ?? undefined);\n mobileThirdPanelCloseTimeoutRef.current = null;\n\n clearTimeout(resetMobileThirdPanelScrollTimeoutRef.current ?? undefined);\n resetMobileThirdPanelScrollTimeoutRef.current = null;\n\n if (!mobileMenuOpen && openTopLevelItemIndex === null) {\n return;\n }\n\n const shouldAnimateMobileClose = mobileMenuOpen;\n\n // Notify from the synchronous refs, cleared first, so a StrictMode effect-setup replay (e.g.\n // via the sidecart reconciliation effect) does not fire the callbacks twice. The state guard\n // above still drives this callback's identity and effect re-subscription.\n const wasMobileMenuOpen = mobileMenuOpenRef.current;\n const openDesktopItemIndex = openTopLevelItemIndexRef.current;\n mobileMenuOpenRef.current = false;\n openTopLevelItemIndexRef.current = null;\n if (wasMobileMenuOpen) {\n onMobileMenuToggle?.(false);\n }\n if (openDesktopItemIndex !== null) {\n onDesktopItemToggle?.(null);\n }\n\n clearTimeout(mobileMenuCloseResetTimeoutRef.current ?? undefined);\n setIsMobileMenuClosing(shouldAnimateMobileClose);\n setMobileMenuOpen(false);\n setOpenTopLevelItemIndex(null);\n\n if (shouldAnimateMobileClose) {\n mobileMenuCloseResetTimeoutRef.current = setTimeout(() => {\n resetMobilePanelState();\n setIsMobileMenuClosing(false);\n mobileMenuCloseResetTimeoutRef.current = null;\n }, mobilePanelAnimationDurationMs);\n return;\n }\n\n resetMobilePanelState();\n setIsMobileMenuClosing(false);\n }, [\n mobileMenuOpen,\n onDesktopItemToggle,\n onMobileMenuToggle,\n openTopLevelItemIndex,\n resetMobilePanelState,\n ]);\n\n const toggleMobileMenu = () => {\n if (mobileMenuOpen) {\n closeMobileMenu();\n return;\n }\n\n closeUtilityDropdown();\n mobileMenuOpenRef.current = true;\n setMobileMenuOpen(true);\n setIsMobileMenuClosing(false);\n onMobileMenuToggle?.(true);\n };\n\n const toggleTopLevelItem = (index: number) => {\n closeUtilityDropdown();\n const next = openTopLevelItemIndex === index ? null : index;\n openTopLevelItemIndexRef.current = next;\n setOpenTopLevelItemIndex(next);\n setMobileActiveCategoryIndex(null);\n setIsMobileSecondPanelClosing(false);\n setIsMobileThirdPanelClosing(false);\n onDesktopItemToggle?.(next);\n };\n\n const isDesktopViewport = useCallback(() => {\n return isDesktopViewportByEnvironment(globalThis.window);\n }, []);\n\n const isFocusable = useCallback((element: HTMLElement) => {\n /* v8 ignore next -- defensive filter branch */\n if (element.tabIndex < 0 || element.hasAttribute('disabled')) {\n return false;\n }\n\n /* v8 ignore next -- defensive filter branch */\n if (element.getAttribute('aria-hidden') === 'true') {\n return false;\n }\n\n /* v8 ignore next -- defensive filter branch */\n if (element.closest('[hidden]') != null) {\n return false;\n }\n\n let currentElement: HTMLElement | null = element;\n\n while (currentElement != null) {\n const computedStyle = window.getComputedStyle(currentElement);\n\n /* v8 ignore next -- defensive filter branch */\n if (computedStyle.display === 'none' || computedStyle.visibility === 'hidden') {\n return false;\n }\n\n currentElement = currentElement.parentElement;\n }\n\n return true;\n }, []);\n\n const getFocusableElements = useCallback(\n (container: ParentNode | null, selector: string) =>\n /* v8 ignore next -- defensive null guard for transient panel refs */\n container == null\n ? []\n : Array.from(container.querySelectorAll<HTMLElement>(selector)).filter(isFocusable),\n [isFocusable],\n );\n\n const getDesktopPanelInteractiveElements = useCallback(() => {\n return getFocusableElements(\n headerElementRef.current,\n `.${styles['main-navigation__panel--desktop']} a[href], .${styles['main-navigation__panel--desktop']} button:not([disabled]), .${styles['main-navigation__panel--desktop']} [tabindex]:not([tabindex=\"-1\"])`,\n );\n }, [getFocusableElements]);\n\n const getDesktopFocusLoopElements = useCallback(\n (openDesktopItemIndex: number) => {\n const focusLoopElements = new Set<HTMLElement>();\n const triggerButton = desktopPanelTriggerButtonRefs.current[openDesktopItemIndex];\n\n if (triggerButton != null && isFocusable(triggerButton)) {\n focusLoopElements.add(triggerButton);\n }\n\n getDesktopPanelInteractiveElements().forEach((element) => {\n focusLoopElements.add(element);\n });\n\n return Array.from(focusLoopElements);\n },\n [getDesktopPanelInteractiveElements, isFocusable],\n );\n\n const getUtilityDropdownFocusLoopElements = useCallback(\n (kind: 'search' | 'language' | 'login') => {\n const focusLoopElements = new Set<HTMLElement>();\n const triggerButton =\n kind === 'search'\n ? searchTriggerRef.current\n : kind === 'language'\n ? languageTriggerRef.current\n : loginTriggerRef.current;\n\n if (triggerButton != null && isFocusable(triggerButton)) {\n focusLoopElements.add(triggerButton);\n }\n\n getFocusableElements(\n headerElementRef.current,\n `.${styles['main-navigation__dropdown']} a[href], .${styles['main-navigation__dropdown']} button:not([disabled]), .${styles['main-navigation__dropdown']} input:not([disabled]), .${styles['main-navigation__dropdown']} select:not([disabled]), .${styles['main-navigation__dropdown']} textarea:not([disabled]), .${styles['main-navigation__dropdown']} [tabindex]:not([tabindex=\"-1\"])`,\n ).forEach((element) => {\n focusLoopElements.add(element);\n });\n\n return Array.from(focusLoopElements);\n },\n [getFocusableElements, isFocusable],\n );\n\n const getMobileFocusableElements = useCallback(() => {\n const focusableElements: HTMLElement[] = [];\n const addFocusableElements = (elements: readonly HTMLElement[]) => {\n focusableElements.push(...elements);\n };\n\n if (\n mobileMenuToggleButtonRef.current != null &&\n isFocusable(mobileMenuToggleButtonRef.current)\n ) {\n focusableElements.push(mobileMenuToggleButtonRef.current);\n }\n\n if (openTopLevelItemIndex == null) {\n addFocusableElements(\n getFocusableElements(\n mobilePrimaryNavRef.current,\n `.${styles['main-navigation__primary-list']} .${styles['main-navigation__item-toggle']}, .${styles['main-navigation__primary-list']} .${styles['main-navigation__item-link']}`,\n ),\n );\n return Array.from(new Set(focusableElements));\n }\n\n if (mobileActiveCategoryIndex == null) {\n addFocusableElements(\n getFocusableElements(\n mobileModalPanelRef.current,\n `.${styles['main-navigation__mobile-back-item']}, .${styles['main-navigation__mobile-feature-link']}, .${styles['main-navigation__mobile-level-2-category-button']}`,\n ),\n );\n return Array.from(new Set(focusableElements));\n }\n\n addFocusableElements(\n getFocusableElements(\n mobileThirdPanelRef.current,\n `.${styles['main-navigation__mobile-back-item']}, .${styles['main-navigation__mobile-level-3-link']}`,\n ),\n );\n\n return Array.from(new Set(focusableElements));\n }, [getFocusableElements, isFocusable, mobileActiveCategoryIndex, openTopLevelItemIndex]);\n\n const openMobileCategoryPanel = useCallback((index: number) => {\n clearTimeout(resetMobileThirdPanelScrollTimeoutRef.current ?? undefined);\n setIsMobileThirdPanelClosing(false);\n setMobileActiveCategoryIndex(index);\n resetMobileThirdPanelScrollTimeoutRef.current = setTimeout(() => {\n (mobileThirdPanelRef.current ?? { scrollTop: 0 }).scrollTop = 0;\n resetMobileThirdPanelScrollTimeoutRef.current = null;\n }, 0);\n }, []);\n\n const notifyUtilityOpenChange = useCallback(\n (kind: 'search' | 'language' | 'login', open: boolean) => {\n if (kind === 'search') {\n onSearchOpenChange?.(open);\n } else if (kind === 'language') {\n onLanguageOpenChange?.(open);\n } else {\n onLoginOpenChange?.(open);\n }\n },\n [onLanguageOpenChange, onLoginOpenChange, onSearchOpenChange],\n );\n\n const closeUtilityDropdown = useCallback(() => {\n // Read and clear the ref synchronously so a StrictMode effect-setup replay does not re-notify.\n const openDropdown = openUtilityDropdownRef.current;\n if (openDropdown != null) {\n openUtilityDropdownRef.current = null;\n notifyUtilityOpenChange(openDropdown, false);\n }\n setOpenUtilityDropdown(null);\n }, [notifyUtilityOpenChange]);\n\n const closeMenus = useCallback(() => {\n clearTimeout(mobileSecondPanelCloseTimeoutRef.current ?? undefined);\n mobileSecondPanelCloseTimeoutRef.current = null;\n\n clearTimeout(mobileThirdPanelCloseTimeoutRef.current ?? undefined);\n mobileThirdPanelCloseTimeoutRef.current = null;\n\n clearTimeout(focusMobileSecondPanelTimeoutRef.current ?? undefined);\n focusMobileSecondPanelTimeoutRef.current = null;\n\n clearTimeout(focusMobileThirdPanelTimeoutRef.current ?? undefined);\n focusMobileThirdPanelTimeoutRef.current = null;\n\n clearTimeout(resetMobileThirdPanelScrollTimeoutRef.current ?? undefined);\n resetMobileThirdPanelScrollTimeoutRef.current = null;\n\n clearTimeout(focusReturnToMobileTopLevelItemTimeoutRef.current ?? undefined);\n focusReturnToMobileTopLevelItemTimeoutRef.current = null;\n\n clearTimeout(focusReturnToMobileCategoryTimeoutRef.current ?? undefined);\n focusReturnToMobileCategoryTimeoutRef.current = null;\n // Read/clear the ref synchronously so a StrictMode effect-setup replay does not re-notify.\n const openDropdown = openUtilityDropdownRef.current;\n if (openDropdown != null) {\n openUtilityDropdownRef.current = null;\n notifyUtilityOpenChange(openDropdown, false);\n }\n setOpenUtilityDropdown(null);\n closeMobileMenu();\n }, [closeMobileMenu, notifyUtilityOpenChange]);\n\n const closeMobilePanel = useCallback(\n ({\n isClosing,\n setIsClosing,\n closeTimeoutRef,\n onClosed,\n }: {\n isClosing: boolean;\n setIsClosing: (isClosing: boolean) => void;\n closeTimeoutRef: { current: ReturnType<typeof setTimeout> | null };\n onClosed?: () => void;\n }) => {\n /* v8 ignore next -- rapid double click during closing animation */\n if (isClosing) {\n return;\n }\n\n clearTimeout(closeTimeoutRef.current ?? undefined);\n setIsClosing(true);\n closeTimeoutRef.current = setTimeout(() => {\n onClosed?.();\n setIsClosing(false);\n closeTimeoutRef.current = null;\n }, mobilePanelAnimationDurationMs);\n },\n [],\n );\n\n const renderNavigationLink = useCallback(\n ({\n link,\n className,\n children,\n ariaCurrent,\n onKeyDown,\n }: {\n link: MainNavigationLink;\n className: string;\n children: MainNavigationRenderLinkProps['children'];\n ariaCurrent?: 'page';\n onKeyDown?: MainNavigationRenderLinkProps['onKeyDown'];\n }) =>\n renderLink(\n {\n href: toNavigableHref(link.href),\n className,\n rel: getLinkRel(link.target),\n target: getLinkTarget(link.target),\n 'aria-current': ariaCurrent,\n onKeyDown,\n children,\n },\n { external: isExternalLink(link) },\n ),\n [renderLink],\n );\n\n const renderUtilityLink = useCallback(\n (props: MainNavigationRenderLinkProps) => renderLink(props, { external: false }),\n [renderLink],\n );\n\n const openItem = openTopLevelItemIndex != null ? items[openTopLevelItemIndex] : undefined;\n const openPanel = openItem?.panel;\n const isMobilePanelClosingOut = isMobileMenuClosing && !mobileMenuOpen;\n const isOverlayClosingOut = isMobilePanelClosingOut && openPanel == null;\n // A boolean ReactNode (e.g. from `condition && <Panel />`) renders nothing, so it must not show the control.\n const showSearch = searchDropdownContent != null && typeof searchDropdownContent !== 'boolean';\n const showLogin = loginDropdownContent != null && typeof loginDropdownContent !== 'boolean';\n const showCart = cartContent != null && typeof cartContent !== 'boolean';\n const cartAccessibleLabel =\n cartCounter != null ? `${cartLabel} ${cartCounter} ${cartCounterLabel}` : cartLabel;\n\n const currentLanguage = languages?.find((language) => language.current) ?? languages?.[0];\n const alternativeLanguages =\n currentLanguage != null\n ? (languages ?? []).filter((language) => language.code !== currentLanguage.code)\n : [];\n const showLanguage = currentLanguage != null && alternativeLanguages.length > 0;\n const languageAnnouncements =\n currentLanguage != null\n ? getLanguageToggleAnnouncements(\n (languages ?? []).map((language) => language.code),\n currentLanguage.code,\n )\n : [];\n\n // Ignore an open state whose control is not shown (invalid default, or content removed while open).\n const activeUtilityDropdown =\n openUtilityDropdown === 'search' && showSearch\n ? 'search'\n : openUtilityDropdown === 'language' && showLanguage\n ? 'language'\n : openUtilityDropdown === 'login' && showLogin\n ? 'login'\n : null;\n const isSearchOpen = activeUtilityDropdown === 'search';\n const isLanguageOpen = activeUtilityDropdown === 'language';\n const isLoginOpen = activeUtilityDropdown === 'login';\n\n const showPageOverlay =\n mobileMenuOpen ||\n openPanel != null ||\n isMobilePanelClosingOut ||\n activeUtilityDropdown != null;\n\n const toggleUtilityDropdown = (kind: 'search' | 'language' | 'login') => {\n const previous = openUtilityDropdown;\n const next = previous === kind ? null : kind;\n\n if (previous != null && previous !== next) {\n notifyUtilityOpenChange(previous, false);\n }\n\n if (next != null) {\n notifyUtilityOpenChange(next, true);\n // Keep the mega-menu / mobile menu and a utility dropdown mutually exclusive.\n closeMobileMenu();\n // A utility dropdown and the sidecart are mutually exclusive.\n if (isCartOpen) {\n if (!isCartControlled) {\n internalCartOpenRef.current = false;\n setInternalCartOpen(false);\n }\n onCartOpenChange?.(false);\n }\n }\n\n openUtilityDropdownRef.current = next;\n setOpenUtilityDropdown(next);\n };\n\n const handleLanguageClick = () => {\n toggleUtilityDropdown('language');\n };\n\n const handleSearchClick = () => {\n toggleUtilityDropdown('search');\n };\n\n const handleLoginClick = () => {\n toggleUtilityDropdown('login');\n };\n\n const handleCartClick = () => {\n const next = !isCartOpen;\n // Opening the sidecart closes every other navigation surface (dropdowns, mega-menu, mobile menu).\n if (next) {\n closeMenus();\n }\n if (!isCartControlled) {\n internalCartOpenRef.current = next;\n setInternalCartOpen(next);\n }\n onCartOpenChange?.(next);\n };\n\n const handleCartOpenChange = (open: boolean) => {\n if (!isCartControlled) {\n internalCartOpenRef.current = open;\n setInternalCartOpen(open);\n }\n onCartOpenChange?.(open);\n };\n\n // Keep the sidecart mutually exclusive with all navigation surfaces, including when a parent\n // opens it through the controlled `cartOpen` prop rather than the cart control.\n useEffect(() => {\n if (isCartOpen) {\n closeMenus();\n }\n }, [closeMenus, isCartOpen]);\n\n // Clear (and notify) a stale open dropdown when its control stops being shown, so it does not\n // silently reopen if the content is supplied again.\n useEffect(() => {\n if (openUtilityDropdown != null && activeUtilityDropdown == null) {\n closeUtilityDropdown();\n }\n }, [activeUtilityDropdown, closeUtilityDropdown, openUtilityDropdown]);\n\n // Clear (and notify) a stale uncontrolled sidecart when its content is removed, so it does not\n // silently reopen if the content is supplied again.\n useEffect(() => {\n if (!showCart && !isCartControlled && internalCartOpen && internalCartOpenRef.current) {\n // Clear the ref synchronously before notifying so a StrictMode replay stays idempotent.\n internalCartOpenRef.current = false;\n setInternalCartOpen(false);\n onCartOpenChange?.(false);\n }\n }, [internalCartOpen, isCartControlled, onCartOpenChange, showCart]);\n\n useEffect(() => {\n if (!showPageOverlay) {\n return;\n }\n\n const handleOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n\n if (headerElementRef.current?.contains(target)) {\n return;\n }\n\n closeMenus();\n };\n\n document.addEventListener('pointerdown', handleOutsidePointerDown, true);\n\n return () => {\n document.removeEventListener('pointerdown', handleOutsidePointerDown, true);\n };\n }, [closeMenus, showPageOverlay]);\n\n useEffect(() => {\n if (\n !focusMobilePanelBackOnOpenRef.current ||\n openTopLevelItemIndex == null ||\n mobileMenuOpen === false\n ) {\n return;\n }\n\n /* v8 ignore next -- guard for viewport flip during keyboard open */\n if (isDesktopViewport()) {\n focusMobilePanelBackOnOpenRef.current = false;\n return;\n }\n\n clearTimeout(focusMobileSecondPanelTimeoutRef.current ?? undefined);\n\n // Delay keyboard focus transfer so Enter animation timing matches pointer interactions.\n focusMobileSecondPanelTimeoutRef.current = setTimeout(() => {\n mobilePanelBackButtonRef.current?.focus();\n focusMobilePanelBackOnOpenRef.current = false;\n focusMobileSecondPanelTimeoutRef.current = null;\n }, mobilePanelAnimationDurationMs);\n }, [isDesktopViewport, mobileMenuOpen, openTopLevelItemIndex]);\n\n useEffect(() => {\n if (!focusMobileThirdPanelBackOnOpenRef.current || mobileActiveCategoryIndex == null) {\n return;\n }\n\n focusMobileThirdPanelBackOnOpenRef.current =\n focusMobileThirdPanelBackOnOpenRef.current && !isDesktopViewport();\n\n if (focusMobileThirdPanelBackOnOpenRef.current) {\n clearTimeout(focusMobileThirdPanelTimeoutRef.current ?? undefined);\n\n // Delay keyboard focus transfer so Enter animation timing matches pointer interactions.\n focusMobileThirdPanelTimeoutRef.current = setTimeout(() => {\n mobileThirdPanelBackButtonRef.current?.focus();\n focusMobileThirdPanelBackOnOpenRef.current = false;\n focusMobileThirdPanelTimeoutRef.current = null;\n }, mobilePanelAnimationDurationMs);\n }\n }, [isDesktopViewport, mobileActiveCategoryIndex]);\n\n useEffect(() => {\n if (!mobileMenuOpen || openTopLevelItemIndex == null || isDesktopViewport()) {\n return;\n }\n\n const mobileSecondPanel = mobileModalPanelRef.current;\n if (mobileSecondPanel == null) {\n return;\n }\n\n mobileSecondPanel.scrollTop = 0;\n }, [isDesktopViewport, mobileMenuOpen, openTopLevelItemIndex]);\n\n const renderPanel = (panelClassName: string, isMobileModal = false): JSX.Element | null => {\n if (openPanel == null || openItem == null) {\n return null;\n }\n\n const hasFeatureLinks = openPanel.featureLinks != null && openPanel.featureLinks.length > 0;\n const panelColumns = openPanel.columns ?? [];\n const lastDesktopVisibleColumnIndex = panelColumns.reduce((lastIndex, column, index) => {\n /* v8 ignore next -- branch only hit with mobile-only columns in desktop panel data */\n if (column.mobileOnly) {\n return lastIndex;\n }\n\n return index;\n }, -1);\n const mobilePanelColumns = panelColumns.filter((column) => !column.desktopOnly);\n const getColumnHeading = (heading: string, isOverflow?: boolean) => {\n if (!isOverflow) {\n return heading;\n }\n\n /* v8 ignore next -- branch only hit by synthetic empty overflow heading */\n return heading.trim() === '' ? overflowCategoryLabel : heading;\n };\n\n if (isMobileModal) {\n const selectedColumn =\n mobileActiveCategoryIndex != null\n ? mobilePanelColumns[mobileActiveCategoryIndex]\n : null;\n const isLevelThreePanelOpen = selectedColumn != null && !isMobileThirdPanelClosing;\n const shouldHideLevelTwoFromAssistiveTech = isLevelThreePanelOpen;\n\n return (\n <div\n ref={mobileModalPanelRef}\n className={cn(\n panelClassName,\n isMobileSecondPanelClosing && styles['main-navigation__panel--is-closing'],\n )}\n aria-label={openItem.label}\n aria-hidden={isMobilePanelClosingOut || undefined}\n >\n <div className={styles['main-navigation__mobile-level-2-content']}>\n <button\n ref={mobilePanelBackButtonRef}\n type=\"button\"\n className={cn(\n styles['main-navigation__mobile-back-item'],\n focusStyles.focusableInset,\n )}\n onClick={() =>\n closeMobilePanel({\n isClosing: isMobileSecondPanelClosing,\n setIsClosing: setIsMobileSecondPanelClosing,\n closeTimeoutRef: mobileSecondPanelCloseTimeoutRef,\n onClosed: () => {\n const closedTopLevelItemIndex = openTopLevelItemIndex;\n openTopLevelItemIndexRef.current = null;\n setOpenTopLevelItemIndex(null);\n setMobileActiveCategoryIndex(null);\n onDesktopItemToggle?.(null);\n\n clearTimeout(\n focusReturnToMobileTopLevelItemTimeoutRef.current ??\n undefined,\n );\n focusReturnToMobileTopLevelItemTimeoutRef.current =\n setTimeout(() => {\n desktopPanelTriggerButtonRefs.current[\n closedTopLevelItemIndex as number\n ]?.focus();\n focusReturnToMobileTopLevelItemTimeoutRef.current =\n null;\n }, 0);\n },\n })\n }\n >\n <ChevronRight className={styles['main-navigation__mobile-back-icon']} />\n <span className={styles['main-navigation__mobile-back-label']}>\n {openItem.label}\n </span>\n </button>\n\n {hasFeatureLinks && (\n <div\n className={styles['main-navigation__mobile-level-2-feature-links']}\n aria-hidden={shouldHideLevelTwoFromAssistiveTech || undefined}\n >\n <ul\n className={\n styles['main-navigation__mobile-level-2-feature-list']\n }\n >\n {openPanel.featureLinks!.map((link, index) => {\n const href = toNavigableHref(link.href);\n const isExternalFeatureLink = isExternalTarget(link.target);\n const MobileFeatureIcon = isExternalFeatureLink\n ? Open\n : ArrowRight;\n\n return (\n <li\n key={`mobile-feature-${index}`}\n className={\n styles[\n 'main-navigation__mobile-level-2-feature-list-item'\n ]\n }\n >\n <IconButton\n href={href}\n renderLink={(linkProps) =>\n renderLink(linkProps, {\n external: isExternalLink(link),\n })\n }\n className={\n styles[\n 'main-navigation__mobile-feature-link'\n ]\n }\n icon={MobileFeatureIcon}\n size=\"small\"\n labelBehavior=\"wrap\"\n rel={getLinkRel(link.target)}\n target={getLinkTarget(link.target)}\n >\n {link.label}\n {isExternalFeatureLink &&\n externalLinkAriaLabel && (\n <span\n className={\n styles[\n 'main-navigation__sr-only'\n ]\n }\n >\n {` (${externalLinkAriaLabel})`}\n </span>\n )}\n </IconButton>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n\n {\n <ul\n className={styles['main-navigation__mobile-level-2-category-list']}\n aria-hidden={shouldHideLevelTwoFromAssistiveTech || undefined}\n >\n {mobilePanelColumns.map((column, index) => (\n <li\n key={`mobile-category-${column.heading}-${index}`}\n className={\n styles['main-navigation__mobile-level-2-category-item']\n }\n >\n <button\n ref={(node) => {\n mobileLevelTwoCategoryButtonRefs.current[index] =\n node;\n }}\n type=\"button\"\n className={cn(\n styles[\n 'main-navigation__mobile-level-2-category-button'\n ],\n focusStyles.focusableInset,\n )}\n onClick={() => openMobileCategoryPanel(index)}\n onKeyDown={(event) => {\n if (event.key !== 'Enter' || isDesktopViewport()) {\n return;\n }\n\n event.preventDefault();\n focusMobileThirdPanelBackOnOpenRef.current = true;\n openMobileCategoryPanel(index);\n }}\n >\n <span>\n {getColumnHeading(column.heading, column.overflow)}\n </span>\n <ChevronRight />\n </button>\n </li>\n ))}\n </ul>\n }\n\n <div\n ref={mobileThirdPanelRef}\n className={cn(\n styles['main-navigation__mobile-level-3-panel'],\n isLevelThreePanelOpen &&\n styles['main-navigation__mobile-level-3-panel--open'],\n isMobileThirdPanelClosing &&\n styles['main-navigation__mobile-level-3-panel--is-closing'],\n )}\n >\n {selectedColumn != null && (\n <>\n <button\n ref={mobileThirdPanelBackButtonRef}\n type=\"button\"\n className={cn(\n styles['main-navigation__mobile-back-item'],\n focusStyles.focusableInset,\n )}\n onClick={() =>\n closeMobilePanel({\n isClosing: isMobileThirdPanelClosing,\n setIsClosing: setIsMobileThirdPanelClosing,\n closeTimeoutRef: mobileThirdPanelCloseTimeoutRef,\n onClosed: () => {\n const closedCategoryIndex =\n mobileActiveCategoryIndex;\n setMobileActiveCategoryIndex(null);\n\n clearTimeout(\n focusReturnToMobileCategoryTimeoutRef.current ??\n undefined,\n );\n focusReturnToMobileCategoryTimeoutRef.current =\n setTimeout(() => {\n mobileLevelTwoCategoryButtonRefs.current[\n closedCategoryIndex as number\n ]?.focus();\n focusReturnToMobileCategoryTimeoutRef.current =\n null;\n }, 0);\n },\n })\n }\n >\n <ChevronRight\n className={styles['main-navigation__mobile-back-icon']}\n />\n <span\n className={styles['main-navigation__mobile-back-label']}\n >\n {selectedColumn.heading}\n </span>\n </button>\n <ul className={styles['main-navigation__mobile-level-3-list']}>\n {selectedColumn.links.map((link, index) => (\n <li\n key={`${selectedColumn.heading}-${index}`}\n className={\n styles['main-navigation__mobile-level-3-item']\n }\n >\n {renderNavigationLink({\n link,\n className: cn(\n styles[\n 'main-navigation__mobile-level-3-link'\n ],\n focusStyles.focusableInset,\n ),\n children: link.label,\n })}\n </li>\n ))}\n </ul>\n </>\n )}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={panelClassName} aria-label={openItem.label}>\n <div className={styles['main-navigation__panel-content']}>\n <div className={styles['main-navigation__panel-main']}>\n <div className={styles['main-navigation__panel-columns']}>\n {panelColumns.map((column, columnIndex) => (\n <section\n key={`column-${columnIndex}`}\n className={cn(\n styles['main-navigation__panel-column'],\n column.highlighted &&\n styles['main-navigation__panel-column--highlighted'],\n column.mobileOnly &&\n styles['main-navigation__panel-column--mobile-only'],\n column.desktopOnly &&\n styles['main-navigation__panel-column--desktop-only'],\n !hasFeatureLinks &&\n columnIndex === lastDesktopVisibleColumnIndex &&\n styles['main-navigation__panel-column--last'],\n )}\n >\n <h2 className={styles['main-navigation__panel-heading']}>\n {getColumnHeading(column.heading, column.overflow)}\n </h2>\n <ul className={styles['main-navigation__panel-list']}>\n {column.links.map((link, index) => {\n const isInCurrentPage = isLinkInCurrentPage(\n link,\n currentPathname,\n );\n\n return (\n <li\n key={`${column.heading}-${index}`}\n className={\n styles['main-navigation__panel-list-item']\n }\n >\n {renderNavigationLink({\n link,\n className: cn(\n styles['main-navigation__panel-link'],\n focusStyles.focusableInset,\n textDecorationStyles.underlineLinkOnHover,\n isInCurrentPage &&\n styles[\n 'main-navigation__panel-link--current'\n ],\n ),\n ariaCurrent: isInCurrentPage\n ? 'page'\n : undefined,\n children: link.label,\n })}\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n </div>\n <aside\n className={cn(\n elevationStyles.elevationHigh,\n styles['main-navigation__panel-column'],\n styles['main-navigation__feature-links'],\n styles['main-navigation__panel-column--last'],\n openPanel.featureLinksHighlighted &&\n styles['main-navigation__panel-column--highlighted'],\n !hasFeatureLinks && styles['main-navigation__feature-links--empty'],\n )}\n >\n <ul className={styles['main-navigation__feature-list']}>\n {(openPanel.featureLinks ?? []).map((link, index) => {\n const href = toNavigableHref(link.href);\n const isExternalFeatureLink = isExternalTarget(link.target);\n\n return (\n <li\n key={`feature-${index}`}\n className={styles['main-navigation__panel-list-item']}\n >\n {renderNavigationLink({\n link: { ...link, href },\n className: cn(\n styles['main-navigation__feature-link'],\n textDecorationStyles.underlineLinkOnHover,\n focusStyles.focusableInset,\n ),\n children: (\n <>\n {isExternalFeatureLink ? (\n <Open\n className={\n styles[\n 'main-navigation__feature-link-icon'\n ]\n }\n />\n ) : (\n <ArrowRight\n className={\n styles[\n 'main-navigation__feature-link-icon'\n ]\n }\n />\n )}\n <span\n className={\n styles[\n 'main-navigation__feature-link-label'\n ]\n }\n >\n {link.label}\n </span>\n {isExternalFeatureLink &&\n externalLinkAriaLabel && (\n <span\n className={\n styles[\n 'main-navigation__sr-only'\n ]\n }\n >\n {` (${externalLinkAriaLabel})`}\n </span>\n )}\n </>\n ),\n })}\n </li>\n );\n })}\n </ul>\n </aside>\n </div>\n </div>\n );\n };\n\n const renderPrimaryList = () => (\n <ul className={styles['main-navigation__primary-list']}>\n {items.map((item, index) => {\n const hasPanel = item.panel != null;\n const isOpen = openTopLevelItemIndex === index;\n const isCurrentPathItem = isItemInCurrentPath(item, currentPathname);\n\n return (\n <li key={item.label} className={styles['main-navigation__item']}>\n {hasPanel ? (\n <button\n ref={(node) => {\n desktopPanelTriggerButtonRefs.current[index] = node;\n }}\n type=\"button\"\n className={cn(\n styles['main-navigation__item-toggle'],\n focusStyles.focusableInset,\n isCurrentPathItem &&\n styles['main-navigation__item-toggle--current'],\n isOpen && styles['main-navigation__item-toggle--open'],\n )}\n aria-expanded={isOpen}\n onClick={() => toggleTopLevelItem(index)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && !isDesktopViewport()) {\n focusMobilePanelBackOnOpenRef.current = true;\n }\n }}\n >\n <span className={styles['main-navigation__item-label']}>\n {item.label}\n </span>\n <ChevronRight\n className={styles['main-navigation__top-level-toggle-icon']}\n />\n </button>\n ) : (\n renderNavigationLink({\n link: item,\n className: cn(\n styles['main-navigation__item-link'],\n focusStyles.focusableInset,\n isCurrentPathItem &&\n styles['main-navigation__item-link--current'],\n ),\n ariaCurrent: isCurrentPathItem ? 'page' : undefined,\n children: (\n <span className={styles['main-navigation__item-label']}>\n {item.label}\n </span>\n ),\n })\n )}\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <header\n ref={setHeaderRef}\n className={cn(\n styles['main-navigation'],\n isHeaderOpen && styles['main-navigation--open'],\n mobileMenuOpen && styles['main-navigation--menu-open'],\n isMobileMenuClosing && styles['main-navigation--menu-closing'],\n showPageOverlay && styles['main-navigation--overlay'],\n showPageOverlay && overlayStyles.overlayStrong,\n isOverlayClosingOut && overlayStyles.overlayClosing,\n className,\n )}\n {...props}\n onKeyDown={(event) => {\n if (event.key === 'Tab' && activeUtilityDropdown != null) {\n const focusLoopElements =\n getUtilityDropdownFocusLoopElements(activeUtilityDropdown);\n\n if (focusLoopElements.length > 1) {\n event.preventDefault();\n\n // Keep Tab traversal between the trigger and its dropdown controls.\n const currentIndex = focusLoopElements.indexOf(\n document.activeElement as HTMLElement,\n );\n const direction = event.shiftKey ? -1 : 1;\n const nextIndex =\n currentIndex === -1\n ? event.shiftKey\n ? focusLoopElements.length - 1\n : 0\n : (currentIndex + direction + focusLoopElements.length) %\n focusLoopElements.length;\n\n focusLoopElements[nextIndex]?.focus();\n } else {\n // No focusable content: close the dropdown so Tab never leaves it visually\n // open, while still letting focus move on naturally.\n closeUtilityDropdown();\n }\n return;\n }\n\n if (event.key === 'Tab' && mobileMenuOpen && !isDesktopViewport()) {\n const focusableElements = getMobileFocusableElements();\n\n if (focusableElements.length > 0) {\n event.preventDefault();\n\n // Keep Tab traversal inside the active mobile navigation context.\n const currentIndex = focusableElements.indexOf(\n document.activeElement as HTMLElement,\n );\n const direction = event.shiftKey ? -1 : 1;\n const nextIndex =\n currentIndex === -1\n ? event.shiftKey\n ? focusableElements.length - 1\n : 0\n : (currentIndex + direction + focusableElements.length) %\n focusableElements.length;\n\n focusableElements[nextIndex]?.focus();\n }\n return;\n }\n\n if (event.key === 'Tab' && openTopLevelItemIndex != null && isDesktopViewport()) {\n const focusLoopElements = getDesktopFocusLoopElements(openTopLevelItemIndex);\n\n if (focusLoopElements.length > 0) {\n event.preventDefault();\n\n // Keep Tab traversal between the trigger and desktop panel controls.\n const currentIndex = focusLoopElements.indexOf(\n document.activeElement as HTMLElement,\n );\n const direction = event.shiftKey ? -1 : 1;\n const nextIndex =\n currentIndex === -1\n ? event.shiftKey\n ? focusLoopElements.length - 1\n : 0\n : (currentIndex + direction + focusLoopElements.length) %\n focusLoopElements.length;\n\n focusLoopElements[nextIndex]?.focus();\n return;\n }\n }\n\n if (event.key === 'Escape') {\n const utilityDropdownToRestore = activeUtilityDropdown;\n closeMenus();\n\n if (utilityDropdownToRestore != null) {\n const triggerButton =\n utilityDropdownToRestore === 'search'\n ? searchTriggerRef.current\n : utilityDropdownToRestore === 'language'\n ? languageTriggerRef.current\n : loginTriggerRef.current;\n triggerButton?.focus();\n }\n }\n\n props.onKeyDown?.(event);\n }}\n >\n <nav\n aria-label={organizationStripAriaLabel}\n className={styles['main-navigation__organization-strip']}\n >\n {organizations.map((organization) => (\n <Fragment key={organization.label}>\n {renderNavigationLink({\n link: organization,\n className: cn(\n styles['main-navigation__organization-link'],\n focusStyles.focusable,\n organization.current &&\n styles['main-navigation__organization-link--current'],\n ),\n ariaCurrent: organization.current ? 'page' : undefined,\n children: organization.label,\n })}\n </Fragment>\n ))}\n </nav>\n\n <div className={styles['main-navigation__navbar']}>\n {renderUtilityLink({\n href: toNavigableHref(logoHref),\n className: cn(styles['main-navigation__logo'], focusStyles.focusable),\n 'aria-label': logoAriaLabel,\n children: <img src={defaultLogoSrc} alt=\"\" aria-hidden=\"true\" />,\n })}\n\n <nav\n ref={mobilePrimaryNavRef}\n aria-label={mobileMenuOpen ? mobilePrimaryNavigationAriaLabel : ariaLabel}\n data-open={mobileMenuOpen ? 'true' : 'false'}\n className={cn(\n styles['main-navigation__primary'],\n mobileMenuOpen && styles['main-navigation__primary--open'],\n )}\n >\n {renderPrimaryList()}\n {(mobileMenuOpen || isMobileMenuClosing) &&\n renderPanel(\n cn(\n styles['main-navigation__panel'],\n styles['main-navigation__panel--mobile'],\n ),\n true,\n )}\n </nav>\n\n <div className={styles['main-navigation__icon-nav']}>\n {showLanguage && currentLanguage != null && (\n <div className={styles['main-navigation__utility']}>\n <button\n ref={languageTriggerRef}\n type=\"button\"\n className={cn(\n styles['main-navigation__icon-nav-item'],\n isLanguageOpen &&\n styles['main-navigation__icon-nav-item--active'],\n focusStyles.focusableInset,\n )}\n aria-expanded={isLanguageOpen}\n aria-controls={isLanguageOpen ? languageDropdownId : undefined}\n onClick={handleLanguageClick}\n >\n <Globe aria-hidden=\"true\" />\n <span\n aria-hidden=\"true\"\n className={styles['main-navigation__icon-nav-label']}\n >\n {currentLanguage.code.toUpperCase()}\n </span>\n <span className={styles['main-navigation__sr-only']}>\n {languageAnnouncements.map((announcement, index) => (\n <Fragment key={announcement.lang}>\n {/* Separator so adjacent announcements are not glued in the accessible name. */}\n {index > 0 ? ' ' : null}\n <span lang={announcement.lang}>\n {announcement.text}\n </span>\n </Fragment>\n ))}\n </span>\n </button>\n {isLanguageOpen && (\n <>\n <span\n aria-hidden=\"true\"\n className={styles['main-navigation__dropdown-caret']}\n />\n <div\n id={languageDropdownId}\n className={cn(\n styles['main-navigation__dropdown'],\n styles['main-navigation__dropdown--language'],\n elevationStyles.elevationMedium,\n )}\n >\n <ul className={styles['main-navigation__language-list']}>\n {alternativeLanguages.map((language) => (\n <li\n key={language.code}\n className={\n styles[\n 'main-navigation__language-list-item'\n ]\n }\n >\n {renderLanguageLink({\n href: toNavigableHref(language.href),\n lang: language.code,\n 'aria-label':\n language.ariaLabel ??\n languageLinkAriaLabels[language.code],\n className: cn(\n styles[\n 'main-navigation__language-link'\n ],\n focusStyles.focusable,\n ),\n children: language.code.toUpperCase(),\n })}\n </li>\n ))}\n </ul>\n </div>\n </>\n )}\n </div>\n )}\n {showSearch && (\n <div className={styles['main-navigation__utility']}>\n <button\n ref={searchTriggerRef}\n type=\"button\"\n className={cn(\n styles['main-navigation__icon-nav-item'],\n isSearchOpen &&\n styles['main-navigation__icon-nav-item--active'],\n focusStyles.focusableInset,\n )}\n aria-label={searchLabel}\n aria-expanded={isSearchOpen}\n aria-controls={isSearchOpen ? searchDropdownId : undefined}\n onClick={handleSearchClick}\n >\n <Search />\n <span className={styles['main-navigation__icon-nav-label']}>\n {searchLabel}\n </span>\n </button>\n {isSearchOpen && (\n <span\n aria-hidden=\"true\"\n className={styles['main-navigation__dropdown-caret']}\n />\n )}\n </div>\n )}\n {showCart && (\n <button\n type=\"button\"\n className={cn(\n styles['main-navigation__icon-nav-item'],\n isCartOpen && styles['main-navigation__icon-nav-item--active'],\n focusStyles.focusableInset,\n )}\n aria-label={cartAccessibleLabel}\n aria-expanded={isCartOpen}\n onClick={handleCartClick}\n >\n <Cart />\n <span className={styles['main-navigation__icon-nav-label']}>\n {cartLabel}\n </span>\n {cartCounter != null && (\n <span\n aria-hidden=\"true\"\n className={styles['main-navigation__icon-nav-item--counter']}\n >\n {cartCounter}\n </span>\n )}\n </button>\n )}\n {showLogin && (\n <div className={styles['main-navigation__utility']}>\n <Button\n ref={loginTriggerRef}\n size=\"small\"\n aria-expanded={isLoginOpen}\n aria-controls={isLoginOpen ? loginDropdownId : undefined}\n onClick={handleLoginClick}\n >\n {loginLabel}\n </Button>\n {isLoginOpen && (\n <>\n <span\n aria-hidden=\"true\"\n className={styles['main-navigation__dropdown-caret']}\n />\n <div\n id={loginDropdownId}\n className={cn(\n styles['main-navigation__dropdown'],\n styles['main-navigation__dropdown--login'],\n elevationStyles.elevationMedium,\n )}\n >\n {loginDropdownContent}\n </div>\n </>\n )}\n </div>\n )}\n </div>\n\n {showSearch && isSearchOpen && (\n <div\n id={searchDropdownId}\n className={cn(\n styles['main-navigation__dropdown'],\n styles['main-navigation__dropdown--search'],\n elevationStyles.elevationMedium,\n )}\n >\n {searchDropdownContent}\n </div>\n )}\n\n <button\n ref={mobileMenuToggleButtonRef}\n type=\"button\"\n className={cn(\n styles['main-navigation__menu-toggle'],\n mobileMenuOpen && styles['main-navigation__menu-toggle--open'],\n focusStyles.focusableInset,\n )}\n aria-label={mobileMenuOpen ? mobileMenuCloseAriaLabel : mobileMenuOpenAriaLabel}\n aria-expanded={mobileMenuOpen}\n onClick={toggleMobileMenu}\n >\n {mobileMenuOpen ? <Close size=\"32px\" /> : <Menu size=\"32px\" />}\n </button>\n </div>\n\n {!mobileMenuOpen &&\n renderPanel(\n cn(styles['main-navigation__panel'], styles['main-navigation__panel--desktop']),\n )}\n\n {showCart && (\n <Drawer\n open={isCartOpen}\n onOpenChange={handleCartOpenChange}\n title={cartLabel}\n size=\"small\"\n >\n {cartContent}\n </Drawer>\n )}\n </header>\n );\n};\n"],"names":["jsx","useState","useRef","useId","useCallback","assignRef","useEffect","isMobileViewportByEnvironment","isMobileIosDeviceByEnvironment","isDesktopViewport","isDesktopViewportByEnvironment","styles","className","toNavigableHref","getLinkRel","getLinkTarget","isExternalLink","props","getLanguageToggleAnnouncements","cn","jsxs","focusStyles","ChevronRight","isExternalTarget","Open","ArrowRight","IconButton","Fragment","isLinkInCurrentPage","textDecorationStyles","elevationStyles","isItemInCurrentPath","overlayStyles","Globe","languageLinkAriaLabels","Search","Cart","Button","Close","Menu","Drawer"],"mappings":"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"}
|