{"version":3,"file":"dist.js","names":[],"sources":["../resources/javascript/mega-menu/dom-elements.js","../resources/javascript/mega-menu/intersection-observer.js","../resources/javascript/mega-menu/deactive-submenus.js","../resources/javascript/mega-menu/toggle-sub-menu.js","../node_modules/tua-body-scroll-lock/dist/tua-bsl.mjs","../resources/javascript/mega-menu/handle-scroll-lock.js","../resources/javascript/mega-menu/toggle-search.js","../resources/javascript/mega-menu/toggle-mobile-menu.js","../resources/javascript/mega-menu/background-click.js","../resources/javascript/mega-menu/index.js","../resources/javascript/dist.js"],"sourcesContent":["export const megaMenu = document.querySelector('[data-mega-menu]');\n\nexport const toggleSubMenuButtons = document.querySelectorAll(\n    '[data-toggle-submenu]'\n);\n\nexport const toggleMobileMenuButton = document.querySelector(\n    '[data-toggle-mobile-menu]'\n);\n\nexport const mobileScrollContainers = Array.from(\n    document.querySelectorAll('[data-subheader-scroll]')\n);\n\nexport const toggleSearchButton = document.querySelector(\n    '[data-toggle-search]'\n);\n\nexport const search = document.querySelector('[data-search]');\n","import { megaMenu } from './dom-elements';\n\n/**\n * Initializes Intersection Observer to manage header position based on scrolling.\n */\nexport const initIntersectionObserver = () => {\n    const sentinel = document.querySelector('[data-sentinel]');\n    const observer = new IntersectionObserver(\n        entries => {\n            const position = entries[0].isIntersecting ? 'static' : 'sticky';\n            megaMenu.setAttribute('data-position', position);\n        },\n        { threshold: 1.0 }\n    );\n    observer.observe(sentinel);\n};\n","import { toggleSubMenuButtons } from './dom-elements';\n\n/**\n * Deactivates all submenus by collapsing them and updating their ARIA attributes.\n * This ensures only one submenu is active at a time.\n */\nexport const deactivateAllSubMenus = () => {\n    for (const btn of toggleSubMenuButtons) {\n        // Remove the active class from the parent section\n        btn.parentElement.classList.remove('navigation__section--active');\n\n        // Set aria-expanded to false to indicate the button is collapsed\n        btn.setAttribute('aria-expanded', 'false');\n\n        // Get the submenu associated with the button\n        const subMenu = btn.nextElementSibling;\n\n        // If the submenu exists, set aria-hidden to true\n        if (subMenu) {\n            subMenu.setAttribute('aria-hidden', 'true');\n        }\n    }\n};\n","import { deactivateAllSubMenus } from './deactive-submenus';\n\n/**\n * Toggles the visibility of a submenu when its corresponding button is clicked.\n * Also updates ARIA attributes to reflect the state of the submenu.\n *\n * @param {HTMLElement} button - The button that controls the submenu.\n */\nexport const toggleSubMenu = button => {\n    // Get the parent container of the button (the section containing the submenu)\n    const subMenuContainer = button.parentElement;\n\n    // Check if the submenu is currently active\n    const isActive = subMenuContainer.classList.contains(\n        'navigation__section--active'\n    );\n\n    // Deactivate all submenus to ensure only one is open at a time\n    deactivateAllSubMenus();\n\n    // Toggle the active class on the submenu container\n    subMenuContainer.classList.toggle('navigation__section--active', !isActive);\n\n    // Update ARIA attributes for the current button and submenu\n    button.setAttribute('aria-expanded', !isActive);\n\n    // Get the submenu associated with the button\n    const subMenu = button.nextElementSibling;\n\n    // If the submenu exists, toggle aria-hidden to reflect its visibility\n    if (subMenu) {\n        subMenu.setAttribute('aria-hidden', isActive);\n    }\n\n    // Dispatch custom events when submenu is opened or closed\n    const eventName = isActive ? 'submenu-closed' : 'submenu-opened';\n\n    document.dispatchEvent(\n        new CustomEvent(eventName, { detail: { button, isActive: !isActive } })\n    );\n};\n","/**\n * tua-body-scroll-lock v1.6.3\n * (c) 2026 Evinma, BuptStEve\n * @license MIT\n */\n\nvar isServer = function isServer() {\n  return typeof window === 'undefined';\n};\nvar detectOS = function detectOS(ua) {\n  ua = ua || navigator.userAgent;\n  var ipad = /(iPad).*OS\\s([\\d_]+)/.test(ua);\n  var iphone = !ipad && /(iPhone\\sOS)\\s([\\d_]+)/.test(ua);\n  var android = /(Android);?[\\s/]+([\\d.]+)?/.test(ua);\n  var ios = iphone || ipad;\n  return {\n    ios: ios,\n    android: android\n  };\n};\nfunction getEventListenerOptions(options) {\n  /* istanbul ignore if */\n  if (isServer()) return false;\n  if (!options) {\n    throw new Error('options must be provided');\n  }\n  var isSupportOptions = false;\n  var listenerOptions = {\n    get passive() {\n      isSupportOptions = true;\n      return undefined;\n    }\n  };\n  /* istanbul ignore next */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  var noop = function noop() {};\n  var testEvent = '__TUA_BSL_TEST_PASSIVE__';\n  window.addEventListener(testEvent, noop, listenerOptions);\n  window.removeEventListener(testEvent, noop, listenerOptions);\n  var capture = options.capture;\n  /* istanbul ignore next */\n  return isSupportOptions ? options : typeof capture !== 'undefined' ? capture : false;\n}\nfunction noticeRequiredTargetElement(targetElement) {\n  if (targetElement) return false;\n  if (targetElement === null) return false;\n  /* istanbul ignore if */\n  if (process.env.NODE_ENV === 'production') return false;\n  /* istanbul ignore if */\n  if (process.env.NODE_ENV !== 'test') {\n    console.warn('If scrolling is also required in the floating layer, ' + 'the target element must be provided.');\n  }\n  return true;\n}\n/**\n * Get global function that calls preventDefault\n */\nfunction getPreventEventDefault() {\n  if ('__BSL_PREVENT_DEFAULT__' in window) {\n    return window.__BSL_PREVENT_DEFAULT__;\n  }\n  window.__BSL_PREVENT_DEFAULT__ = function (event) {\n    if (!event.cancelable) return;\n    event.preventDefault();\n  };\n  return window.__BSL_PREVENT_DEFAULT__;\n}\nfunction toArray(x) {\n  if (!x) return [];\n  return Array.isArray(x) ? x : [x];\n}\n/**\n * Check if element uses reversed flex direction\n */\nfunction isReversedFlex(element) {\n  var computedStyle = window.getComputedStyle(element);\n  var flexDirection = computedStyle.flexDirection;\n  return {\n    column: flexDirection === 'column-reverse',\n    row: flexDirection === 'row-reverse'\n  };\n}\n/**\n * Check if element is at scroll boundary\n * Supports both normal and reversed flex directions\n */\nfunction getScrollBoundaryState(element, clientX, clientY) {\n  var scrollTop = element.scrollTop,\n    scrollLeft = element.scrollLeft,\n    scrollWidth = element.scrollWidth,\n    scrollHeight = element.scrollHeight,\n    clientWidth = element.clientWidth,\n    clientHeight = element.clientHeight;\n  // Check if element uses reversed flex direction\n  var reversed = isReversedFlex(element);\n  // For column-reverse: visual top is at max scrollTop, visual bottom is at 0\n  // For normal: visual top is at 0, visual bottom is at max scrollTop\n  var isOnTop;\n  var isOnBottom;\n  if (reversed.column) {\n    // In column-reverse, scrolling down (clientY < 0) when at max scrollTop means at visual top\n    isOnTop = clientY > 0 && Math.abs(scrollTop) + clientHeight + 1 >= scrollHeight;\n    isOnBottom = clientY < 0 && Math.abs(scrollTop) <= 1;\n  } else {\n    // Normal behavior\n    isOnTop = clientY > 0 && scrollTop === 0;\n    isOnBottom = clientY < 0 && scrollTop + clientHeight + 1 >= scrollHeight;\n  }\n  // For row-reverse: visual left is at max scrollLeft, visual right is at 0\n  // For normal: visual left is at 0, visual right is at max scrollLeft\n  var isOnLeft;\n  var isOnRight;\n  if (reversed.row) {\n    // In row-reverse, scrolling right (clientX < 0) when at max scrollLeft means at visual left\n    isOnLeft = clientX > 0 && Math.abs(scrollLeft) + clientWidth + 1 >= scrollWidth;\n    isOnRight = clientX < 0 && Math.abs(scrollLeft) <= 1;\n  } else {\n    // Normal behavior\n    isOnLeft = clientX > 0 && scrollLeft === 0;\n    isOnRight = clientX < 0 && scrollLeft + clientWidth + 1 >= scrollWidth;\n  }\n  return {\n    isOnTop: isOnTop,\n    isOnBottom: isOnBottom,\n    isOnLeft: isOnLeft,\n    isOnRight: isOnRight\n  };\n}\n\nvar initialLockState = {\n  lockedNum: 0,\n  lockedElements: [],\n  unLockCallback: null,\n  documentListenerAdded: false,\n  initialClientPos: {\n    clientX: 0,\n    clientY: 0\n  }\n};\n/**\n * get current lockState\n * @param options\n * @returns lockState\n */\nfunction getLockState(options) {\n  if (isServer()) return initialLockState;\n  /** use local lockState */\n  if (!(options === null || options === void 0 ? void 0 : options.useGlobalLockState)) return getLockState.lockState;\n  /** use global lockState */\n  var lockState = '__BSL_LOCK_STATE__' in window ? Object.assign(Object.assign({}, initialLockState), window.__BSL_LOCK_STATE__) : initialLockState;\n  /** assign to global */\n  window.__BSL_LOCK_STATE__ = lockState;\n  return lockState;\n}\ngetLockState.lockState = initialLockState;\n\nfunction handleScroll(event, targetElement, initialClientPos) {\n  if (targetElement) {\n    var clientX = event.targetTouches[0].clientX - initialClientPos.clientX;\n    var clientY = event.targetTouches[0].clientY - initialClientPos.clientY;\n    var isVertical = Math.abs(clientY) > Math.abs(clientX);\n    // Get scroll boundary state\n    var _getScrollBoundarySta = getScrollBoundaryState(targetElement, clientX, clientY),\n      isOnTop = _getScrollBoundarySta.isOnTop,\n      isOnBottom = _getScrollBoundarySta.isOnBottom,\n      isOnLeft = _getScrollBoundarySta.isOnLeft,\n      isOnRight = _getScrollBoundarySta.isOnRight;\n    if (isVertical && (isOnTop || isOnBottom) || !isVertical && (isOnLeft || isOnRight)) {\n      return getPreventEventDefault()(event);\n    }\n  }\n  event.stopPropagation();\n  return true;\n}\n\nfunction setOverflowForPc(options) {\n  var _a;\n  var $html = document.documentElement;\n  var htmlStyle = Object.assign({}, $html.style);\n  var withPaddingRight = (_a = options === null || options === void 0 ? void 0 : options.withPaddingRight) !== null && _a !== void 0 ? _a : true;\n  var scrollBarWidth = window.innerWidth - $html.clientWidth;\n  var previousPaddingRight = parseInt(window.getComputedStyle($html).paddingRight, 10);\n  $html.style.overflow = 'hidden';\n  $html.style.boxSizing = 'border-box';\n  if (withPaddingRight) {\n    $html.style.paddingRight = \"\".concat(scrollBarWidth + previousPaddingRight, \"px\");\n  }\n  return function () {\n    ['overflow', 'boxSizing', 'paddingRight'].forEach(function (x) {\n      $html.style[x] = htmlStyle[x] || '';\n    });\n  };\n}\nfunction setOverflowForMobile(options) {\n  var $html = document.documentElement;\n  var $body = document.body;\n  var scrollTop = $html.scrollTop || $body.scrollTop;\n  var htmlStyle = Object.assign({}, $html.style);\n  var bodyStyle = Object.assign({}, $body.style);\n  $html.style.height = '100%';\n  $html.style.overflow = 'hidden';\n  $body.style.top = \"-\".concat(scrollTop, \"px\");\n  $body.style.width = '100%';\n  $body.style.height = 'auto';\n  $body.style.position = 'fixed';\n  $body.style.overflow = (options === null || options === void 0 ? void 0 : options.overflowType) || 'hidden';\n  return function () {\n    $html.style.height = htmlStyle.height || '';\n    $html.style.overflow = htmlStyle.overflow || '';\n    ['top', 'width', 'height', 'overflow', 'position'].forEach(function (x) {\n      $body.style[x] = bodyStyle[x] || '';\n    });\n    var supportsNativeSmoothScroll = 'scrollBehavior' in document.documentElement.style;\n    if (supportsNativeSmoothScroll) {\n      window.scrollTo({\n        top: scrollTop,\n        behavior: 'instant'\n      });\n    } else {\n      window.scrollTo(0, scrollTop);\n    }\n  };\n}\n\n/**\n * lock body scroll\n * @param targetElement the element(s) still needs scrolling（iOS only）\n * @param options\n */\nfunction lock(targetElement, options) {\n  if (isServer()) return;\n  noticeRequiredTargetElement(targetElement);\n  var detectRes = detectOS();\n  var lockState = getLockState(options);\n  if (detectRes.ios) {\n    toArray(targetElement).filter(function (e) {\n      return e && lockState.lockedElements.indexOf(e) === -1;\n    }).forEach(function (element) {\n      element.ontouchstart = function (event) {\n        var _event$targetTouches$ = event.targetTouches[0],\n          clientX = _event$targetTouches$.clientX,\n          clientY = _event$targetTouches$.clientY;\n        lockState.initialClientPos = {\n          clientX: clientX,\n          clientY: clientY\n        };\n      };\n      element.ontouchmove = function (event) {\n        handleScroll(event, element, lockState.initialClientPos);\n      };\n      lockState.lockedElements.push(element);\n    });\n    addTouchMoveListener(lockState);\n    if (options === null || options === void 0 ? void 0 : options.setOverflowForIOS) {\n      lockState.unLockCallback = setOverflowForPc(options);\n    }\n  } else if (lockState.lockedNum <= 0) {\n    lockState.unLockCallback = detectRes.android ? setOverflowForMobile(options) : setOverflowForPc(options);\n  }\n  lockState.lockedNum += 1;\n}\n/**\n * unlock body scroll\n * @param targetElement the element(s) still needs scrolling（iOS only）\n * @param options\n */\nfunction unlock(targetElement, options) {\n  var _a;\n  if (isServer()) return;\n  noticeRequiredTargetElement(targetElement);\n  var lockState = getLockState(options);\n  lockState.lockedNum -= 1;\n  if (lockState.lockedNum > 0) return;\n  (_a = lockState.unLockCallback) === null || _a === void 0 ? void 0 : _a.call(lockState);\n  if (!detectOS().ios) return;\n  toArray(targetElement).forEach(function (element) {\n    var index = lockState.lockedElements.indexOf(element);\n    if (element && index !== -1) {\n      element.ontouchmove = null;\n      element.ontouchstart = null;\n      lockState.lockedElements.splice(index, 1);\n    }\n  });\n  removeTouchMoveListener(lockState);\n}\n/**\n * clear all body locks\n * @param options\n */\nfunction clearBodyLocks(options) {\n  var _a;\n  if (isServer()) return;\n  var lockState = getLockState(options);\n  lockState.lockedNum = 0;\n  (_a = lockState.unLockCallback) === null || _a === void 0 ? void 0 : _a.call(lockState);\n  if (!detectOS().ios) return;\n  if (lockState.lockedElements.length) {\n    var element = lockState.lockedElements.pop();\n    while (element) {\n      element.ontouchmove = null;\n      element.ontouchstart = null;\n      element = lockState.lockedElements.pop();\n    }\n  }\n  removeTouchMoveListener(lockState);\n}\nfunction addTouchMoveListener(lockState) {\n  if (!detectOS().ios) return;\n  if (lockState.documentListenerAdded) return;\n  document.addEventListener('touchmove', getPreventEventDefault(), getEventListenerOptions({\n    passive: false\n  }));\n  lockState.documentListenerAdded = true;\n}\nfunction removeTouchMoveListener(lockState) {\n  if (!lockState.documentListenerAdded) return;\n  document.removeEventListener('touchmove', getPreventEventDefault(), getEventListenerOptions({\n    passive: false\n  }));\n  lockState.documentListenerAdded = false;\n}\n\nexport { clearBodyLocks, getLockState, lock, unlock };\n","import { lock, unlock } from 'tua-body-scroll-lock';\nimport { megaMenu, mobileScrollContainers } from './dom-elements.js';\n\n/**\n * Toggles the scroll lock based on the mobile menu state.\n * If the mobile menu is active, unlock the scroll.\n * Otherwise, lock the background scroll but enable scrolling on the subheader.\n */\nexport const handleScrollLock = () => {\n    megaMenu.classList.contains('mega-menu--mobile-menu-active')\n        ? unlock()\n        : lock(mobileScrollContainers, {\n              overflowType: 'clip',\n          });\n};\n\n/*\n * Unlock the scroll\n * This is needed for example when opening the search while the menu is currently open (and the screen locked)\n */\nexport const deactivateScrollLock = () => {\n    unlock();\n};\n","import { search, toggleSearchButton } from './dom-elements';\nimport { deactivateScrollLock } from './handle-scroll-lock';\n\n/**\n * Toggles or forcefully sets the state of the search menu.\n *\n * @param {boolean|null} isActive - If true, ensures search is open; if false, ensures it's closed; if null, toggles.\n */\nexport const toggleSearch = (isActive = null) => {\n    // Determine the final state: If isActive is provided, use it; otherwise, toggle normally.\n    isActive = isActive ?? search.classList.toggle('menu-search--active');\n\n    // Apply the class using the resolved state\n    search.classList.toggle('menu-search--active', isActive);\n\n    // Set aria-expanded to reflect whether the menu is open or closed\n    toggleSearchButton.setAttribute('aria-expanded', isActive);\n\n    if (isActive) {\n        deactivateScrollLock();\n        search.querySelector('.menu-search__input')?.focus();\n    }\n\n    // Set aria-label to provide context for screen readers\n    toggleSearchButton.setAttribute(\n        'aria-label',\n        isActive ? 'Close site search' : 'Open site search'\n    );\n\n    // Update ARIA attributes for the mega menu\n    search.setAttribute('aria-hidden', !isActive);\n\n    // Dispatch a custom event when the search is toggled\n    const eventName = isActive ? 'site-search-opened' : 'site-search-closed';\n\n    document.dispatchEvent(\n        new CustomEvent(eventName, { detail: { isActive } })\n    );\n};\n","import { megaMenu, toggleMobileMenuButton } from './dom-elements';\n\n/**\n * Toggles the visibility of the mobile menu and updates ARIA attributes\n * to reflect the state of the menu for accessibility.\n */\nexport const toggleMobileMenu = (isActive = null) => {\n    // Determine the final state: If isActive is provided, use it; otherwise, toggle normally.\n    isActive =\n        isActive ?? megaMenu.classList.toggle('mega-menu--mobile-menu-active');\n\n    // Apply the class using the resolved state\n    megaMenu.classList.toggle('mega-menu--mobile-menu-active', isActive);\n\n    // Set aria-expanded to reflect whether the menu is open or closed\n    toggleMobileMenuButton.setAttribute('aria-expanded', isActive);\n\n    // Set aria-label to provide context for screen readers\n    toggleMobileMenuButton.setAttribute(\n        'aria-label',\n        isActive ? 'Close mobile menu' : 'Open mobile menu'\n    );\n\n    // Update ARIA attributes for the mega menu\n    megaMenu.setAttribute('aria-hidden', !isActive);\n\n    // Dispatch a custom event when the search is toggled\n    const eventName = isActive ? 'mobile-menu-opened' : 'mobile-menu-closed';\n\n    document.dispatchEvent(\n        new CustomEvent(eventName, { detail: { isActive } })\n    );\n};\n","import { megaMenu, search } from './dom-elements';\nimport { toggleSearch } from './toggle-search';\nimport { deactivateAllSubMenus } from './deactive-submenus';\n\n/**\n * Handles clicks outside of the mega-menu and search elements,\n * closing the search and all open submenus.\n */\nexport const handleBackgroundClick = event => {\n    // Check if the click target is inside the mega-menu or search elements\n    if (megaMenu.contains(event.target) || search.contains(event.target)) {\n        return;\n    }\n\n    // Allow upstream sites to exclude specific elements (e.g. a notice bar)\n    // from triggering the close behaviour by adding a\n    // `data-mega-menu-ignore-click` attribute to the element.\n    if (\n        event.target.closest('[data-mega-menu-ignore-click]') ||\n        document.documentElement.dataset.megaMenuIgnoreClick\n    ) {\n        return;\n    }\n\n    // Close the search if it's open\n    if (search.classList.contains('menu-search--active')) {\n        toggleSearch(false);\n    }\n\n    // Close any open submenus\n    deactivateAllSubMenus();\n};\n","import { initIntersectionObserver } from './intersection-observer';\nimport { toggleSubMenu } from './toggle-sub-menu';\nimport { deactivateAllSubMenus } from './deactive-submenus';\nimport { toggleSearch } from './toggle-search';\nimport {\n    toggleSubMenuButtons,\n    toggleMobileMenuButton,\n    toggleSearchButton,\n} from './dom-elements';\nimport { toggleMobileMenu } from './toggle-mobile-menu';\nimport { handleScrollLock } from './handle-scroll-lock';\nimport { handleBackgroundClick } from './background-click';\n\nexport const initHeader = () => {\n    /**\n     * Initialise intersection observer\n     */\n    initIntersectionObserver();\n\n    /**\n     * Toggle subheader\n     */\n    for (const button of toggleSubMenuButtons ?? []) {\n        button.addEventListener('click', () => toggleSubMenu(button));\n    }\n\n    /**\n     * Toggle mobile menu\n     */\n    toggleMobileMenuButton?.addEventListener('click', () => {\n        handleScrollLock();\n        toggleMobileMenu();\n    });\n\n    /**\n     * Handle background click\n     */\n    document.addEventListener('click', e => {\n        handleBackgroundClick(e);\n    });\n\n    /*\n     * Toggle search\n     */\n    toggleSearchButton?.addEventListener('click', () => {\n        toggleSearch();\n    });\n\n    /**\n     * Listens for the 'submenu-opened' event and forces the search to close if it's open.\n     */\n    document.addEventListener('submenu-opened', () => {\n        toggleSearch(false);\n    });\n\n    /**\n     * Listens for the 'mobile-menu-opened' event and forces the search to close if it's open.\n     */\n    document.addEventListener('mobile-menu-opened', () => {\n        toggleSearch(false);\n    });\n\n    /**\n     * Listens for the 'mobile-menu-closed' event and deactivates all submenus when mobile menu closes.\n     */\n    document.addEventListener('mobile-menu-closed', () => {\n        deactivateAllSubMenus();\n    });\n\n    /**\n     * Listens for the 'site-search-opened' event and deactivates all submenus and the mobiel menu when search opens.\n     */\n    document.addEventListener('site-search-opened', () => {\n        deactivateAllSubMenus();\n        toggleMobileMenu(false);\n    });\n};\n","import { initHeader } from './mega-menu';\n\nif (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initHeader);\n} else {\n    initHeader();\n}\n"],"x_google_ignoreList":[4],"mappings":"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"}