{"version":3,"file":"js/header.1cb427392397a8aaca50.js","mappings":"mBAIe,MAAMA,EACRC,YACAC,mBAETC,cACIC,KAAKH,YAAcI,SAASC,gBAC5BF,KAAKF,mBAAqBG,SAASE,cAAc,gBAEjDH,KAAKI,MACT,CAEQA,OACJ,GAAIJ,KAAKF,mBAAoB,CACzB,MAAMO,EAASL,KAAKF,mBAAmBQ,aACvCN,KAAKH,YAAYU,MAAMC,YAAY,uBAAwBH,EAAS,MAEhDJ,SAASE,cAAc,8BAE/BM,iBAAiB,SAAS,KAClCT,KAAKU,cAAc,G,CAG/B,CAEQA,eACJV,KAAKF,oBAAoBa,UAAUC,IAAI,uBACvCZ,KAAKH,YAAYU,MAAMC,YAAY,uBAAwB,OAC3D,MAAMK,GAAMb,KAAKF,oBAAoBK,cAAc,oBAAwCW,MAE3F,GAAU,MAAND,EAAY,CACZ,MAAME,EAAqC,CACvCC,QAAQ,EACRH,GAAIA,GAGRb,KAAKiB,UAAU,kBAAmBF,EAAY,E,CAEtD,CAEQE,UAAUC,EAAcJ,EAA+BK,GAC3D,MAAMC,EAAU,IAAIC,KACpBD,EAAQE,QAAQF,EAAQG,UAAYJ,GACpC,MAAMK,EAAcC,mBAAmBC,KAAKC,UAAUb,IAAU,aAAaM,EAAQQ,wBACrF3B,SAAS4B,OAAS,GAAGX,KAAQM,GACjC,EChDW,MAAMM,EACVC,gBACAC,cAETjC,cACEC,KAAK+B,gBAAkB9B,SAASgC,iBAAiB,qDACjDjC,KAAKgC,cAAgB/B,SAASgC,iBAAiB,wBAE/CjC,KAAKI,MACP,CAEQA,OACFJ,KAAK+B,gBAAgBG,OAAS,GAChClC,KAAK+B,gBAAgBI,SAAQC,IAC3BA,EAAO3B,iBAAiB,SAAS,KAC/BT,KAAKqC,eAAeD,EAAO,GAC3B,IAIApC,KAAKgC,eACThC,KAAKgC,cAAcG,SAAQG,IACzBA,EAAK7B,iBAAiB,SAAU8B,IAC9BA,EAAEC,iBACFC,OAAOC,SAASC,KAAQL,EAA2BK,KAAOF,OAAOC,SAASE,MAAM,GAChF,GAGR,CAEQP,eAAeD,GACrB,MAAMS,EAAWT,EAAOU,mBAEnBD,EAASlC,UAAUoC,SAAS,8BAI/B/C,KAAKgD,cAAcH,GACnB7C,KAAKiD,aAAab,KAJlBpC,KAAKkD,aAAaL,GAClB7C,KAAKiD,aAAab,GAKtB,CAEQc,aAAaL,GACnBA,EAASlC,UAAUC,IAAI,4BACzB,CAEQoC,cAAcH,GACpBA,EAASlC,UAAUwC,OAAO,4BAC5B,CAEQF,aAAab,GACdA,EAAOzB,UAAUoC,SAAS,8BAI7BX,EAAOzB,UAAUwC,OAAO,6BACxBf,EAAOgB,aAAa,gBAAiB,WAJrChB,EAAOzB,UAAUC,IAAI,6BACrBwB,EAAOgB,aAAa,gBAAiB,QAKzC,EC1DK,MCQMC,EAAeC,IACxB,MAAMC,EAAUtD,SAASE,cAAc,oBACjCqD,EAAsBvD,SAASE,cAAc,mCAC7CsD,EAAiBxD,SAASE,cAAc,6BACxCuD,EAAkBzD,SAASE,cAAc,8BACzCwD,EAAe1D,SAASE,cAAc,2BAC5C,IAAIyD,GAAkB,EAEtB,MAQMC,EAAO,KACTJ,EAAe9C,UAAUC,IAAI,kCAC7BX,SAAS6D,KAAKnD,UAAUC,IAAI,0BAA2B,yBACvDmD,IAEAC,YAAW,KACPN,EAAgB/C,UAAUC,IAAI,sCAC9B+C,EAAahD,UAAUC,IAAI,kCAAkC,GAC9D,IAEHX,SAASQ,iBAAiB,UAAWwD,GAErChB,IACAW,GAAS,CAAI,EAGXM,EAAQ,KACVP,EAAahD,UAAUwC,OAAO,mCAC9BO,EAAgB/C,UAAUwC,OAAO,sCACjClD,SAAS6D,KAAKnD,UAAUwC,OAAO,0BAA2B,yBAC1DlD,SAASC,gBAAgBK,MAAM4D,eAAe,qBAE9CC,IAEAJ,YAAW,KACPP,EAAe9C,UAAUwC,OAAO,iCAAiC,GAClE,KAEHlD,SAASoE,oBAAoB,UAAWJ,GAExChB,IACAW,GAAS,CAAK,EAwBZG,EAAuB,KACzB,MAAMO,EDhFmB,MAC7B,MAAMC,EAAStE,SAASuE,cAAc,OACtCD,EAAOhE,MAAMkE,WAAa,SAC1BF,EAAOhE,MAAMmE,SAAW,SACxBzE,SAAS6D,KAAKa,YAAYJ,GAC1B,MAAMK,EAAQ3E,SAASuE,cAAc,OACrCD,EAAOI,YAAYC,GACnB,MAAMN,EAAkBC,EAAOM,YAAcD,EAAMC,YAGnD,OAFAN,EAAOO,WAAWC,YAAYR,GAEvBD,CAAc,ECsEcU,GAE/B/E,SAASC,gBAAgBK,MAAMC,YAAY,oBAAqB8D,EAAiB,MACjFrE,SAAS6D,KAAKvD,MAAM0E,aAAe,GAAGX,MACtChB,EAAc/C,MAAM0E,aAAe,GAAGX,MACtChB,EAAc/C,MAAM2E,YAAc,IAAIZ,MACtCd,EAAoBjD,MAAM2E,YAAc,GAAGZ,KAAkB,EAG3DF,EAAsB,KACxBnE,SAAS6D,KAAKqB,gBAAgB,SAC9B7B,EAAc6B,gBAAgB,SAC9B3B,EAAoB2B,gBAAgB,QAAQ,EAG1ClC,EAAe,KACjB,MAAMmC,EAAyB5B,EAAoBrD,cAAc,gCAC3DkF,EAAwB7B,EAAoBrD,cAAc,+BAE1DmF,EAAe9B,EAAoB+B,QAAQC,YAC3CC,EAAsBH,GAAMI,MAAM,MAClCC,EAA+B,CACjC9B,KAAM4B,EAAU,GAChBvB,MAAOuB,EAAU,IAGjBjC,EAAoB7C,UAAUoC,SAAS,6CAOvCS,EAAoB7C,UAAUwC,OAAO,4CACrCK,EAAoBJ,aAAa,gBAAiB,SAClDgC,EAAuBQ,YAAcD,EAAgB9B,KACrDuB,EAAuBzE,UAAUC,IAAI,WACrCyE,EAAsB1E,UAAUwC,OAAO,aAVvCK,EAAoB7C,UAAUC,IAAI,4CAClC4C,EAAoBJ,aAAa,gBAAiB,QAClDgC,EAAuBQ,YAAcD,EAAgBzB,MACrDkB,EAAuBzE,UAAUwC,OAAO,WACxCkC,EAAsB1E,UAAUC,IAAI,W,EAUtCqD,EAAuB4B,ICzHR,EAACA,EAAsBC,KAE9C,GADmC,QAAdD,EAAME,KACNF,EAAMG,iBACzB,OAEF,MAEMC,EADmBC,MAAMC,KAAKL,EAAM7D,iBADhB,qFAEwBmE,QAAO7C,GAAWA,EAAQ8C,aAAe,IAErFC,EAAwBL,EAAyB,GACjDM,EAAuBN,EAAyBA,EAAyB/D,OAAS,GAEpF2D,EAAMW,SACJvG,SAASwG,gBAAkBH,IAC7BC,EAAqBG,QACrBb,EAAMrD,kBAECvC,SAASwG,gBAAkBF,IACpCD,EAAsBI,QACtBb,EAAMrD,iB,EDuGFmE,CAAUd,EAAOtC,EAAQ,EAIzBC,EAAoB/C,iBAAiB,SAAS,KA7GzCmD,EAGDM,IAFAL,GA6Ga,IAGjB5D,SAASQ,iBAAiB,SAAUoF,IAC5BjC,GAzEgB,CAACiC,IACrBA,EAAMe,kBAAkBC,SACMhB,EAAMe,SAEblD,GACnBQ,G,EAqEA4C,CAAoBjB,E,IAI5BpD,OAAOhC,iBAAiB,SAAUoF,IAC1BjC,GArEO,CAACiC,IACZA,EAAMG,mBAIQ,WAAdH,EAAME,KACN7B,IAEJ2B,EAAMrD,iBAAgB,EA8DduE,CAAWlB,E,GAKX,EEzID,MAAMmB,EACRC,qBAETlH,cACIC,KAAKiH,qBAAuBhH,SAASgC,iBAAiB,iCAEtDjC,KAAKI,MACT,CAEQA,OACAJ,KAAKiH,qBAAqB/E,OAAS,GACnClC,KAAKiH,qBAAqB9E,SAAQC,IAC9BA,EAAO3B,iBAAiB,SAAS,KAC7BT,KAAKkH,cAAc9E,EAAO,GAC5B,GAGd,CAEQ8E,cAAc9E,GAClB,MACM+E,EADgB/E,EAAOgF,cACCtE,mBAEzBqE,EAAQxG,UAAUoC,SAAS,kBAI5B/C,KAAKqH,aAAaF,GAClBnH,KAAKiD,aAAab,KAJlBpC,KAAKsH,YAAYH,GACjBnH,KAAKiD,aAAab,GAK1B,CAEQkF,YAAYH,GAChBA,EAAQxG,UAAUC,IAAI,gBAC1B,CAEQyG,aAAaF,GACjBA,EAAQxG,UAAUwC,OAAO,gBAC7B,CAEQF,aAAab,GACjB,MAAMmF,EAAmBnF,EAAOjC,cAAc,YAExCmF,EAAelD,EAAOmD,QAAQC,YAC9BC,EAAsBH,GAAMI,MAAM,MAClC8B,EACQ/B,EAAU,GADlB+B,EAEM/B,EAAU,GAFhB+B,EAGQ/B,EAAU,GAGpBrD,EAAOzB,UAAUoC,SAAS,0CAK1BX,EAAOzB,UAAUwC,OAAO,yCACxBf,EAAOgB,aAAa,gBAAiB,SACrCmE,EAAiB3B,YAAc,GAAG4B,KAAqBA,MANvDpF,EAAOzB,UAAUC,IAAI,yCACrBwB,EAAOgB,aAAa,gBAAiB,QACrCmE,EAAiB3B,YAAc,GAAG4B,KAAuBA,IAMjE,EC5DJ,IAAKC,GAAL,SAAKA,GACD,eACA,kBACH,CAHD,CAAKA,IAAAA,EAAS,KAKd,MAAMC,EAAY,KACd,MAAMnE,EAAUtD,SAASE,cAAc,WACvC,IAAIwH,EAAwB,EACxBC,EAAmB,EACnBC,EAA6BJ,EAAUK,KACvCC,EAAyBC,KAAKC,KAAKxF,OAAOyF,SAC1CC,GAA0B,EAE9B,MAsBMC,EAAmB,KACbJ,KAAKC,KAAKxF,OAAOyF,SAAWH,EAAiBJ,GACjDU,KAGAR,IAAoBJ,EAAUa,IAAMT,IAAoBJ,EAAUK,MAAQE,KAAKC,KAAKxF,OAAOyF,SAAWzF,OAAO8F,aAAetI,SAAS6D,KAAKxD,cAAgBL,SAAS6D,KAAKnD,UAAUoC,SAAS,4BAA8BoF,KACzNK,IACAT,EAAiBC,KAAKC,KAAKxF,OAAOyF,S,EAIpCG,EAAO,KACJ9E,GAAS5C,UAAUoC,SAAS,mBAC7BQ,GAAS5C,UAAUC,IAAI,iB,EAIzB4H,EAAO,KACLjF,GAAS5C,UAAUoC,SAAS,mBAC5BQ,GAAS5C,UAAUwC,OAAO,iB,EAK1BI,IACAoE,EAAgBpE,EAAQ8C,cAG5B,IAAIzG,EACJ,IAAIkC,EACJuB,EAAYE,GACZ,IAAIyD,EAEJvE,OAAOhC,iBAAiB,SC1EzB,SAAkBgI,EAAgCC,EAAkB,KACvE,IAAIC,EACJ,MAAO,IAAIC,KACPC,aAAaF,GACbA,EAAQ3E,YAAW,KAAQyE,KAAQG,EAAK,GAAKF,EAAQ,CAE7D,CDoE0CI,EAAS,KArDvCjB,EADC5H,SAAS6D,KAAKiF,wBAAyBC,IAAMpB,EAC5BH,EAAUa,GAEVb,EAAUK,KAGhCF,EAAY3H,SAAS6D,KAAKiF,wBAAyBC,IAkD/CZ,GAAkB,GACnB,MAEH3F,OAAOhC,iBAAiB,SAAUoF,IAlDR,CAACA,IAC3B,GAAIA,EAAMe,kBAAkBqC,YAAa,CACrC,MAAMC,EAAmBrD,EAAMe,OAG3BuB,IADA5E,GAASR,SAASmG,E,GA+CtBC,CAAsBtD,GACtBuC,GAAkB,IACnB,EAGK,EAGhBnI,SAASQ,iBAAiB,oBAAoB,KAC1CiH,GAAW,G","sources":["webpack:///./Features/Layout/Features/Header/Features/Disturbance/scripts/Disturbance.ts","webpack:///./Features/Layout/Features/Header/Features/ToolMenu/scripts/ToolMenu.ts","webpack:///./Frontend/js/util/getScrollbarWidth.ts","webpack:///./Features/Layout/Features/Header/scripts/mainNavigation.ts","webpack:///./Frontend/js/util/trapFocus.ts","webpack:///./Features/Layout/Features/Header/Features/Menu/scripts/Menu.ts","webpack:///./Features/Layout/Features/Header/scripts/header.ts","webpack:///./Frontend/js/util/debounce.ts"],"sourcesContent":["interface IDisturbanceCookieData {\r\n closed: boolean;\r\n id: string;\r\n}\r\nexport default class Disturbance {\r\n readonly htmlElement: HTMLHtmlElement;\r\n readonly disturbanceElement: HTMLDivElement | null;\r\n \r\n constructor() {\r\n this.htmlElement = document.documentElement as HTMLHtmlElement;\r\n this.disturbanceElement = document.querySelector('.disturbance');\r\n \r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n if (this.disturbanceElement) {\r\n const height = this.disturbanceElement.scrollHeight;\r\n this.htmlElement.style.setProperty('--disturbance-height', height + 'px');\r\n\r\n const closeButton = document.querySelector('.disturbance__close-button') as HTMLButtonElement;\r\n\r\n closeButton.addEventListener('click', (): void => {\r\n this.closeMessage();\r\n });\r\n }\r\n }\r\n \r\n private closeMessage(): void {\r\n this.disturbanceElement?.classList.add('disturbance--hidden');\r\n this.htmlElement.style.setProperty('--disturbance-height', 0 + 'px');\r\n const id = (this.disturbanceElement?.querySelector('#disturbance-id') as HTMLInputElement).value;\r\n\r\n if (id != null) {\r\n const cookieData: IDisturbanceCookieData = {\r\n closed: true,\r\n id: id\r\n };\r\n\r\n this.setCookie('jvm_disturbance', cookieData, 2); // Set the cookie to expire in 2 days \r\n }\r\n }\r\n \r\n private setCookie(name: string, value: IDisturbanceCookieData, days: number): void {\r\n const expires = new Date();\r\n expires.setDate(expires.getDate() + days);\r\n const cookieValue = encodeURIComponent(JSON.stringify(value)) + `; expires=${expires.toUTCString()}; path=/`;\r\n document.cookie = `${name}=${cookieValue}`;\r\n }\r\n}\r\n","export default class ToolMenu {\r\n readonly dropdownButtons: NodeListOf;\r\n readonly languageLinks: NodeListOf;\r\n\r\n constructor() {\r\n this.dropdownButtons = document.querySelectorAll('.tool-menu__item--has-dropdown > .tool-menu__link') as NodeListOf;\r\n this.languageLinks = document.querySelectorAll(\".language-menu__link\");\r\n\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n if (this.dropdownButtons.length > 0) {\r\n this.dropdownButtons.forEach(button => {\r\n button.addEventListener('click', (): void => {\r\n this.toggleDropdown(button);\r\n });\r\n });\r\n }\r\n\r\n if (!!this.languageLinks) {\r\n this.languageLinks.forEach(link => {\r\n link.addEventListener('click', (e: Event) => {\r\n e.preventDefault();\r\n window.location.href = (link as HTMLAnchorElement).href + window.location.search;\r\n });\r\n });\r\n }\r\n }\r\n\r\n private toggleDropdown(button: HTMLButtonElement): void {\r\n const dropdown = button.nextElementSibling as HTMLDivElement;\r\n\r\n if (!dropdown.classList.contains('tool-menu__dropdown--open')) {\r\n this.openDropdown(dropdown);\r\n this.toggleButton(button);\r\n } else {\r\n this.closeDropdown(dropdown);\r\n this.toggleButton(button);\r\n }\r\n }\r\n\r\n private openDropdown(dropdown: HTMLDivElement): void {\r\n dropdown.classList.add('tool-menu__dropdown--open');\r\n }\r\n\r\n private closeDropdown(dropdown: HTMLDivElement): void {\r\n dropdown.classList.remove('tool-menu__dropdown--open');\r\n }\r\n\r\n private toggleButton(button: HTMLButtonElement): void {\r\n if (!button.classList.contains('tool-menu__link--expanded')) {\r\n button.classList.add('tool-menu__link--expanded');\r\n button.setAttribute('aria-expanded', 'true');\r\n } else {\r\n button.classList.remove('tool-menu__link--expanded');\r\n button.setAttribute('aria-expanded', 'false');\r\n }\r\n }\r\n}\r\n","export const getScrollbarWidth = (): number => {\r\n const tmpDiv = document.createElement('div') as HTMLDivElement;\r\n tmpDiv.style.visibility = 'hidden';\r\n tmpDiv.style.overflow = 'scroll';\r\n document.body.appendChild(tmpDiv);\r\n const inner = document.createElement('div');\r\n tmpDiv.appendChild(inner);\r\n const scrollbarWidth = (tmpDiv.offsetWidth - inner.offsetWidth);\r\n tmpDiv.parentNode.removeChild(tmpDiv);\r\n\r\n return scrollbarWidth;\r\n}","import { getScrollbarWidth } from '@util/getScrollbarWidth';\r\nimport { trapFocus } from '@util/trapFocus';\r\n\r\ninterface IButtonText {\r\n open: string;\r\n close: string;\r\n}\r\n\r\nexport const useMainMenu = (headerElement: HTMLElement): void => {\r\n const element = document.querySelector('#main-navigation') as HTMLElement;\r\n const toggleButtonElement = document.querySelector('.main-navigation__toggle-button') as HTMLButtonElement;\r\n const contentElement = document.querySelector('.main-navigation__content') as HTMLDivElement;\r\n const backdropElement = document.querySelector('.main-navigation__backdrop') as HTMLDivElement;\r\n const itemsElement = document.querySelector('.main-navigation__items') as HTMLDivElement;\r\n let isOpen: boolean = false;\r\n\r\n const toggleState = (): void => {\r\n if (!isOpen) {\r\n open();\r\n } else {\r\n close();\r\n }\r\n };\r\n\r\n const open = (): void => {\r\n contentElement.classList.add('main-navigation__content--open');\r\n document.body.classList.add('main-navigation-is-open', 'has-full-screen-modal');\r\n offsetHeaderPosition();\r\n\r\n setTimeout((): void => {\r\n backdropElement.classList.add('main-navigation__backdrop--visible');\r\n itemsElement.classList.add('main-navigation__items--visible');\r\n }, 10);\r\n\r\n document.addEventListener(`keydown`, initializeTrapFocus);\r\n \r\n toggleButton();\r\n isOpen = true;\r\n };\r\n\r\n const close = (): void => {\r\n itemsElement.classList.remove('main-navigation__items--visible');\r\n backdropElement.classList.remove('main-navigation__backdrop--visible');\r\n document.body.classList.remove('main-navigation-is-open', 'has-full-screen-modal');\r\n document.documentElement.style.removeProperty('--scrollbar-width');\r\n\r\n resetHeaderPosition();\r\n\r\n setTimeout((): void => {\r\n contentElement.classList.remove('main-navigation__content--open');\r\n }, 500);\r\n \r\n document.removeEventListener(`keydown`, initializeTrapFocus);\r\n \r\n toggleButton();\r\n isOpen = false;\r\n };\r\n\r\n const closeOnOutsideClick = (event: MouseEvent): void => {\r\n if (event.target instanceof Element) {\r\n let clickedElement: Element = event.target;\r\n\r\n if (clickedElement === backdropElement) {\r\n close();\r\n }\r\n }\r\n };\r\n\r\n const closeOnEsc = (event: KeyboardEvent): void => {\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n \r\n if (event.key === 'Escape') {\r\n close();\r\n }\r\n event.preventDefault();\r\n };\r\n\r\n const offsetHeaderPosition = (): void => {\r\n const scrollbarWidth: number = getScrollbarWidth();\r\n \r\n document.documentElement.style.setProperty('--scrollbar-width', scrollbarWidth + \"px\");\r\n document.body.style.paddingRight = `${scrollbarWidth}px`;\r\n headerElement.style.paddingRight = `${scrollbarWidth}px`;\r\n headerElement.style.marginRight = `-${scrollbarWidth}px`;\r\n toggleButtonElement.style.marginRight = `${scrollbarWidth}px`;\r\n };\r\n\r\n const resetHeaderPosition = (): void => {\r\n document.body.removeAttribute('style');\r\n headerElement.removeAttribute('style');\r\n toggleButtonElement.removeAttribute('style');\r\n }\r\n\r\n const toggleButton = (): void => {\r\n const buttonStateTextElement = toggleButtonElement.querySelector('.main-navigation__state-text') as HTMLSpanElement;\r\n const buttonMenuTextElement = toggleButtonElement.querySelector('.main-navigation__menu-text') as HTMLSpanElement;\r\n \r\n const data: string = toggleButtonElement.dataset.includeText!;\r\n const dataArray: string[] = data?.split(', ');\r\n const buttonStateText: IButtonText = {\r\n open: dataArray[0],\r\n close: dataArray[1]\r\n };\r\n \r\n if(!toggleButtonElement.classList.contains('main-navigation__toggle-button--expanded')) {\r\n toggleButtonElement.classList.add('main-navigation__toggle-button--expanded');\r\n toggleButtonElement.setAttribute('aria-expanded', 'true');\r\n buttonStateTextElement.textContent = buttonStateText.close;\r\n buttonStateTextElement.classList.remove('sr-only');\r\n buttonMenuTextElement.classList.add('sr-only');\r\n } else {\r\n toggleButtonElement.classList.remove('main-navigation__toggle-button--expanded');\r\n toggleButtonElement.setAttribute('aria-expanded', 'false');\r\n buttonStateTextElement.textContent = buttonStateText.open;\r\n buttonStateTextElement.classList.add('sr-only');\r\n buttonMenuTextElement.classList.remove('sr-only');\r\n }\r\n }\r\n\r\n const initializeTrapFocus = (event: KeyboardEvent): void => {\r\n trapFocus(event, element);\r\n }\r\n \r\n const initialize = (): void => {\r\n toggleButtonElement.addEventListener('click', (): void => {\r\n toggleState();\r\n });\r\n\r\n document.addEventListener('click', (event: MouseEvent): void => {\r\n if (isOpen) {\r\n closeOnOutsideClick(event);\r\n }\r\n });\r\n\r\n window.addEventListener('keyup', (event: KeyboardEvent): void => {\r\n if (isOpen) {\r\n closeOnEsc(event);\r\n }\r\n });\r\n }\r\n \r\n initialize();\r\n}\r\n","export const trapFocus = (event: KeyboardEvent, modal: HTMLElement): void => {\r\n const isTabPressed = event.key === 'Tab';\r\n if (!isTabPressed || event.defaultPrevented) {\r\n return;\r\n }\r\n const focusableElements = 'button, [href], input, select, textarea, iframe, [tabindex]:not([tabindex=\"-1\"])';\r\n const focusableContent = Array.from(modal.querySelectorAll(focusableElements)) as HTMLElement[];\r\n const filteredFocusableContent = focusableContent.filter(element => element.offsetHeight > 0);\r\n\r\n const firstFocusableElement = filteredFocusableContent[0] as HTMLElement;\r\n const lastFocusableElement = filteredFocusableContent[filteredFocusableContent.length - 1] as HTMLElement;\r\n\r\n if (event.shiftKey) {\r\n if (document.activeElement === firstFocusableElement) {\r\n lastFocusableElement.focus();\r\n event.preventDefault();\r\n }\r\n } else if (document.activeElement === lastFocusableElement) {\r\n firstFocusableElement.focus();\r\n event.preventDefault();\r\n }\r\n}\r\n","interface IButtonText {\r\n pageName: string;\r\n expand: string;\r\n minimize: string;\r\n}\r\n\r\nexport default class Menu {\r\n readonly subMenuToggleButtons: NodeListOf;\r\n \r\n constructor() {\r\n this.subMenuToggleButtons = document.querySelectorAll('.menu__submenu-toggle-button ') as NodeListOf;\r\n \r\n this.init();\r\n }\r\n \r\n private init(): void {\r\n if (this.subMenuToggleButtons.length > 0) {\r\n this.subMenuToggleButtons.forEach(button => {\r\n button.addEventListener('click', (): void => {\r\n this.toggleSubmenu(button);\r\n });\r\n });\r\n }\r\n }\r\n\r\n private toggleSubmenu(button: HTMLButtonElement): void {\r\n const itemContainer = button.parentElement as HTMLDivElement;\r\n const submenu = itemContainer.nextElementSibling as HTMLDivElement;\r\n\r\n if (!submenu.classList.contains('submenu--open')) {\r\n this.openSubmenu(submenu);\r\n this.toggleButton(button);\r\n } else {\r\n this.closeSubmenu(submenu);\r\n this.toggleButton(button);\r\n }\r\n }\r\n \r\n private openSubmenu(submenu: HTMLDivElement): void {\r\n submenu.classList.add('submenu--open');\r\n }\r\n\r\n private closeSubmenu(submenu: HTMLDivElement): void {\r\n submenu.classList.remove('submenu--open');\r\n }\r\n\r\n private toggleButton(button: HTMLButtonElement): void {\r\n const hiddenButtonText = button.querySelector('.sr-only') as HTMLSpanElement;\r\n\r\n const data: string = button.dataset.includeText!;\r\n const dataArray: string[] = data?.split(', ');\r\n const buttonText: IButtonText = {\r\n pageName: dataArray[0],\r\n expand: dataArray[1],\r\n minimize: dataArray[2]\r\n };\r\n\r\n if(!button.classList.contains('menu__submenu-toggle-button--expanded')) {\r\n button.classList.add('menu__submenu-toggle-button--expanded');\r\n button.setAttribute('aria-expanded', 'true');\r\n hiddenButtonText.textContent = `${buttonText.minimize} ${buttonText.pageName}`;\r\n } else {\r\n button.classList.remove('menu__submenu-toggle-button--expanded');\r\n button.setAttribute('aria-expanded', 'false');\r\n hiddenButtonText.textContent = `${buttonText.expand} ${buttonText.pageName}`;\r\n }\r\n }\r\n}\r\n","import { debounce } from \"@util/debounce\";\r\nimport Disturbance from \"@features/Layout/Features/Header/Features/Disturbance/scripts/Disturbance\";\r\nimport ToolMenu from \"@features/Layout/Features/Header/Features/ToolMenu/scripts/ToolMenu\";\r\nimport { useMainMenu } from \"@features/Layout/Features/Header/scripts/mainNavigation\";\r\nimport Menu from \"@features/Layout/Features/Header/Features/Menu/scripts/Menu\";\r\n\r\nenum Direction {\r\n Up,\r\n Down\r\n}\r\n\r\nconst useHeader = (): void => {\r\n const element = document.querySelector('.header') as HTMLElement;\r\n let elementHeight: number = 0;\r\n let bodyRect: number = 0;\r\n let scrollDirection: Direction = Direction.Down;\r\n let scrollPosition: number = Math.ceil(window.scrollY);\r\n let headerHasFocus: boolean = false;\r\n\r\n const setScrollDirection = (): void => {\r\n if ((document.body.getBoundingClientRect()).top > bodyRect) {\r\n scrollDirection = Direction.Up;\r\n } else {\r\n scrollDirection = Direction.Down;\r\n }\r\n \r\n bodyRect = (document.body.getBoundingClientRect()).top;\r\n };\r\n\r\n const checkIfHeaderHasFocus = (event: FocusEvent): void => {\r\n if (event.target instanceof HTMLElement) {\r\n const elementWithFocus = event.target as HTMLElement;\r\n\r\n if (element?.contains(elementWithFocus)) {\r\n headerHasFocus = true;\r\n } else {\r\n headerHasFocus = false;\r\n }\r\n }\r\n };\r\n\r\n const toggleVisibility = (): void => {\r\n if (Math.ceil(window.scrollY) > scrollPosition + elementHeight) {\r\n hide();\r\n }\r\n \r\n if (scrollDirection === Direction.Up || scrollDirection === Direction.Down && Math.ceil(window.scrollY) + window.innerHeight >= document.body.scrollHeight || document.body.classList.contains('main-navigation-is-open') || headerHasFocus) {\r\n show();\r\n scrollPosition = Math.ceil(window.scrollY);\r\n }\r\n };\r\n\r\n const hide = (): void => {\r\n if (!element?.classList.contains('header--hidden')) {\r\n element?.classList.add('header--hidden');\r\n }\r\n }\r\n \r\n const show = (): void => {\r\n if (element?.classList.contains('header--hidden')) {\r\n element?.classList.remove('header--hidden');\r\n }\r\n }\r\n\r\n const initialize = (): void => {\r\n if (element) {\r\n elementHeight = element.offsetHeight;\r\n }\r\n\r\n new Disturbance();\r\n new ToolMenu();\r\n useMainMenu(element);\r\n new Menu();\r\n\r\n window.addEventListener('scroll', debounce(() => {\r\n setScrollDirection();\r\n toggleVisibility();\r\n }, 100));\r\n\r\n window.addEventListener('focus', (event) => {\r\n checkIfHeaderHasFocus(event);\r\n toggleVisibility();\r\n }, true);\r\n };\r\n \r\n initialize();\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n useHeader();\r\n});\r\n","export function debounce(func: (...args: any[]) => void, timeout: number = 300): (...args: any[]) => void {\r\n let timer: ReturnType | undefined;\r\n return (...args: any[]) => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => { func(...args); }, timeout);\r\n };\r\n}"],"names":["Disturbance","htmlElement","disturbanceElement","constructor","this","document","documentElement","querySelector","init","height","scrollHeight","style","setProperty","addEventListener","closeMessage","classList","add","id","value","cookieData","closed","setCookie","name","days","expires","Date","setDate","getDate","cookieValue","encodeURIComponent","JSON","stringify","toUTCString","cookie","ToolMenu","dropdownButtons","languageLinks","querySelectorAll","length","forEach","button","toggleDropdown","link","e","preventDefault","window","location","href","search","dropdown","nextElementSibling","contains","closeDropdown","toggleButton","openDropdown","remove","setAttribute","useMainMenu","headerElement","element","toggleButtonElement","contentElement","backdropElement","itemsElement","isOpen","open","body","offsetHeaderPosition","setTimeout","initializeTrapFocus","close","removeProperty","resetHeaderPosition","removeEventListener","scrollbarWidth","tmpDiv","createElement","visibility","overflow","appendChild","inner","offsetWidth","parentNode","removeChild","getScrollbarWidth","paddingRight","marginRight","removeAttribute","buttonStateTextElement","buttonMenuTextElement","data","dataset","includeText","dataArray","split","buttonStateText","textContent","event","modal","key","defaultPrevented","filteredFocusableContent","Array","from","filter","offsetHeight","firstFocusableElement","lastFocusableElement","shiftKey","activeElement","focus","trapFocus","target","Element","closeOnOutsideClick","closeOnEsc","Menu","subMenuToggleButtons","toggleSubmenu","submenu","parentElement","closeSubmenu","openSubmenu","hiddenButtonText","buttonText","Direction","useHeader","elementHeight","bodyRect","scrollDirection","Down","scrollPosition","Math","ceil","scrollY","headerHasFocus","toggleVisibility","hide","Up","innerHeight","show","func","timeout","timer","args","clearTimeout","debounce","getBoundingClientRect","top","HTMLElement","elementWithFocus","checkIfHeaderHasFocus"],"sourceRoot":""}