{"version":3,"file":"table-of-content-BdPdIFLz.js","sources":["../../src/scripts/modules/table-of-content.ts"],"sourcesContent":["import { Component } from '@verndale/core';\nimport { ConditionalDisplay } from '../helpers/global';\n\nclass TableOfContent extends Component {\n private sections: NodeListOf | null = null;\n\n setupDefaults() {\n this.dom = {\n linksWrapper: this.el.querySelector('.v-table-of-content__links'),\n links: this.el.querySelectorAll('.v-table-of-content__link-wrapper')\n };\n this.updateLinks();\n }\n\n updateLinks() {\n if (!this.dom.linksWrapper) return;\n const linkWrapper = this.dom.linksWrapper as HTMLElement;\n const linkRef = (this.dom.links as NodeList)[1];\n\n linkWrapper.innerHTML = '';\n\n setTimeout(() => {\n this.sections = document.querySelectorAll('[data-jumplink]');\n this.sections.forEach(section => {\n const id = section.getAttribute('id');\n const title = section.getAttribute('data-jumplink');\n const linkEl = linkRef.cloneNode(true) as HTMLElement;\n const link = linkEl.querySelector('.v-table-of-content__link-t') as HTMLElement;\n const sectionBody = document.querySelector(`#${id}`) as HTMLElement;\n\n if (sectionBody && id && (ConditionalDisplay(id) || sectionBody.dataset.noData === 'true'))\n return;\n\n if (link) {\n link.textContent = title;\n link.setAttribute('href', `#${id}`);\n }\n linkWrapper.appendChild(linkEl);\n\n this.initObserver();\n });\n }, 100);\n }\n\n handleLinkClick(id: string) {\n const links = document.querySelectorAll('.v-table-of-content__link-t');\n links?.forEach(link => {\n link.classList.remove('v-table-of-content__link-sel');\n if (link.getAttribute('href') === `#${id}`) {\n link.classList.add('v-table-of-content__link-sel');\n const parent = link.closest('div');\n if (parent) this.scrollParentToChild(parent, link);\n }\n });\n }\n\n initObserver() {\n if (this.sections?.length === 0) return;\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.handleLinkClick(entry.target.id);\n }\n });\n },\n {\n root: null,\n rootMargin: '-20% 0% -69.5% 0%',\n threshold: 0.01\n }\n );\n\n this.sections?.forEach(section => {\n if (section) observer.observe(section);\n });\n }\n\n scrollParentToChild(parent: HTMLElement, child: Element) {\n if (window.innerWidth > 991) return;\n const parentRect = parent.getBoundingClientRect();\n const childRect = child.getBoundingClientRect();\n\n const offset =\n childRect.left - parentRect.left - parent.clientWidth / 2 + child.clientWidth / 2;\n\n parent.scrollLeft += offset;\n }\n}\n\nexport default TableOfContent;\n"],"names":["TableOfContent","Component","__publicField","linkWrapper","linkRef","section","id","title","linkEl","link","sectionBody","ConditionalDisplay","links","parent","_a","observer","entries","entry","_b","child","parentRect","offset"],"mappings":"sPAGA,MAAMA,UAAuBC,CAAU,CAAvC,kCACUC,EAAA,gBAA2C,MAEnD,eAAgB,CACd,KAAK,IAAM,CACT,aAAc,KAAK,GAAG,cAA2B,4BAA4B,EAC7E,MAAO,KAAK,GAAG,iBAAiB,mCAAmC,CAAA,EAErE,KAAK,YAAY,CACnB,CAEA,aAAc,CACR,GAAA,CAAC,KAAK,IAAI,aAAc,OACtB,MAAAC,EAAc,KAAK,IAAI,aACvBC,EAAW,KAAK,IAAI,MAAmB,CAAC,EAE9CD,EAAY,UAAY,GAExB,WAAW,IAAM,CACV,KAAA,SAAW,SAAS,iBAAiB,iBAAiB,EACtD,KAAA,SAAS,QAAmBE,GAAA,CACzB,MAAAC,EAAKD,EAAQ,aAAa,IAAI,EAC9BE,EAAQF,EAAQ,aAAa,eAAe,EAC5CG,EAASJ,EAAQ,UAAU,EAAI,EAC/BK,EAAOD,EAAO,cAAc,6BAA6B,EACzDE,EAAc,SAAS,cAAc,IAAIJ,CAAE,EAAE,EAE/CI,GAAeJ,IAAOK,EAAmBL,CAAE,GAAKI,EAAY,QAAQ,SAAW,UAG/ED,IACFA,EAAK,YAAcF,EACnBE,EAAK,aAAa,OAAQ,IAAIH,CAAE,EAAE,GAEpCH,EAAY,YAAYK,CAAM,EAE9B,KAAK,aAAa,EAAA,CACnB,GACA,GAAG,CACR,CAEA,gBAAgBF,EAAY,CACpB,MAAAM,EAAQ,SAAS,iBAAiB,6BAA6B,EACrEA,GAAA,MAAAA,EAAO,QAAgBH,GAAA,CAErB,GADKA,EAAA,UAAU,OAAO,8BAA8B,EAChDA,EAAK,aAAa,MAAM,IAAM,IAAIH,CAAE,GAAI,CACrCG,EAAA,UAAU,IAAI,8BAA8B,EAC3C,MAAAI,EAASJ,EAAK,QAAQ,KAAK,EAC7BI,GAAa,KAAA,oBAAoBA,EAAQJ,CAAI,CACnD,CAAA,EAEJ,CAEA,cAAe,SACT,KAAAK,EAAA,KAAK,WAAL,YAAAA,EAAe,UAAW,EAAG,OACjC,MAAMC,EAAW,IAAI,qBACRC,GAAA,CACTA,EAAQ,QAAiBC,GAAA,CACnBA,EAAM,gBACH,KAAA,gBAAgBA,EAAM,OAAO,EAAE,CACtC,CACD,CACH,EACA,CACE,KAAM,KACN,WAAY,oBACZ,UAAW,GACb,CAAA,GAGGC,EAAA,KAAA,WAAA,MAAAA,EAAU,QAAmBb,GAAA,CAC5BA,GAASU,EAAS,QAAQV,CAAO,CAAA,EAEzC,CAEA,oBAAoBQ,EAAqBM,EAAgB,CACvD,GAAI,OAAO,WAAa,IAAK,OACvB,MAAAC,EAAaP,EAAO,wBAGpBQ,EAFYF,EAAM,wBAGZ,KAAOC,EAAW,KAAOP,EAAO,YAAc,EAAIM,EAAM,YAAc,EAElFN,EAAO,YAAcQ,CACvB,CACF"}