/*! @flowpoweruser/attributes · drag-infinity-slider v1.0.0 (Paket v1.7.1) · Apache-2.0 · (c) 2026 FlowPowerUser · https://www.flowpoweruser.com/attributes */ (()=>{"use strict";const i="FlowPowerUser";if(window[i]&&!Array.isArray(window[i]))return;const s=Array.isArray(window[i])?window[i].slice():[],a=new Map,t=Object.create(null);function f(n,r,o){try{n(r)}catch(e){console.error(`[FPU] R\xFCckruf f\xFCr "${o}" ist gescheitert:`,e)}}function c(n){if(!Array.isArray(n))return;const[r,o]=n;if(typeof r!="string"||typeof o!="function")return;const e=t[r];if(e){f(o,e.api,r);return}a.has(r)||a.set(r,[]),a.get(r).push(o)}const d={solutions:t,push(...n){for(const r of n)c(r);return 0},restart(n){const r=n?[t[n]]:Object.values(t);for(const o of r)o?.restart()},destroy(n){const r=n?[t[n]]:Object.values(t);for(const o of r)o?.destroy()}};function w(n,r){const o={version:r.version,api:r.api,restart(){r.abraeumen(),r.starten(),o.api=r.api},destroy(){r.abraeumen()}};o.loading=Promise.resolve(r.api),t[n]=o;const e=a.get(n);if(e){a.delete(n);for(const p of e)f(p,r.api,n)}}window.__fpu={anmelden:w},window[i]=d;for(const n of s)c(n)})(); (()=>{"use strict";const h='.w-slider[fpu-slider-element="wrapper"]';let a={};const p="fpu-slider-styles",g="1.0.0",c=[];for(const o of document.querySelectorAll(h))o.setAttribute("data-disable-swipe","1");function m(){if(document.getElementById(p))return;const o=document.createElement("style");o.id=p,o.textContent=[".fpu-slide-transitioning { pointer-events: none !important; }",".fpu-slide-transitioning * { pointer-events: none !important; user-select: none !important; }",`${h} .w-slider-mask { cursor: grab; }`,`${h}.fpu-dragging .w-slider-mask { cursor: grabbing; }`,`${h}.fpu-dragging { user-select: none; -webkit-user-select: none; }`].join(` `),document.head.appendChild(o)}class b{constructor(t,i){this.root=t,this.id=i,this.mask=t.querySelector(".w-slider-mask");const s=this.mask?this.mask.querySelectorAll(".w-slide"):[];if(!this.mask||!s.length)throw new Error(`Slider #${i}: .w-slider-mask oder .w-slide fehlt`);this.arrowLeft=t.querySelector(".w-slider-arrow-left"),this.arrowRight=t.querySelector(".w-slider-arrow-right"),this.nav=t.querySelector(".w-slider-nav"),this.keyboardLeft=!!this.arrowLeft&&this.arrowLeft.getAttribute("fpu-slider-keyboard")==="true",this.keyboardRight=!!this.arrowRight&&this.arrowRight.getAttribute("fpu-slider-keyboard")==="true",this.inViewport=!0,this.viewObserver=null,this.count=s.length;const e=parseInt(t.getAttribute("fpu-slider-duration"),10);this.duration=e>0?e:Number.isInteger(a.duration)&&a.duration>0?a.duration:500;const r=t.getAttribute("data-infinite")==="true";this.isInfinite=this.readBool("fpu-slider-infinite",a.infinite,r)&&this.count>1,this.preventClicks=a.preventClicks!==!1,this.logging=this.readBool("fpu-slider-logging",a.logging,!1),this.autoplayConfigured=["1","true"].includes(t.getAttribute("data-autoplay")),this.autoplayConfigured&&console.warn(`[FPU Slider] Slider #${i}: data-autoplay ist aktiv \u2014 bitte im Designer deaktivieren; Webflows Timer wird neutralisiert.`),this.cloneSets=0,this.isInfinite&&this.createClones(s),this.slides=this.mask.querySelectorAll(".w-slide"),this.index=0,this.currentX=0,this.baseOffset=0,this.pointerId=null,this.dragging=!1,this.animating=!1,this.rafId=0,this.failsafe=0,this.startX=0,this.startTime=0,this.lastX=0,this.lastMoveTime=0,this.velocity=0,this.suppressClicksUntil=0,this.lastWheelNav=0,this.transitionsAnimated=null,this.dragController=null,this.onDragMove=n=>this.handleMove(n),this.onDragEnd=n=>this.handleEnd(n),this.tick=()=>this.handleTick(),this.controller=new AbortController,this.bindEvents(),this.neutralizeWebflowSlider(),this.stopWebflowAutoplay(),this.measure(),this.index=this.resolveStartIndex(),this.setTransitions(!1),this.applyTransform(-this.index*this.step),this.healWebflowResiduals(),this.updateUI(),this.resizeObserver=new ResizeObserver(()=>{this.measure(),!this.dragging&&!this.animating&&(this.setTransitions(!1),this.applyTransform(-this.index*this.step)),this.healWebflowResiduals(),this.updateUI()}),this.resizeObserver.observe(this.mask),this.logging&&console.info(`[FPU Slider] Slider #${i}: ${this.count} Slides, infinite=${this.isInfinite}, duration=${this.duration}ms`)}readBool(t,i,s){const e=this.root.getAttribute(t);return e!==null?e==="true":typeof i=="boolean"?i:s}createClones(t){this.cloneSets=Math.max(2,Math.ceil(10/this.count));const i=document.createDocumentFragment(),s=document.createDocumentFragment();for(let e=0;er.classList.contains("w-active"));e>0&&(t=e)}return t=Math.min(Math.max(t,0),this.count-1),this.isInfinite?t+this.count*this.cloneSets:t}measure(){const t=this.slides[0];this.slideWidth=t.offsetWidth;const i=getComputedStyle(t);this.step=this.slideWidth+(parseFloat(i.marginLeft)||0)+(parseFloat(i.marginRight)||0)}logicalIndex(t=this.index){return(t%this.count+this.count)%this.count}neutralizeWebflowSlider(){const t=window.Webflow,i=window.jQuery;if(!t||!i)return;const s=this.root,e=()=>{i(s).off("swipe");const r=i.data(s,".w-slider");!r||r.fpuNeutralized||!r.mask||(r.fpuNeutralized=!0,Object.defineProperty(r,"maskWidth",{get:()=>r.mask.width(),set:()=>{},configurable:!0}))};e(),this.wfNeutralize=e,typeof t.push=="function"&&t.push(e),t.redraw&&typeof t.redraw.on=="function"&&t.redraw.on(e)}stopWebflowAutoplay(){this.autoplayConfigured&&this.root.dispatchEvent(new MouseEvent("mousedown",{bubbles:!1}))}healWebflowResiduals(){for(const t of this.mask.querySelectorAll(".w-slide:not(.fpu-cloned-slide)")){t.removeAttribute("aria-hidden");for(const i of t.querySelectorAll('a[href][tabindex="-1"], button[tabindex="-1"], input[tabindex="-1"], select[tabindex="-1"], textarea[tabindex="-1"]'))i.removeAttribute("tabindex")}}setTransitions(t){if(this.transitionsAnimated===t)return;this.transitionsAnimated=t;const i=t?`transform ${this.duration}ms ease`:"none";for(const s of this.slides)s.style.transition=i}applyTransform(t){this.currentX=t;const i=`translate3d(${t}px, 0, 0)`;for(const s of this.slides)s.style.transform=i}bindEvents(){const{signal:t}=this.controller,i={capture:!0,signal:t};this.mask.style.touchAction="pan-y pinch-zoom",this.mask.style.overscrollBehaviorX="none",this.mask.addEventListener("pointerdown",e=>this.handleDown(e),{signal:t});const s=e=>{e.target.closest(".w-slider-arrow-left, .w-slider-arrow-right, .w-slider-dot")&&(e.type==="mousedown"&&e.preventDefault(),e.stopPropagation())};this.root.addEventListener("mousedown",s,i),this.root.addEventListener("touchstart",s,{capture:!0,passive:!0,signal:t}),this.root.addEventListener("click",e=>{this.preventClicks&&performance.now()this.handleArrow(e,-1),i),this.arrowRight&&this.arrowRight.addEventListener("click",e=>this.handleArrow(e,1),i),this.nav&&this.nav.addEventListener("click",e=>this.handleDotClick(e),i),this.root.addEventListener("keydown",e=>this.handleKeydown(e),i),this.mask.addEventListener("wheel",e=>this.handleWheel(e),{passive:!1,signal:t}),(this.keyboardLeft||this.keyboardRight)&&(this.viewObserver=new IntersectionObserver(e=>{this.inViewport=e[0].isIntersecting}),this.viewObserver.observe(this.root),document.addEventListener("keydown",e=>this.handleGlobalKeydown(e),{signal:t}));for(const e of this.root.querySelectorAll("img, a"))e.setAttribute("draggable","false");this.root.addEventListener("dragstart",e=>e.preventDefault(),{signal:t})}handleDown(t){if(this.stopWebflowAutoplay(),this.animating||this.pointerId!==null||t.pointerType==="mouse"&&t.button!==0||t.target.closest("input, select, textarea, button, [contenteditable], .w-slider-arrow-left, .w-slider-arrow-right, .w-slider-nav"))return;this.pointerId=t.pointerId,this.dragging=!1,this.startX=t.clientX,this.lastX=t.clientX,this.startTime=t.timeStamp,this.lastMoveTime=t.timeStamp,this.velocity=0,this.baseOffset=-this.index*this.step,this.dragController=new AbortController;const i={passive:!0,signal:this.dragController.signal};window.addEventListener("pointermove",this.onDragMove,i),window.addEventListener("pointerup",this.onDragEnd,i),window.addEventListener("pointercancel",this.onDragEnd,i)}handleMove(t){if(t.pointerId!==this.pointerId||this.animating)return;const i=t.timeStamp-this.lastMoveTime;if(i>0&&(this.velocity=(t.clientX-this.lastX)/i),this.lastX=t.clientX,this.lastMoveTime=t.timeStamp,!this.dragging){if(Math.abs(t.clientX-this.startX)<5)return;this.dragging=!0,this.root.classList.add("fpu-dragging"),this.setTransitions(!1),this.rafId=requestAnimationFrame(this.tick)}}handleTick(){if(!this.dragging){this.rafId=0;return}let t=this.baseOffset+(this.lastX-this.startX);this.isInfinite&&(t=this.wrapDuringDrag(t)),this.applyTransform(t),this.rafId=requestAnimationFrame(this.tick)}wrapDuringDrag(t){const i=this.count*this.step;if(!i)return t;const s=-this.count*this.step,e=-this.count*(this.cloneSets+1)*this.step;for(;t>s;)t-=i,this.baseOffset-=i,this.index+=this.count;for(;t.2*this.slideWidth||n>.5){const u=e<200&&n>.8?1:Math.max(1,Math.floor(r/this.slideWidth)),v=s<0?1:-1;this.goTo(this.index+v*u)}else this.goTo(this.index)}goTo(t){Number.isFinite(t)||(t=this.index),this.isInfinite||(t=Math.min(Math.max(t,0),this.count-1));const i=-t*this.step;if(this.index=t,this.updateUI(),this.currentX===i)return;this.animating=!0,this.root.classList.add("fpu-slide-transitioning"),this.setTransitions(!0),this.applyTransform(i);let s=!1;const e=()=>{s||(s=!0,clearTimeout(this.failsafe),this.slides[0].removeEventListener("transitionend",r),!this.controller.signal.aborted&&this.afterNavigation())},r=n=>{n.target===this.slides[0]&&n.propertyName==="transform"&&e()};this.slides[0].addEventListener("transitionend",r,{signal:this.controller.signal}),this.failsafe=setTimeout(e,this.duration+100)}afterNavigation(){if(this.isInfinite){const t=this.count,i=this.count*(this.cloneSets+1);(this.index=i)&&(this.index=t+this.logicalIndex())}this.setTransitions(!1),this.applyTransform(-this.index*this.step),this.animating=!1,this.root.classList.remove("fpu-slide-transitioning"),this.updateUI()}handleArrow(t,i){t.preventDefault(),t.stopPropagation(),this.navigate(i)}navigate(t){this.animating||this.dragging||this.pointerId!==null||this.goTo(this.index+t)}handleGlobalKeydown(t){if(t.key!=="ArrowLeft"&&t.key!=="ArrowRight"||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||!this.inViewport)return;const i=t.key==="ArrowLeft";(i?!this.keyboardLeft:!this.keyboardRight)||t.target instanceof Element&&t.target.closest("input, select, textarea, [contenteditable], video, audio, .w-slider-dot")||(t.preventDefault(),this.navigate(i?-1:1))}handleDotClick(t){const i=t.target.closest(".w-slider-dot");if(!i||!this.nav.contains(i))return;if(t.stopPropagation(),this.dragging||this.animating||this.pointerId!==null){t.preventDefault();return}const s=Array.from(this.nav.children).indexOf(i);if(!(s<0))if(this.isInfinite){let e=s-this.logicalIndex();Math.abs(e)>this.count/2&&(e-=Math.sign(e)*this.count),this.goTo(this.index+e)}else this.goTo(s)}handleKeydown(t){const i=t.key==="Enter"||t.key===" "||t.key==="Spacebar",s=t.target.closest(".w-slider-arrow-left"),e=t.target.closest(".w-slider-arrow-right"),r=t.target.closest(".w-slider-dot");if(!(!s&&!e&&!r)){if(i){if(s){this.handleArrow(t,-1);return}if(e){this.handleArrow(t,1);return}t.preventDefault(),t.stopPropagation(),this.handleDotClick(t);return}if(r&&["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(t.key)){t.preventDefault(),t.stopPropagation();const n=Array.from(this.nav.children),l=n.indexOf(r),u=t.key==="Home"?0:t.key==="End"?n.length-1:t.key==="ArrowLeft"||t.key==="ArrowUp"?Math.max(l-1,0):Math.min(l+1,n.length-1);n[u]&&n[u].focus()}}}handleWheel(t){let i=t.deltaX,s=t.deltaY;t.shiftKey&&!i&&(i=s,s=0);const e=t.deltaMode===1?40:t.deltaMode===2?800:1;if(i*=e,s*=e,Math.abs(i)<=1.5*Math.abs(s)||Math.abs(i)<=3||(t.preventDefault(),t.stopPropagation(),this.pointerId!==null||this.animating||Math.abs(i)<=15))return;const r=performance.now();r-this.lastWheelNav<800||(this.lastWheelNav=r,this.goTo(this.index+(i>0?1:-1)))}updateUI(){const t=this.logicalIndex();this.slides.forEach((i,s)=>{i.classList.toggle("w-active",s%this.count===t)}),this.nav&&Array.from(this.nav.children).forEach((i,s)=>{const e=s===t;i.classList.toggle("w-active",e),i.setAttribute("aria-selected",String(e)),i.setAttribute("aria-pressed",String(e)),i.setAttribute("tabindex",e?"0":"-1")}),this.arrowLeft&&this.setArrowState(this.arrowLeft,"w-slider-arrow-left-inactive",!this.isInfinite&&t===0),this.arrowRight&&this.setArrowState(this.arrowRight,"w-slider-arrow-right-inactive",!this.isInfinite&&t===this.count-1)}setArrowState(t,i,s){t.classList.toggle(i,s),t.setAttribute("aria-disabled",String(s)),t.setAttribute("tabindex",s?"-1":"0")}destroy(){this.controller.abort(),this.dragController&&this.dragController.abort(),this.rafId&&cancelAnimationFrame(this.rafId),clearTimeout(this.failsafe),this.resizeObserver.disconnect(),this.viewObserver&&this.viewObserver.disconnect();const t=window.Webflow;this.wfNeutralize&&t&&t.redraw&&typeof t.redraw.off=="function"&&t.redraw.off(this.wfNeutralize);for(const i of this.mask.querySelectorAll(".fpu-cloned-slide"))i.remove();for(const i of this.mask.querySelectorAll(".w-slide"))i.style.transform="",i.style.transition="";this.root.classList.remove("fpu-dragging","fpu-slide-transitioning")}}let d=!1;function f(){d||(d=!0,a=window.fpuSliderConfig||{},m(),document.querySelectorAll(h).forEach((o,t)=>{try{c.push(new b(o,t))}catch(i){console.error("[FPU Slider] Init fehlgeschlagen:",i)}}),window.__fpu?.anmelden?.("drag-infinity-slider",{version:g,api:window.fpuSlider,starten:f,abraeumen:()=>window.fpuSlider.destroyAll()}))}window.fpuSlider={version:g,instances:c,init:f,destroyAll(){for(const o of c)o.destroy();c.length=0,d=!1}},(window.Webflow=window.Webflow||[]).push(f);const w=()=>{if(d)return;!document.querySelector('script[src*="webflow"]')&&Array.isArray(window.Webflow)&&f()};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",w,{once:!0}):setTimeout(w,0),window.addEventListener("load",()=>{!d&&Array.isArray(window.Webflow)&&f()},{once:!0})})(); //# sourceMappingURL=drag-infinity-slider.js.map