PageSourceSearch

https://sunhomesaunas.com/cdn/shop/t/224/assets/content-carousel.1RNOPaEf.min.js

js sunhomesaunas.com collected 2026-10-03 23:43:24 UTC 3,146 bytes, 1 lines download raw bytes

1import{S as e}from"./swiper-core.Ba8Q3si6.min.js";import{M as t}from"./mousewheel.B6hYovjw.min.js";import{N as s}from"./navigation.CbxQxFkY.min.js";import"./create-element-if-not-defined.CgZQHUh5.min.js";const i=".js-tab-trigger",a=".js-tab-panels",r=".js-tab-panel",l=".js-content-carousel-swiper",n=".js-swiper-control",o=".js-swiper-button-prev",h=".js-swiper-button-next";class c extends HTMLElement{connectedCallback(){this.abortController=new AbortController,this.tabs=this.querySelectorAll(i),this.panels=this.querySelectorAll(r),this.swipers=[],this._resizeHandler=null,this.initCarousels(),this.initTabs(),this.updatePanelsHeight(),this._resizeHandler=()=>{this.updatePanelsHeight()},window.addEventListener("resize",this._resizeHandler,{passive:!0})}disconnectedCallback(){this.abortController&&(this.abortController.abort(),this.abortController=null),this.swipers.forEach(e=>{e.destroy()}),this._resizeHandler&&(window.removeEventListener("resize",this._resizeHandler),this._resizeHandler=null)}updatePanelsHeight(){const e=this.querySelector(a);if(!e)return;let t=0;this.panels.forEach(e=>{t=Math.max(t,e.offsetHeight)}),e.style.minHeight=`${t}px`}initCarousels(){this.querySelectorAll(l).forEach(i=>{const a=i.querySelector(n),r=i.querySelector(o),l=i.querySelector(h),c=new e(i,{modules:[s,t],slidesPerView:1.08,spaceBetween:16,speed:600,watchOverflow:!0,mousewheel:{enabled:!1},breakpoints:{768:{slidesPerView:2,mousewheel:{enabled:!1}},1024:{slidesPerView:3.04,mousewheel:{enabled:!0,forceToAxis:!0,thresholdTime:500,thresholdDelta:10}}},navigation:{nextEl:l,prevEl:r},on:{init:e=>{this.updateNavigation(e,a)},resize:e=>{this.updateNavigation(e,a)},breakpoint:e=>{e.params.mousewheel.enabled?e.mousewheel.enable():e.mousewheel.disable(),this.updateNavigation(e,a)}}});this.swipers.push(c)})}updateNavigation(e,t){const s=e.isLocked;null==t||t.classList.toggle("hidden",s)}
1initTabs(){this.tabs.forEach((e,t)=>{var s,i;e.addEventListener("click",()=>{this.activateTab(t)},{signal:null==(s=this.abortController)?void 0:s.signal}),e.addEventListener("keydown",e=>{let s=t;switch(e.key){case"ArrowRight":s=(t+1)%this.tabs.length;break;case"ArrowLeft":s=(t-1+this.tabs.length)%this.tabs.length;break;case"Home":s=0;break;case"End":s=this.tabs.length-1;break;default:return}e.preventDefault(),this.tabs[s].focus(),this.activateTab(s)},{signal:null==(i=this.abortController)?void 0:i.signal})})}activateTab(e){this.tabs.forEach((t,s)=>{const i=s===e;t.classList.toggle("is-active",i),t.setAttribute("aria-selected",i),t.setAttribute("tabindex",i?"0":"-1"),i&&this.scrollTabIntoView(t)}),this.panels.forEach((t,s)=>{const i=s===e;if(t.setAttribute("aria-hidden",i?"false":"true"),t.toggleAttribute("inert",!i),!i)return void t.classList.remove("is-active");t.classList.add("is-active");const a=this.swipers[s];a&&(a.update(),requestAnimationFrame(()=>{this.updatePanelsHeight()}))})}scrollTabIntoView(e){const t=e.parentElement;if(!t)return;const s=t.getBoundingClientRect(),i=e.getBoundingClientRect(),a=t.scrollLeft+(i.left-s.left)-s.width/2+i.width/2;t.scrollTo({left:a,behavior:"smooth"})}}customElements.define("content-carousel",c);

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.