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