(() => { 'use strict'; const slider = document.querySelector('[data-hero-slider]'); if (!slider) return; const slides = [...slider.querySelectorAll('[data-hero-slide]')]; const tabs = [...slider.querySelectorAll('[data-hero-go]')]; const progress = slider.querySelector('[data-hero-progress]'); const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches; let index = 0, timer = 0, startX = 0; const restartProgress = () => { if (!progress || reduced) return; progress.classList.remove('is-running'); progress.getBoundingClientRect(); progress.classList.add('is-running'); }; const show = (next) => { index = (next + slides.length) % slides.length; slides.forEach((slide, i) => { const active = i === index; slide.classList.toggle('is-active',active); slide.setAttribute('aria-hidden',active?'false':'true'); }); tabs.forEach((tab, i) => tab.setAttribute('aria-selected',i===index?'true':'false')); restartProgress(); schedule(); }; const schedule = () => { window.clearTimeout(timer); if (!reduced) timer = window.setTimeout(() => show(index+1), 7000); }; tabs.forEach((tab) => tab.addEventListener('click', () => show(Number(tab.dataset.heroGo || 0)))); slider.querySelector('[data-hero-prev]')?.addEventListener('click', () => show(index-1)); slider.querySelector('[data-hero-next]')?.addEventListener('click', () => show(index+1)); slider.addEventListener('mouseenter', () => window.clearTimeout(timer)); slider.addEventListener('mouseleave', schedule); slider.addEventListener('touchstart', (event) => { startX = event.touches[0].clientX; }, {passive:true}); slider.addEventListener('touchend', (event) => { const diff = event.changedTouches[0].clientX - startX; if (Math.abs(diff)>50) show(index + (diff<0?1:-1)); }, {passive:true}); slider.addEventListener('keydown', (event) => { if (event.key==='ArrowRight') show(index+1); if (event.key==='ArrowLeft') show(index-1); }); show(0); })();