1!function(){"use strict";class t extends HTMLElement{connectedCallback(){this._isConnected||(this._isConnected=!0,this._rafId=0,this.containerSelector=this.dataset.carouselContainer||"[data-carousel-container]",this.itemSelector=this.dataset.carouselItem||"[data-carousel-item]",this.prevSelector=this.dataset.carouselPrev||"[data-carousel-prev]",this.nextSelector=this.dataset.carouselNext||"[data-carousel-next]",this.mobileOnly="true"===this.dataset.carouselMobileOnly,this.enableLeftOverflowState="true"===this.dataset.carouselLeftOverflow,this.startLeaveThreshold=Number.parseFloat(this.dataset.carouselStartLeaveThreshold||"18"),this.startReturnThreshold=Number.parseFloat(this.dataset.carouselStartReturnThreshold||"10"),this.isAtStart=!0,this.isReturningToStart=!1,this.returnToStartTimer=0,this.containerEl=this.querySelector(this.containerSelector),this.prevBtn=this.querySelector(this.prevSelector),this.nextBtn=this.querySelector(this.nextSelector),this.containerEl&&(this.onPrev=this.onPrev.bind(this),this.onNext=this.onNext.bind(this),this.onScroll=this.onScroll.bind(this),this.onScrollEnd=this.onScrollEnd.bind(this),this.onResize=this.onResize.bind(this),this.onBreakpointChange=this.onBreakpointChange.bind(this),this.prevBtn&&this.prevBtn.addEventListener("click",this.onPrev),this.nextBtn&&this.nextBtn.addEventListener("click",this.onNext),this.containerEl.addEventListener("scroll",this.onScroll,{passive:!0}),this.containerEl.addEventListener("scrollend",this.onScrollEnd),window.addEventListener("resize",this.onResize,{passive:!0}),this.mobileOnly&&window.matchMedia&&(this.breakpointMql=window.matchMedia("(max-width: 63.99rem)"),this.breakpointMql.addEventListener?this.breakpointMql.addEventListener("change",this.onBreakpointChange):this.breakpointMql.addListener&&this.breakpointMql.addListener(this.onBreakpointChange)),this.applyMode()))}disconnectedCallback(){this.prevBtn&&this.prevBtn.removeEventListener("click",this.onPrev),this.nextBtn&&this.nextBtn.removeEventListener("click",this.onNext),this.containerEl&&(this.containerEl.removeEventListener("scroll",this.onScroll),this.containerEl.removeEventListener("scrollend",this.onScrollEnd)),window.removeEventListener("resize",this.onResize),this.clearReturnToStartTimer(),this.breakpointMql&&(this.breakpointMql.removeEventListener?this.breakpointMql.removeEventListener("change",this.onBreakpointChange):this.breakpointMql.removeListener&&this.breakpointMql.removeListener(this.onBreakpointChange))}onBreakpointChange(){this.applyMode()}onResize(){this.applyMode()}onScroll(){if(this.isReturningToStart)return this.scheduleReturnToStartFallback(),void this.scheduleNavUpdate();this.updateStartState(),this.scheduleNavUpdate()}onScrollEnd(){this.isReturningToStart&&(this.containerEl.scrollLeft<=this.startReturnThreshold?this.finishReturnToStart():this.scheduleReturnToStartFallback())}onPrev(t){t.preventDefault(),this.isActive&&this.scrollByStep(-1)}onNext(t){t.preventDefault(),this.isActive&&this.scrollByStep(1)}applyMode(){const t=!this.breakpointMql||this.breakpointMql.matches,e=!this.mobileOnly||t,i=this.hasScrollableContent();this.isActive=e&&i,this.setButtonsVisible(this.isActive),this.isReturningToStart=!1,this.clearReturnToStartTimer(),this.isActive?(this.containerEl.setAttribute("data-carousel-active","true"),this.enableButtons(),this.updateStartState(!0),this.updateNavState()):(this.containerEl.removeAttribute("data-carousel-active"),this.disableButtons(),this.containerEl.scrollLeft=0,this.setStartState(!0))}setButtonsVisible(t){this.prevBtn&&(this.prevBtn.hidden=!t,this.prevBtn.style.display=t?"":"none"),this.nextBtn&&(this.nextBtn.hidden=!t,this.nextBtn.style.display=t?"":"none")}hasScrollableContent(){return!!this.containerEl&&this.containerEl.scrollWidth>this.containerEl.clientWidth}getMaxScrollLeft(){return this.containerEl?Math.max(0,this.containerEl.scrollWidth-this.containerEl.clientWidth):0}enableButtons(){this.prevBtn&&(this.prevBtn.disabled=!1,this.prevBtn.removeAttribute("aria-disabled")),this.nextBtn&&(this.nextBtn.disabled=!1,this.nextBtn.removeAttribute("aria-disabled"))}disableButtons(){this.prevBtn&&(this.prevBtn.disabled=!0,this.prevBtn.setAttribute("aria-disabled","true")),this.nextBtn&&(this.nextBtn.disabled=!0,this.nextBtn.setAttribute("aria-disabled","true"))}scheduleNavUpdate(){this.isActive&&(this._rafId||(this._rafId=window.requestAnimationFrame(()=>{this._rafId=0,this.updateNavState()})))}updateNavState(){if(!this.isActive||!this.containerEl)return void this.disableButtons();const t=this.getMaxScrollLeft();if(t<=0)return this.setButtonsVisible(!1),void this.disableButtons();this.setButtonsVisible(!0);const e=this.containerEl.scrollLeft,i=e<=this.startReturnThreshold,s=e>=t;this.prevBtn&&(this.prevBtn.disabled=i,this.prevBtn.setAttribute("aria-disabled",i?"true":"false")),this.nextBtn&&(this.nextBtn.disabled=s,this.nextBtn.setAttribute("aria-disabled",s?"true":"false"))}updateStartState(t=!1){if(!this.enableLeftOverflowState||!this.containerEl)return;const e=this.containerEl.scrollLeft;let i=this.isAtStart;this.isAtStart?e>this.startLeaveThreshold&&(i=!1):e<=this.startReturnThreshold&&(i=!0),t&&(i=e<=this.startReturnThreshold),(i!==this.isAtStart||t)&&this.setStartState(i)}setStartState(t){this.isAtStart===t&&this.getAttribute("data-carousel-at-start")===(t?"true":"false")||(this.isAtStart=t,this.setAttribute("data-carousel-at-start",t?"true":"false"))}getStepSize(){const t=parseFloat(this.dataset.carouselStep||"");if(!Number.isNaN(t)&&t>0)return t;const e=this.querySelectorAll(this.itemSelector);return e.length>=2?Math.abs(e[1].offsetLeft-e[0].offsetLeft)||e[0].offsetWidth:1===e.length?e[0].offsetWidth:this.containerEl.clientWidth}clearReturnToStartTimer(){this.returnToStartTimer&&(window.clearTimeout(this.returnToStartTimer),this.returnToStartTimer=0)}scheduleReturnToStartFallback(){this.clearReturnToStartTimer(),this.returnToStartTimer=window.setTimeout(()=>{this.returnToStartTimer=0,this.isReturningToStart&&this.containerEl.scrollLeft<=this.startReturnThreshold&&this.finishReturnToStart()},120)}finishReturnToStart(){this.isReturningToStart=!1,this.clearReturnToStartTimer(),this.setStartState(!0),this.updateNavState()}getMixedWidthTarget(t){if(this.dataset.carouselStep)return null;const e=[...this.querySelectorAll(this.itemSelector)];if(e.length<2||e.every(t=>t.offsetWidth===e[0].offsetWidth))return null;const i=this.containerEl.scrollLeft,s=this.containerEl.getBoundingClientRect().left,r=e.map(t=>i+t.getBoundingClientRect().left-s),n=t>0?r.find(t=>t>i+1):[...r].reverse().find(t=>t<i-1);return void 0===n?null:n}scrollByStep(t){const e=this.containerEl.scrollLeft,i=this.getMixedWidthTarget(t),s=null!==i?i:e+t*this.getStepSize();if(t<0&&this.enableLeftOverflowState){const t=window.getComputedStyle(this.containerEl);if(s<=(Number.parseFloat(t.paddingLeft||"0")||0)+this.startReturnThreshold)return this.isReturningToStart=!0,this.clearReturnToStartTimer(),void window.requestAnimationFrame(()=>{this.setStartState(!0),this.containerEl.scrollTo({left:0,behavior:"smooth"}),this.setStartState(!1),this.scheduleReturnToStartFallback()})}this.containerEl.scrollTo({left:s,behavior:"smooth"})}}customElements.define("felix-carousel",t)}(); 2//# sourceMappingURL=carousel.min.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.