{"version":3,"sources":["webpack:///./src/js/modules/faq-content-toc.js"],"names":["Module","Component","setupDefaults","this","dom","$navItems","el","_$$","$sections","$toc","_$","$mobileExpandTrigger","$mobileCollapserigger","$accordionPanels","$expandAll","parent","$collapseAll","applyMinHeightsToExpandedElements","forEach","updateExpandButtonsDisplay","bind","collapsedTocClass","addListeners","_on","handleNavItemsClick","expandToc","collapseToc","$section","expandAll","collapseAll","window","addEventListener","spySections","e","preventDefault","id","target","href","split","$target","document","getElementById","$buttons","querySelectorAll","offset","callback","fixedOffset","toFixed","onScroll","pageYOffset","removeEventListener","scrollTo","top","behavior","getBoundingClientRect","button","style","display","focus","allItems","expanedItems","filter","item","getAttribute","length","event","CustomEvent","dispatchEvent","visibilityStatus","map","section","determineVisibility","updateToc","scrollTop","scrollBottom","innerHeight","sectionTop","sectionBottom","offsetHeight","isAlreadyMarked","index","classList","remove","setAttribute","add","removeAttribute","unbindTocOutsideClick","clickOutside","maxHeight","scrollHeight"],"mappings":"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","file":"70.48a945.js","sourcesContent":["import { Component } from '@verndale/core';\nimport clickOutside from 'click-outside';\n\nfunction scrollTo(offset, callback) {\n const fixedOffset = offset.toFixed();\n const onScroll = () => {\n if (window.pageYOffset.toFixed() === fixedOffset) {\n window.removeEventListener('scroll', onScroll);\n callback();\n }\n };\n\n window.addEventListener('scroll', onScroll);\n onScroll();\n window.scrollTo({\n top: offset,\n behavior: 'smooth'\n });\n}\n\nclass Module extends Component {\n setupDefaults() {\n this.dom = {\n $navItems: this.el._$$('.faq-content-toc__toc-anchor'),\n $sections: this.el._$$('.faq-content-toc__section'),\n $toc: this.el._$('.faq-content-toc__toc'),\n $mobileExpandTrigger: this.el._$(\n '.faq-content-toc__toc-heading-actions-wrapper'\n ),\n $mobileCollapserigger: this.el._$('.faq-content-toc__close-trigger'),\n $accordionPanels: this.el._$$('.accordion-item__panel'),\n $expandAll: parent => parent._$('.faq-content-toc__expand-all'),\n $collapseAll: parent => parent._$('.faq-content-toc__collapse-all')\n };\n\n this.applyMinHeightsToExpandedElements();\n this.dom.$sections.forEach(this.updateExpandButtonsDisplay.bind(this));\n this.collapsedTocClass = 'faq-content-toc__toc--mobile-collapsed';\n }\n\n addListeners() {\n this.dom.$navItems._on('click', this.handleNavItemsClick.bind(this));\n this.dom.$mobileExpandTrigger._on('click', this.expandToc.bind(this));\n this.dom.$mobileCollapserigger._on('click', this.collapseToc.bind(this));\n this.dom.$sections.forEach($section => {\n $section._on(\n 'change',\n this.updateExpandButtonsDisplay.bind(this, $section)\n );\n this.dom\n .$expandAll($section)\n ._on('click', this.expandAll.bind(this, $section));\n this.dom\n .$collapseAll($section)\n ._on('click', this.collapseAll.bind(this, $section));\n });\n window.addEventListener('scroll', () => this.spySections());\n }\n\n handleNavItemsClick(e) {\n e.preventDefault();\n const $el = e.target;\n const id = $el.href.split('#')[1];\n const $target = document.getElementById(id);\n const $buttons = $target.querySelectorAll('button');\n const top = window.pageYOffset + $target.getBoundingClientRect().top;\n\n scrollTo(top, () => {\n for(const button of $buttons) {\n if (button.style.display !== 'none') {\n button.focus();\n break;\n }\n }\n });\n }\n\n updateExpandButtonsDisplay($section) {\n const allItems = $section._$$('[aria-controls]');\n const expanedItems = allItems.filter(\n item => item.getAttribute('aria-expanded') === 'true'\n );\n const $expandAll = this.dom.$expandAll($section);\n const $collapseAll = this.dom.$collapseAll($section);\n\n if (!expanedItems.length) {\n $expandAll.style.display = 'block';\n $collapseAll.style.display = 'none';\n } else if (expanedItems.length === allItems.length) {\n $expandAll.style.display = 'none';\n $collapseAll.style.display = 'block';\n }\n }\n\n expandAll($section) {\n const event = new CustomEvent('expandAll');\n $section.dispatchEvent(event);\n }\n\n collapseAll($section) {\n const event = new CustomEvent('collapseAll');\n $section.dispatchEvent(event);\n }\n\n spySections() {\n const visibilityStatus = this.dom.$sections.map(section =>\n this.determineVisibility(section)\n );\n\n this.updateToc(visibilityStatus);\n }\n\n determineVisibility(section) {\n const scrollTop = window.pageYOffset;\n const scrollBottom = scrollTop + window.innerHeight;\n const sectionTop = section.getBoundingClientRect().top + scrollTop;\n const sectionBottom = sectionTop + section.offsetHeight;\n\n return sectionTop < scrollBottom && sectionBottom > scrollTop;\n }\n\n updateToc(visibilityStatus) {\n let isAlreadyMarked = false;\n\n this.dom.$navItems.forEach((item, index) => {\n if (visibilityStatus[index] && !isAlreadyMarked) {\n isAlreadyMarked = true;\n item.classList.remove('link--dark');\n item.setAttribute('aria-current', 'page');\n } else {\n item.classList.add('link--dark');\n item.removeAttribute('aria-current');\n }\n });\n }\n\n expandToc() {\n this.dom.$toc.classList.remove(this.collapsedTocClass);\n this.unbindTocOutsideClick = clickOutside(\n this.dom.$toc,\n this.collapseToc.bind(this)\n );\n }\n\n collapseToc() {\n this.dom.$toc.classList.add(this.collapsedTocClass);\n this.unbindTocOutsideClick?.();\n }\n\n applyMinHeightsToExpandedElements() {\n const $exapnded = this.dom.$accordionPanels.filter(\n el => !el.getAttribute('aria-hidden')\n );\n $exapnded.forEach(el => {\n el.style.maxHeight = `${el.scrollHeight}px`;\n });\n }\n}\n\nexport default Module;\n"],"sourceRoot":""}