{"version":3,"sources":["webpack:///./modules/SkipToMainContent.ts"],"names":["__webpack_require__","r","__webpack_exports__","SkipToMainContent","element","this","init","setup","selector","Array","from","document","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","prototype","_this","hide","addEventListener","activateTabBehavior","window","cmp","querySelector","getAttribute","style","display","scrollToFirstSection","e","key","preventDefault","site","getElementById","active","activeElement","firstInSite","getFocusableElements","body","outsideSite","contains","atDocumentTop","documentElement","initialForwardTab","shiftKey","reverseFromTop","isVisible","setTimeout","show","focus","hideOnNextTab_1","ev","removeEventListener","hideOnFocusMove_1","t","target","firstSection","el_1","setAttribute","outline","preventScroll","scrollIntoView","behavior","block","removeAttribute","root","join","el","cs","getComputedStyle","rects","getClientRects","visibility","length","classList","add","globalInvokeOnEnterSpace","k","isEnter","isSpace","a","focusOnUs","remove","undefined"],"mappings":"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","file":"./modules/SkipToMainContent.7e3c19be.js","sourcesContent":["/// \r\n\r\nconst moduleSelector =\r\n '[data-module=\"SkipToMainContent\"][data-skip-main=\"true\"]';\r\n\r\nexport default class SkipToMainContent {\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector))\r\n .filter((node: HTMLElement) => !node.dataset.moduleInitialized)\r\n .forEach((element: HTMLElement) => {\r\n new SkipToMainContent(element as HTMLButtonElement);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n private globalInvokeOnEnterSpace?: (e: KeyboardEvent) => void;\r\n\r\n constructor(private element: HTMLButtonElement) {\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n this.hide();\r\n\r\n document.addEventListener('cmpbox:closed', () => {\r\n this.activateTabBehavior();\r\n });\r\n\r\n window.addEventListener('load', () => {\r\n const cmp = document.querySelector('#cmpbox') as HTMLElement | null;\r\n const cmpHidden =\r\n !cmp ||\r\n cmp.getAttribute('aria-hidden') === 'true' ||\r\n (cmp && cmp.style && cmp.style.display === 'none');\r\n\r\n if (cmpHidden) this.activateTabBehavior();\r\n });\r\n\r\n this.element.addEventListener('click', () => this.scrollToFirstSection());\r\n\r\n this.element.addEventListener('keydown', (e: KeyboardEvent) => {\r\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Spacebar') {\r\n e.preventDefault();\r\n this.scrollToFirstSection();\r\n }\r\n });\r\n\r\n this.element.addEventListener('blur', () => this.hide());\r\n }\r\n\r\n private activateTabBehavior(): void {\r\n const onKeyDown = (e: KeyboardEvent) => {\r\n if (e.key !== 'Tab') return;\r\n\r\n const site = document.getElementById('site');\r\n const active = document.activeElement as HTMLElement | null;\r\n\r\n const focusablesInSite = this.getFocusableElements(site || document.body);\r\n const firstInSite = focusablesInSite[0];\r\n\r\n const outsideSite = !!(site && active && !site.contains(active));\r\n const atDocumentTop =\r\n !active || active === document.body || active === document.documentElement;\r\n\r\n const initialForwardTab = !e.shiftKey && (atDocumentTop || outsideSite);\r\n const reverseFromTop = !!(e.shiftKey && firstInSite && active === firstInSite);\r\n\r\n if (!this.isVisible() && (initialForwardTab || reverseFromTop)) {\r\n e.preventDefault();\r\n this.show();\r\n this.element.focus();\r\n\r\n const hideOnNextTab = (ev: KeyboardEvent) => {\r\n if (ev.key === 'Tab' && !ev.shiftKey) {\r\n setTimeout(() => this.hide(), 0);\r\n document.removeEventListener('keydown', hideOnNextTab, true);\r\n }\r\n };\r\n\r\n const hideOnFocusMove = (ev: Event) => {\r\n const t = ev.target as HTMLElement | null;\r\n if (t && t !== this.element) {\r\n this.hide();\r\n document.removeEventListener('focusin', hideOnFocusMove, true);\r\n }\r\n };\r\n\r\n setTimeout(() => {\r\n document.addEventListener('keydown', hideOnNextTab, true);\r\n document.addEventListener('focusin', hideOnFocusMove, true);\r\n }, 0);\r\n\r\n return;\r\n }\r\n\r\n if (this.isVisible() && active === this.element && !e.shiftKey) {\r\n setTimeout(() => this.hide(), 0);\r\n }\r\n };\r\n\r\n document.addEventListener('keydown', onKeyDown);\r\n }\r\n\r\n private scrollToFirstSection(): void {\r\n const firstSection = document.querySelector('main section, section');\r\n if (firstSection) {\r\n const el = firstSection as HTMLElement;\r\n el.setAttribute('tabindex', '-1');\r\n el.style.outline = 'none';\r\n setTimeout(() => {\r\n el.focus({ preventScroll: true });\r\n el.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n setTimeout(() => {\r\n el.removeAttribute('tabindex');\r\n el.style.outline = '';\r\n }, 1000);\r\n }, 0);\r\n }\r\n this.hide();\r\n }\r\n\r\n private getFocusableElements(root: ParentNode): HTMLElement[] {\r\n const selector = [\r\n 'a[href]',\r\n 'button:not([disabled])',\r\n 'input:not([disabled])',\r\n 'select:not([disabled])',\r\n 'textarea:not([disabled])',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n ].join(',');\r\n\r\n const all = Array.from(root.querySelectorAll(selector));\r\n return all.filter((el) => {\r\n if (el === this.element) return false;\r\n const cs = window.getComputedStyle(el);\r\n const rects = el.getClientRects();\r\n return cs.visibility !== 'hidden' && cs.display !== 'none' && rects.length > 0;\r\n });\r\n }\r\n\r\n private isVisible(): boolean {\r\n return this.element.classList.contains('is-visible');\r\n }\r\n\r\n private show(): void {\r\n this.element.classList.add('is-visible');\r\n this.element.setAttribute('tabindex', '0');\r\n\r\n this.globalInvokeOnEnterSpace = (ev: KeyboardEvent) => {\r\n if (!this.isVisible()) return;\r\n const k = ev.key;\r\n const isEnter = k === 'Enter';\r\n const isSpace = k === ' ' || k === 'Spacebar';\r\n const a = document.activeElement as HTMLElement | null;\r\n const focusOnUs =\r\n a === this.element || a === document.body || a === document.documentElement;\r\n\r\n if ((isEnter || isSpace) && focusOnUs) {\r\n ev.preventDefault();\r\n this.scrollToFirstSection();\r\n }\r\n };\r\n\r\n document.addEventListener('keydown', this.globalInvokeOnEnterSpace, true);\r\n document.addEventListener('keyup', this.globalInvokeOnEnterSpace, true);\r\n }\r\n\r\n private hide(): void {\r\n this.element.classList.remove('is-visible');\r\n this.element.setAttribute('tabindex', '-1');\r\n\r\n if (this.globalInvokeOnEnterSpace) {\r\n document.removeEventListener('keydown', this.globalInvokeOnEnterSpace, true);\r\n document.removeEventListener('keyup', this.globalInvokeOnEnterSpace, true);\r\n this.globalInvokeOnEnterSpace = undefined;\r\n }\r\n }\r\n}\r\n\r\nnew SkipToMainContent.setup();"],"sourceRoot":""}