{"version":3,"file":"795.23b16ee22709c78d48e1.js","mappings":"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","sources":["webpack://dclt.web/./wwwroot/app/src/js/responsive-nav-bar.js"],"sourcesContent":["import { ResizeObserver as Polyfill } from '@juggle/resize-observer';\r\nconst ResizeObserver = window.ResizeObserver || Polyfill;\r\n\r\nclass NavBar {\r\n constructor(el) {\r\n\r\n // store for later\r\n this.el = el;\r\n this.mask = el.querySelector('.responsive-nav-bar--ul-mask');\r\n this.content = el.querySelector('ul');\r\n this.prevBtn = el.querySelector('.responsive-nav-bar--button.previous');\r\n this.nextBtn = el.querySelector('.responsive-nav-bar--button.next');\r\n this.tabbedContent = el.classList.contains('responsive-nav-bar--tabbed-content');\r\n this.scrollMode = false;\r\n this.offsetIndex = 0;\r\n this.focusIndex = 0;\r\n this.activeIndex = 0;\r\n this.offset = 0;\r\n this.resizeRequested = false;\r\n this.resizeTimeout = null;\r\n\r\n // get links in nav bar\r\n this.items = [...el.querySelectorAll('.nav-item a')];\r\n this.itemsCount = this.items.length;\r\n\r\n // loop through links / get active index\r\n for(let x= 0; x < this.itemsCount; x++) {\r\n if(this.items[x].classList.contains('active')) {\r\n this.offsetIndex = x;\r\n this.focusIndex = x;\r\n this.activeIndex = x;\r\n }\r\n this.items[x].addEventListener('click', () => {\r\n this.setActive(x);\r\n });\r\n }\r\n\r\n // buttons\r\n this.prevBtn.addEventListener('click', () => {\r\n this.offsetMove(false);\r\n });\r\n this.nextBtn.addEventListener('click', () => {\r\n this.offsetMove(true);\r\n });\r\n\r\n // keyboard nav\r\n this.el.addEventListener('keydown', (e) => {\r\n switch (e.key) {\r\n // next item (no looping)\r\n case 'Right':\r\n case 'ArrowRight':\r\n e.preventDefault();\r\n this.focusMove(true);\r\n break;\r\n // previous item (no looping)\r\n case 'Left':\r\n case 'ArrowLeft':\r\n e.preventDefault();\r\n this.focusMove(false);\r\n break;\r\n // SPACE/ENTER/RETURN to click a item\r\n case 'Spacebar':\r\n case ' ':\r\n case 'Enter':\r\n case 'Return':\r\n e.preventDefault();\r\n this.items[this.focusIndex].click();\r\n break;\r\n }\r\n });\r\n\r\n // add resize observer\r\n this.ro = new ResizeObserver(() => {\r\n if(!this.resizeRequested) {\r\n this.resizeRequested = true;\r\n this.resizeTimeout = setTimeout(() => {\r\n this.resize();\r\n this.resizeRequested = false;\r\n this.resizeTimeout = null;\r\n }, 200);\r\n }\r\n });\r\n this.ro.observe(this.el); // Watch dimension changes wrapping element\r\n\r\n }\r\n\r\n offsetMove(mode) {\r\n let prevIndex = this.offsetIndex;\r\n if(mode && this.offsetIndex < (this.itemsCount-1)) {\r\n this.offsetIndex = this.offsetIndex + 1;\r\n } else if(!mode && this.offsetIndex > 0) {\r\n this.offsetIndex = this.offsetIndex - 1;\r\n }\r\n if(prevIndex !== this.offsetIndex) {\r\n this.updateOffset();\r\n }\r\n }\r\n\r\n focusMove(mode) {\r\n let prevIndex = this.focusIndex;\r\n if(mode && this.focusIndex < (this.itemsCount-1)) {\r\n this.focusIndex = this.focusIndex + 1;\r\n } else if(!mode && this.focusIndex > 0) {\r\n this.focusIndex = this.focusIndex - 1;\r\n }\r\n if(prevIndex !== this.focusIndex) {\r\n this.items[this.focusIndex].setAttribute('tabIndex','0');\r\n this.items[this.focusIndex].focus();\r\n this.items[prevIndex].setAttribute('tabIndex','-1');\r\n this.offsetIndex = this.focusIndex;\r\n this.updateOffset();\r\n }\r\n }\r\n\r\n setActive(newIndex) {\r\n if(newIndex != this.activeIndex) {\r\n if(!this.tabbedContent) this.items[this.activeIndex].classList.remove('active');\r\n this.items[this.activeIndex].setAttribute('tabIndex','-1');\r\n this.activeIndex = newIndex;\r\n this.focusIndex = newIndex;\r\n if(!this.tabbedContent) this.items[this.activeIndex].classList.add('active');\r\n this.items[this.activeIndex].setAttribute('tabIndex','0');\r\n }\r\n }\r\n\r\n resize() {\r\n if(this.content.offsetWidth > this.mask.offsetWidth) {\r\n if(!this.scrollMode) {\r\n this.scrollMode = true;\r\n this.el.classList.add('scroll');\r\n }\r\n this.updateOffset();\r\n } else {\r\n if(this.scrollMode) {\r\n this.scrollMode = false;\r\n this.el.classList.remove('scroll');\r\n this.offset = 0;\r\n this.content.style.transform = 'translateX(0)';\r\n }\r\n }\r\n }\r\n\r\n updateOffset() {\r\n if(this.scrollMode) {\r\n let itemLeft = this.items[this.offsetIndex].offsetLeft,\r\n maskWidth = this.mask.offsetWidth,\r\n contentWidth = this.content.offsetWidth,\r\n offsetMax = contentWidth - maskWidth;\r\n this.offset = itemLeft > offsetMax ? offsetMax : itemLeft;\r\n this.content.style.transform = 'translateX(-' + this.offset + 'px)';\r\n // update buttons status\r\n this.prevBtn.disabled = this.offsetIndex == 0;\r\n this.nextBtn.disabled = this.offset >= offsetMax;\r\n }\r\n }\r\n}\r\n\r\n// export the default function to create\r\nexport function createFrom(wrappers) {\r\n wrappers.forEach((node) => {\r\n // if node is an element\r\n if (node.nodeType === 1) {\r\n new NavBar(node);\r\n }\r\n });\r\n}"],"names":["ResizeObserver","window","Polyfill","NavBar","constructor","el","this","mask","querySelector","content","prevBtn","nextBtn","tabbedContent","classList","contains","scrollMode","offsetIndex","focusIndex","activeIndex","offset","resizeRequested","resizeTimeout","items","querySelectorAll","itemsCount","length","x","addEventListener","setActive","offsetMove","e","key","preventDefault","focusMove","click","ro","setTimeout","resize","observe","mode","prevIndex","updateOffset","setAttribute","focus","newIndex","remove","add","offsetWidth","style","transform","itemLeft","offsetLeft","maskWidth","offsetMax","disabled","createFrom","wrappers","forEach","node","nodeType"],"sourceRoot":""}