@dnanpm/ui-components 0.8.0 → 0.10.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.
Files changed (249) hide show
  1. package/README.md +13 -0
  2. package/dist/components/Accordion/Accordion.css +9 -2
  3. package/dist/components/AccordionItem/AccordionItem.cjs +4 -4
  4. package/dist/components/AccordionItem/AccordionItem.cjs.map +1 -1
  5. package/dist/components/AccordionItem/AccordionItem.css +8 -2
  6. package/dist/components/AccordionItem/AccordionItem.d.ts.map +1 -1
  7. package/dist/components/AccordionItem/AccordionItem.js +2 -2
  8. package/dist/components/AccordionItem/AccordionItem.js.map +1 -1
  9. package/dist/components/Avatar/Avatar.cjs +83 -0
  10. package/dist/components/Avatar/Avatar.cjs.map +1 -0
  11. package/dist/components/Avatar/Avatar.css +188 -0
  12. package/dist/components/Avatar/Avatar.d.ts +3 -0
  13. package/dist/components/Avatar/Avatar.d.ts.map +1 -0
  14. package/dist/components/Avatar/Avatar.js +83 -0
  15. package/dist/components/Avatar/Avatar.js.map +1 -0
  16. package/dist/components/Avatar/Avatar.module.css.cjs +40 -0
  17. package/dist/components/Avatar/Avatar.module.css.cjs.map +1 -0
  18. package/dist/components/Avatar/Avatar.module.css.js +40 -0
  19. package/dist/components/Avatar/Avatar.module.css.js.map +1 -0
  20. package/dist/components/Avatar/Avatar.types.d.ts +66 -0
  21. package/dist/components/Avatar/Avatar.types.d.ts.map +1 -0
  22. package/dist/components/Avatar/Avatar.utils.cjs +17 -0
  23. package/dist/components/Avatar/Avatar.utils.cjs.map +1 -0
  24. package/dist/components/Avatar/Avatar.utils.d.ts +6 -0
  25. package/dist/components/Avatar/Avatar.utils.d.ts.map +1 -0
  26. package/dist/components/Avatar/Avatar.utils.js +17 -0
  27. package/dist/components/Avatar/Avatar.utils.js.map +1 -0
  28. package/dist/components/Avatar/index.d.ts +3 -0
  29. package/dist/components/Avatar/index.d.ts.map +1 -0
  30. package/dist/components/Breadcrumb/Breadcrumb.cjs +9 -12
  31. package/dist/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
  32. package/dist/components/Breadcrumb/Breadcrumb.css +20 -17
  33. package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  34. package/dist/components/Breadcrumb/Breadcrumb.js +2 -5
  35. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
  36. package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +5 -8
  37. package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs.map +1 -1
  38. package/dist/components/Breadcrumb/Breadcrumb.module.css.js +5 -8
  39. package/dist/components/Breadcrumb/Breadcrumb.module.css.js.map +1 -1
  40. package/dist/components/Button/Button.cjs +29 -3
  41. package/dist/components/Button/Button.cjs.map +1 -1
  42. package/dist/components/Button/Button.css +76 -30
  43. package/dist/components/Button/Button.d.ts +1 -1
  44. package/dist/components/Button/Button.d.ts.map +1 -1
  45. package/dist/components/Button/Button.js +28 -2
  46. package/dist/components/Button/Button.js.map +1 -1
  47. package/dist/components/Button/Button.module.css.cjs +19 -11
  48. package/dist/components/Button/Button.module.css.cjs.map +1 -1
  49. package/dist/components/Button/Button.module.css.js +19 -11
  50. package/dist/components/Button/Button.module.css.js.map +1 -1
  51. package/dist/components/Button/Button.types.d.ts +20 -3
  52. package/dist/components/Button/Button.types.d.ts.map +1 -1
  53. package/dist/components/Button/index.d.ts +1 -1
  54. package/dist/components/Button/index.d.ts.map +1 -1
  55. package/dist/components/ButtonCard/ButtonCard.cjs +19 -14
  56. package/dist/components/ButtonCard/ButtonCard.cjs.map +1 -1
  57. package/dist/components/ButtonCard/ButtonCard.css +62 -20
  58. package/dist/components/ButtonCard/ButtonCard.d.ts +2 -1
  59. package/dist/components/ButtonCard/ButtonCard.d.ts.map +1 -1
  60. package/dist/components/ButtonCard/ButtonCard.js +17 -12
  61. package/dist/components/ButtonCard/ButtonCard.js.map +1 -1
  62. package/dist/components/ButtonCard/ButtonCard.module.css.cjs +14 -12
  63. package/dist/components/ButtonCard/ButtonCard.module.css.cjs.map +1 -1
  64. package/dist/components/ButtonCard/ButtonCard.module.css.js +14 -12
  65. package/dist/components/ButtonCard/ButtonCard.module.css.js.map +1 -1
  66. package/dist/components/ButtonCard/ButtonCard.types.d.ts +3 -2
  67. package/dist/components/ButtonCard/ButtonCard.types.d.ts.map +1 -1
  68. package/dist/components/Checkbox/Checkbox.cjs +105 -0
  69. package/dist/components/Checkbox/Checkbox.cjs.map +1 -0
  70. package/dist/components/Checkbox/Checkbox.css +323 -0
  71. package/dist/components/Checkbox/Checkbox.d.ts +3 -0
  72. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  73. package/dist/components/Checkbox/Checkbox.js +105 -0
  74. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  75. package/dist/components/Checkbox/Checkbox.module.css.cjs +35 -0
  76. package/dist/components/Checkbox/Checkbox.module.css.cjs.map +1 -0
  77. package/dist/components/Checkbox/Checkbox.module.css.js +35 -0
  78. package/dist/components/Checkbox/Checkbox.module.css.js.map +1 -0
  79. package/dist/components/Checkbox/Checkbox.types.d.ts +47 -0
  80. package/dist/components/Checkbox/Checkbox.types.d.ts.map +1 -0
  81. package/dist/components/Checkbox/index.d.ts +3 -0
  82. package/dist/components/Checkbox/index.d.ts.map +1 -0
  83. package/dist/components/ContentCard/ContentCard.cjs +97 -0
  84. package/dist/components/ContentCard/ContentCard.cjs.map +1 -0
  85. package/dist/components/ContentCard/ContentCard.css +254 -0
  86. package/dist/components/ContentCard/ContentCard.d.ts +3 -0
  87. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -0
  88. package/dist/components/ContentCard/ContentCard.js +97 -0
  89. package/dist/components/ContentCard/ContentCard.js.map +1 -0
  90. package/dist/components/ContentCard/ContentCard.module.css.cjs +24 -0
  91. package/dist/components/ContentCard/ContentCard.module.css.cjs.map +1 -0
  92. package/dist/components/ContentCard/ContentCard.module.css.js +25 -0
  93. package/dist/components/ContentCard/ContentCard.module.css.js.map +1 -0
  94. package/dist/components/ContentCard/ContentCard.types.d.ts +100 -0
  95. package/dist/components/ContentCard/ContentCard.types.d.ts.map +1 -0
  96. package/dist/components/ContentCard/index.d.ts +3 -0
  97. package/dist/components/ContentCard/index.d.ts.map +1 -0
  98. package/dist/components/Drawer/Drawer.cjs +15 -7
  99. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  100. package/dist/components/Drawer/Drawer.css +47 -45
  101. package/dist/components/Drawer/Drawer.d.ts.map +1 -1
  102. package/dist/components/Drawer/Drawer.js +12 -4
  103. package/dist/components/Drawer/Drawer.js.map +1 -1
  104. package/dist/components/Drawer/Drawer.module.css.cjs +16 -16
  105. package/dist/components/Drawer/Drawer.module.css.js +16 -16
  106. package/dist/components/Footer/Footer.cjs +8 -9
  107. package/dist/components/Footer/Footer.cjs.map +1 -1
  108. package/dist/components/Footer/Footer.css +91 -84
  109. package/dist/components/Footer/Footer.d.ts.map +1 -1
  110. package/dist/components/Footer/Footer.js +1 -2
  111. package/dist/components/Footer/Footer.js.map +1 -1
  112. package/dist/components/Footer/Footer.module.css.cjs +39 -39
  113. package/dist/components/Footer/Footer.module.css.js +39 -39
  114. package/dist/components/FunctionButton/FunctionButton.cjs +2 -2
  115. package/dist/components/FunctionButton/FunctionButton.cjs.map +1 -1
  116. package/dist/components/FunctionButton/FunctionButton.css +5 -2
  117. package/dist/components/FunctionButton/FunctionButton.js +1 -1
  118. package/dist/components/FunctionButton/FunctionButton.js.map +1 -1
  119. package/dist/components/Hero/Hero.cjs +30 -29
  120. package/dist/components/Hero/Hero.cjs.map +1 -1
  121. package/dist/components/Hero/Hero.css +86 -74
  122. package/dist/components/Hero/Hero.d.ts +1 -1
  123. package/dist/components/Hero/Hero.d.ts.map +1 -1
  124. package/dist/components/Hero/Hero.js +30 -29
  125. package/dist/components/Hero/Hero.js.map +1 -1
  126. package/dist/components/Hero/Hero.module.css.cjs +20 -17
  127. package/dist/components/Hero/Hero.module.css.cjs.map +1 -1
  128. package/dist/components/Hero/Hero.module.css.js +20 -17
  129. package/dist/components/Hero/Hero.module.css.js.map +1 -1
  130. package/dist/components/Hero/Hero.types.d.ts +2 -6
  131. package/dist/components/Hero/Hero.types.d.ts.map +1 -1
  132. package/dist/components/IconButton/IconButton.cjs +3 -4
  133. package/dist/components/IconButton/IconButton.cjs.map +1 -1
  134. package/dist/components/IconButton/IconButton.css +5 -2
  135. package/dist/components/IconButton/IconButton.d.ts.map +1 -1
  136. package/dist/components/IconButton/IconButton.js +1 -2
  137. package/dist/components/IconButton/IconButton.js.map +1 -1
  138. package/dist/components/Label/Label.css +5 -2
  139. package/dist/components/MainNavigation/MainNavigation.cjs +556 -191
  140. package/dist/components/MainNavigation/MainNavigation.cjs.map +1 -1
  141. package/dist/components/MainNavigation/MainNavigation.css +297 -170
  142. package/dist/components/MainNavigation/MainNavigation.d.ts +1 -1
  143. package/dist/components/MainNavigation/MainNavigation.d.ts.map +1 -1
  144. package/dist/components/MainNavigation/MainNavigation.js +526 -161
  145. package/dist/components/MainNavigation/MainNavigation.js.map +1 -1
  146. package/dist/components/MainNavigation/MainNavigation.module.css.cjs +80 -68
  147. package/dist/components/MainNavigation/MainNavigation.module.css.cjs.map +1 -1
  148. package/dist/components/MainNavigation/MainNavigation.module.css.js +80 -68
  149. package/dist/components/MainNavigation/MainNavigation.module.css.js.map +1 -1
  150. package/dist/components/MainNavigation/MainNavigation.types.d.ts +55 -21
  151. package/dist/components/MainNavigation/MainNavigation.types.d.ts.map +1 -1
  152. package/dist/components/MainNavigation/MainNavigation.utils.cjs +28 -4
  153. package/dist/components/MainNavigation/MainNavigation.utils.cjs.map +1 -1
  154. package/dist/components/MainNavigation/MainNavigation.utils.d.ts +11 -1
  155. package/dist/components/MainNavigation/MainNavigation.utils.d.ts.map +1 -1
  156. package/dist/components/MainNavigation/MainNavigation.utils.js +28 -4
  157. package/dist/components/MainNavigation/MainNavigation.utils.js.map +1 -1
  158. package/dist/components/MainNavigation/index.d.ts +1 -1
  159. package/dist/components/MainNavigation/index.d.ts.map +1 -1
  160. package/dist/components/Modal/Modal.cjs +14 -6
  161. package/dist/components/Modal/Modal.cjs.map +1 -1
  162. package/dist/components/Modal/Modal.css +43 -40
  163. package/dist/components/Modal/Modal.d.ts.map +1 -1
  164. package/dist/components/Modal/Modal.js +12 -4
  165. package/dist/components/Modal/Modal.js.map +1 -1
  166. package/dist/components/Modal/Modal.module.css.cjs +18 -18
  167. package/dist/components/Modal/Modal.module.css.js +18 -18
  168. package/dist/components/Notification/Notification.cjs +3 -2
  169. package/dist/components/Notification/Notification.cjs.map +1 -1
  170. package/dist/components/Notification/Notification.css +20 -12
  171. package/dist/components/Notification/Notification.d.ts.map +1 -1
  172. package/dist/components/Notification/Notification.js +2 -1
  173. package/dist/components/Notification/Notification.js.map +1 -1
  174. package/dist/components/Notification/Notification.module.css.cjs +9 -9
  175. package/dist/components/Notification/Notification.module.css.js +9 -9
  176. package/dist/components/Pagination/Pagination.cjs +142 -0
  177. package/dist/components/Pagination/Pagination.cjs.map +1 -0
  178. package/dist/components/Pagination/Pagination.css +256 -0
  179. package/dist/components/Pagination/Pagination.d.ts +3 -0
  180. package/dist/components/Pagination/Pagination.d.ts.map +1 -0
  181. package/dist/components/Pagination/Pagination.js +142 -0
  182. package/dist/components/Pagination/Pagination.js.map +1 -0
  183. package/dist/components/Pagination/Pagination.module.css.cjs +34 -0
  184. package/dist/components/Pagination/Pagination.module.css.cjs.map +1 -0
  185. package/dist/components/Pagination/Pagination.module.css.js +34 -0
  186. package/dist/components/Pagination/Pagination.module.css.js.map +1 -0
  187. package/dist/components/Pagination/Pagination.types.d.ts +20 -0
  188. package/dist/components/Pagination/Pagination.types.d.ts.map +1 -0
  189. package/dist/components/Pagination/Pagination.utils.cjs +76 -0
  190. package/dist/components/Pagination/Pagination.utils.cjs.map +1 -0
  191. package/dist/components/Pagination/Pagination.utils.d.ts +21 -0
  192. package/dist/components/Pagination/Pagination.utils.d.ts.map +1 -0
  193. package/dist/components/Pagination/Pagination.utils.js +76 -0
  194. package/dist/components/Pagination/Pagination.utils.js.map +1 -0
  195. package/dist/components/Pagination/index.d.ts +3 -0
  196. package/dist/components/Pagination/index.d.ts.map +1 -0
  197. package/dist/components/Pictograph/Pictograph.css +9 -2
  198. package/dist/components/Pictograph/PictographItem.css +9 -2
  199. package/dist/components/Quote/Quote.css +5 -2
  200. package/dist/components/Spinner/Spinner.css +9 -2
  201. package/dist/design-tokens/dist/tokens.cjs +5 -0
  202. package/dist/design-tokens/dist/tokens.cjs.map +1 -0
  203. package/dist/design-tokens/dist/tokens.js +5 -0
  204. package/dist/design-tokens/dist/tokens.js.map +1 -0
  205. package/dist/index.cjs +8 -0
  206. package/dist/index.cjs.map +1 -1
  207. package/dist/index.d.ts +10 -2
  208. package/dist/index.d.ts.map +1 -1
  209. package/dist/index.js +8 -0
  210. package/dist/index.js.map +1 -1
  211. package/dist/styles/utilities.css +6 -0
  212. package/dist/styles/utils/elevation.css +34 -26
  213. package/dist/styles/utils/focus.css +63 -65
  214. package/dist/styles/utils/index.cjs +33 -0
  215. package/dist/styles/utils/index.cjs.map +1 -0
  216. package/dist/styles/utils/index.d.ts +20 -0
  217. package/dist/styles/utils/index.d.ts.map +1 -0
  218. package/dist/styles/utils/index.js +33 -0
  219. package/dist/styles/utils/index.js.map +1 -0
  220. package/dist/styles/utils/overlay.css +35 -28
  221. package/dist/styles/utils/text-decoration.css +19 -12
  222. package/dist/styles.css +46 -12
  223. package/dist/utils/index.d.ts +1 -0
  224. package/dist/utils/index.d.ts.map +1 -1
  225. package/dist/utils/isRenderable/index.d.ts +2 -0
  226. package/dist/utils/isRenderable/index.d.ts.map +1 -0
  227. package/dist/utils/isRenderable/isRenderable.cjs +5 -0
  228. package/dist/utils/isRenderable/isRenderable.cjs.map +1 -0
  229. package/dist/utils/isRenderable/isRenderable.d.ts +4 -0
  230. package/dist/utils/isRenderable/isRenderable.d.ts.map +1 -0
  231. package/dist/utils/isRenderable/isRenderable.js +5 -0
  232. package/dist/utils/isRenderable/isRenderable.js.map +1 -0
  233. package/package.json +12 -4
  234. package/dist/styles/utils/elevation.module.css.cjs +0 -16
  235. package/dist/styles/utils/elevation.module.css.cjs.map +0 -1
  236. package/dist/styles/utils/elevation.module.css.js +0 -16
  237. package/dist/styles/utils/elevation.module.css.js.map +0 -1
  238. package/dist/styles/utils/focus.module.css.cjs +0 -16
  239. package/dist/styles/utils/focus.module.css.cjs.map +0 -1
  240. package/dist/styles/utils/focus.module.css.js +0 -16
  241. package/dist/styles/utils/focus.module.css.js.map +0 -1
  242. package/dist/styles/utils/overlay.module.css.cjs +0 -13
  243. package/dist/styles/utils/overlay.module.css.cjs.map +0 -1
  244. package/dist/styles/utils/overlay.module.css.js +0 -13
  245. package/dist/styles/utils/overlay.module.css.js.map +0 -1
  246. package/dist/styles/utils/text-decoration.module.css.cjs +0 -13
  247. package/dist/styles/utils/text-decoration.module.css.cjs.map +0 -1
  248. package/dist/styles/utils/text-decoration.module.css.js +0 -13
  249. package/dist/styles/utils/text-decoration.module.css.js.map +0 -1
@@ -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 )}\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 )}\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 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(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 {showLanguageSelector && (\n <button\n type=\"button\"\n className={cn(\n styles['main-navigation__icon-nav-item'],\n focusStyles.focusableInset,\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 )}\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 )}\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 )}\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 {\n elevationStyles,\n focusStyles,\n overlayStyles,\n textDecorationStyles,\n} from '../../styles/utils';\nimport { Button } from '../Button';\nimport { Drawer } from '../Drawer';\nimport { IconButton } from '../IconButton';\nimport styles from './MainNavigation.module.css';\nimport {\n assignRef,\n desktopMinWidthMediaQuery,\n getLanguageToggleAnnouncements,\n getLinkRel,\n getLinkTarget,\n isDesktopViewportByEnvironment,\n isExternalLink,\n isExternalTarget,\n isItemInCurrentPath,\n isLinkInCurrentPath,\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';\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 cartOpen,\n onCartOpenChange,\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 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 isCartControlled = cartOpen !== undefined;\n\n // Visibility of each utility control and the sidecart, derived purely from props.\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 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\n // Every surface starts closed; a controlled `cartOpen` is the only way to open one at mount.\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [isMobileMenuClosing, setIsMobileMenuClosing] = useState(false);\n const [openTopLevelItemIndex, setOpenTopLevelItemIndex] = useState<number | null>(null);\n const [isHeaderOpen, setIsHeaderOpen] = useState(true);\n const [mobileActiveCategoryIndex, setMobileActiveCategoryIndex] = useState<number | null>(null);\n const [internalCartOpen, setInternalCartOpen] = useState(false);\n const isCartOpen = cartOpen ?? internalCartOpen;\n const [openUtilityDropdown, setOpenUtilityDropdown] = useState<\n 'search' | 'language' | 'login' | null\n >(null);\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 // Last open state reported to the consumer per surface, so notifications fire exactly once per\n // genuine change. Every surface starts closed, so neither mount nor a StrictMode setup replay\n // reports anything. Interaction and media-change handlers keep it in step as they fire, so the\n // reconciliation effect only reports the prop-driven changes they cannot (a controlled sidecart\n // opening over another surface, or content removed from an open dropdown/sidecart).\n const notifyRef = useRef<{\n mobileMenu: boolean;\n desktopItem: number | null;\n search: boolean;\n language: boolean;\n login: boolean;\n cart: boolean;\n }>({\n mobileMenu: false,\n desktopItem: null,\n search: false,\n language: false,\n login: false,\n cart: false,\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 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 // Reconcile the mutually-exclusive mobile menu / desktop panel on genuine breakpoint transitions.\n // Client-only by design (the server cannot know the viewport); there is no mount-time call, so a\n // viewport-dependent surface can only be opened by interaction on a client that knows its viewport.\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const desktopQuery = window.matchMedia(desktopMinWidthMediaQuery);\n\n const handleViewportModeChange = ({ matches: isDesktopViewport }: { matches: boolean }) => {\n // Reconcile mutually-exclusive surfaces on genuine breakpoint transitions (client-only).\n // The consumer callback is fired here, in the media-change handler, and notifyRef is kept\n // in step so the reconciliation effect does not report the change again.\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 if (notifyRef.current.mobileMenu) {\n notifyRef.current.mobileMenu = false;\n onMobileMenuToggle?.(false);\n }\n setMobileMenuOpen(false);\n setMobileActiveCategoryIndex(null);\n setIsMobileSecondPanelClosing(false);\n setIsMobileThirdPanelClosing(false);\n return;\n }\n\n if (notifyRef.current.desktopItem !== null) {\n notifyRef.current.desktopItem = null;\n onDesktopItemToggle?.(null);\n }\n setOpenTopLevelItemIndex(null);\n };\n\n desktopQuery.addEventListener('change', handleViewportModeChange);\n\n return () => {\n desktopQuery.removeEventListener('change', handleViewportModeChange);\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 // Fire synchronously and keep notifyRef in step so the reconciliation effect does not report\n // these closes again (it only reports prop-driven changes the handlers do not).\n if (mobileMenuOpen) {\n notifyRef.current.mobileMenu = false;\n onMobileMenuToggle?.(false);\n }\n if (openTopLevelItemIndex !== null) {\n notifyRef.current.desktopItem = 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 notifyRef.current.mobileMenu = 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 notifyRef.current.desktopItem = 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 // Derive the open dropdown from notifyRef (the last reported open state) so this callback's\n // identity stays stable and a StrictMode replay cannot re-notify.\n const openDropdown = notifyRef.current.search\n ? 'search'\n : notifyRef.current.language\n ? 'language'\n : notifyRef.current.login\n ? 'login'\n : null;\n if (openDropdown != null) {\n notifyRef.current[openDropdown] = false;\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 focusMobilePanelBackOnOpenRef.current = false;\n\n clearTimeout(focusMobileThirdPanelTimeoutRef.current ?? undefined);\n focusMobileThirdPanelTimeoutRef.current = null;\n focusMobileThirdPanelBackOnOpenRef.current = false;\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 // Derive the open dropdown from notifyRef so this callback's identity stays stable and a\n // StrictMode replay cannot re-notify.\n const openDropdown = notifyRef.current.search\n ? 'search'\n : notifyRef.current.language\n ? 'language'\n : notifyRef.current.login\n ? 'login'\n : null;\n if (openDropdown != null) {\n notifyRef.current[openDropdown] = false;\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 const cartAccessibleLabel =\n cartCounter != null ? `${cartLabel} ${cartCounter} ${cartCounterLabel}` : cartLabel;\n\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 // The sidecart is only truly open when it has content to show.\n const effectiveCartOpen = isCartOpen && showCart;\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 notifyRef.current[previous] = false;\n notifyUtilityOpenChange(previous, false);\n }\n\n if (next != null) {\n notifyRef.current[next] = true;\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 notifyRef.current.cart = false;\n setInternalCartOpen(false);\n }\n onCartOpenChange?.(false);\n }\n }\n\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 notifyRef.current.cart = next && showCart;\n setInternalCartOpen(next);\n }\n onCartOpenChange?.(next);\n };\n\n const handleCartOpenChange = (open: boolean) => {\n if (!isCartControlled) {\n notifyRef.current.cart = open && showCart;\n setInternalCartOpen(open);\n }\n onCartOpenChange?.(open);\n };\n\n // Adjust state during render (not a mount effect) so server markup and first client render agree.\n if (effectiveCartOpen) {\n // The sidecart supersedes the menus; fully reset them (timers cancelled below) so this leaves\n // the same state as the interaction close path.\n if (openUtilityDropdown !== null) {\n setOpenUtilityDropdown(null);\n }\n if (mobileMenuOpen) {\n setMobileMenuOpen(false);\n }\n if (isMobileMenuClosing) {\n setIsMobileMenuClosing(false);\n }\n if (\n openTopLevelItemIndex !== null ||\n mobileActiveCategoryIndex !== null ||\n isMobileSecondPanelClosing ||\n isMobileThirdPanelClosing\n ) {\n resetMobilePanelState();\n }\n } else if (openUtilityDropdown !== null && activeUtilityDropdown === null) {\n // A utility dropdown whose control is no longer shown.\n setOpenUtilityDropdown(null);\n }\n\n if (!isCartControlled && internalCartOpen && !showCart) {\n // An uncontrolled sidecart whose content was removed.\n setInternalCartOpen(false);\n }\n\n // Report surface changes no interaction/media handler covers (a controlled cart superseding a\n // surface, or content removed from an open one). notifyRef is kept current by the handlers and\n // seeded with the initial state, so this never double-reports and stays quiet at mount.\n useEffect(() => {\n const lastNotified = notifyRef.current;\n\n if (mobileMenuOpen !== lastNotified.mobileMenu) {\n lastNotified.mobileMenu = mobileMenuOpen;\n onMobileMenuToggle?.(mobileMenuOpen);\n }\n\n if (openTopLevelItemIndex !== lastNotified.desktopItem) {\n lastNotified.desktopItem = openTopLevelItemIndex;\n onDesktopItemToggle?.(openTopLevelItemIndex);\n }\n\n (['search', 'language', 'login'] as const).forEach((kind) => {\n const open = activeUtilityDropdown === kind;\n if (open !== lastNotified[kind]) {\n lastNotified[kind] = open;\n notifyUtilityOpenChange(kind, open);\n }\n });\n\n // A controlled sidecart's open state is owned by the parent, so never report it back.\n if (!isCartControlled) {\n const open = internalCartOpen && showCart;\n if (open !== lastNotified.cart) {\n lastNotified.cart = open;\n onCartOpenChange?.(open);\n }\n }\n });\n\n // Cancel the menus' pending timers when a cart supersedes them, so a stale deferred callback\n // cannot mutate state or steal focus after reopen (the interaction close path does the same).\n useEffect(() => {\n if (!effectiveCartOpen) {\n return;\n }\n\n clearTimeout(mobileSecondPanelCloseTimeoutRef.current ?? undefined);\n mobileSecondPanelCloseTimeoutRef.current = null;\n clearTimeout(mobileThirdPanelCloseTimeoutRef.current ?? undefined);\n mobileThirdPanelCloseTimeoutRef.current = null;\n clearTimeout(mobileMenuCloseResetTimeoutRef.current ?? undefined);\n mobileMenuCloseResetTimeoutRef.current = null;\n clearTimeout(focusMobileSecondPanelTimeoutRef.current ?? undefined);\n focusMobileSecondPanelTimeoutRef.current = null;\n // Clear the keyboard-intent ref with its timer so a later pointer-open does not replay the handoff.\n focusMobilePanelBackOnOpenRef.current = false;\n clearTimeout(focusMobileThirdPanelTimeoutRef.current ?? undefined);\n focusMobileThirdPanelTimeoutRef.current = null;\n focusMobileThirdPanelBackOnOpenRef.current = false;\n clearTimeout(resetMobileThirdPanelScrollTimeoutRef.current ?? undefined);\n resetMobileThirdPanelScrollTimeoutRef.current = null;\n clearTimeout(focusReturnToMobileTopLevelItemTimeoutRef.current ?? undefined);\n focusReturnToMobileTopLevelItemTimeoutRef.current = null;\n clearTimeout(focusReturnToMobileCategoryTimeoutRef.current ?? undefined);\n focusReturnToMobileCategoryTimeoutRef.current = null;\n }, [effectiveCartOpen]);\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 notifyRef.current.desktopItem = 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 const isInCurrentPath = column.links.some((link) =>\n isLinkInCurrentPath(link, currentPathname),\n );\n\n return (\n <li\n key={`mobile-category-${column.heading}-${index}`}\n className={\n styles[\n 'main-navigation__mobile-level-2-category-item'\n ]\n }\n >\n <button\n ref={(node) => {\n mobileLevelTwoCategoryButtonRefs.current[\n index\n ] = node;\n }}\n type=\"button\"\n className={cn(\n styles[\n 'main-navigation__mobile-level-2-category-button'\n ],\n isInCurrentPath &&\n styles[\n 'main-navigation__mobile-level-2-category-button--current'\n ],\n focusStyles.focusableInset,\n )}\n aria-current={isInCurrentPath ? 'true' : undefined}\n onClick={() => openMobileCategoryPanel(index)}\n onKeyDown={(event) => {\n if (\n event.key !== 'Enter' ||\n isDesktopViewport()\n ) {\n return;\n }\n\n event.preventDefault();\n focusMobileThirdPanelBackOnOpenRef.current = true;\n openMobileCategoryPanel(index);\n }}\n >\n <span>\n {getColumnHeading(\n column.heading,\n column.overflow,\n )}\n </span>\n <ChevronRight />\n </button>\n </li>\n );\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 const isInCurrentPage = isLinkInCurrentPage(\n link,\n currentPathname,\n );\n\n return (\n <li\n key={`${selectedColumn.heading}-${index}`}\n className={\n styles[\n 'main-navigation__mobile-level-3-item'\n ]\n }\n >\n {renderNavigationLink({\n link,\n className: cn(\n styles[\n 'main-navigation__mobile-level-3-link'\n ],\n isInCurrentPage &&\n styles[\n 'main-navigation__mobile-level-3-link--current'\n ],\n focusStyles.focusableInset,\n ),\n ariaCurrent: isInCurrentPage\n ? 'page'\n : undefined,\n children: link.label,\n })}\n </li>\n );\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-current={isCurrentPathItem ? 'true' : undefined}\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","useId","useRef","useCallback","assignRef","useEffect","desktopMinWidthMediaQuery","isMobileViewportByEnvironment","isMobileIosDeviceByEnvironment","isDesktopViewport","index","isDesktopViewportByEnvironment","styles","className","toNavigableHref","getLinkRel","getLinkTarget","isExternalLink","props","getLanguageToggleAnnouncements","cn","jsxs","focusStyles","ChevronRight","isExternalTarget","Open","ArrowRight","IconButton","isLinkInCurrentPath","Fragment","isLinkInCurrentPage","textDecorationStyles","elevationStyles","isItemInCurrentPath","overlayStyles","Globe","languageLinkAriaLabels","Search","Cart","Button","Close","Menu","Drawer"],"mappings":"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"}