1(function(){const{mergeObjects,onResize,matchMedia,prefersReducedMotion,isBuilder}=BreakdanceFrontend.utils;class BreakdanceEntrance{enabledClass='breakdance-animation-enabled';beforeClass='is-before';animatingClass='is-animating';completedClass='is-animated';defaultOptions={animation_type:null,duration:{number:500,unit:'ms',style:'500ms'},delay:{number:0,unit:'ms',style:'0ms'},advanced:{distance:{number:100,unit:"px",style:"100px"},offset:{number:0,unit:'px',style:'0px'},ease:'power1.out',anchorPlacement:'top bottom',once:!1,disable_at:null}};delay=0;initialized=!1;constructor(selector,options){gsap.registerPlugin(ScrollTrigger);this.cleanup=this.cleanup.bind(this);this.reset=this.reset.bind(this);this.selector=selector;this.options=mergeObjects(this.defaultOptions,options);this.rootEl=document.documentElement;this.init()} 2getAnimations(){const distance=this.options.advanced.distance.style;const unit=this.options.advanced.distance.unit;return{fade:[{autoAlpha:0},{autoAlpha:1}],slideUp:[{y:distance},{y:`0${unit}`}],slideDown:[{y:`-=${distance}`},{y:`0${unit}`}],slideLeft:[{x:`-=${distance}`},{x:`0${unit}`}],slideRight:[{x:distance},{x:`0${unit}`}],flipUp:[{perspective:2500,rotateX:`-=${distance}`},{rotateX:`0${unit}`}],flipDown:[{perspective:2500,rotateX:distance},{rotateX:`0${unit}`}],flipLeft:[{perspective:2500,rotateY:`-=${distance}`},{rotateY:`0${unit}`}],flipRight:[{perspective:2500,rotateY:distance},{rotateY:`0${unit}`}],zoomIn:[{scale:0.6},{scale:1}],zoomOut:[{scale:1.2},{scale:1}],}} 3canAnimate(){const breakpoint=this.options.advanced.disable_at;if(!breakpoint)return!0;return!matchMedia(breakpoint)} 4getDuration(value){if(!value)return value;if(value.unit==='s')return value.number;return value.number/1000} 5cleanup(){gsap.set(this.element,{clearProps:'all'})} 6reset(element){const el=element||this.element;el.classList.add(this.beforeClass);el.classList.remove(this.completedClass);el.classList.remove(this.animatingClass)} 7getOffset(offset,anchor){const defaultOffset=120;if(anchor==='top bottom'&&offset.number===0){return defaultOffset} 8return offset.number} 9createTween(){const type=this.options.animation_type;const animations=this.getAnimations();if(!animations[type]){console.error(`[ENTRANCE] The selected ${type} animation is invalid.`);return} 10const[from,to]=animations[type];const{ease,once,anchorPlacement}=this.options.advanced;const duration=this.getDuration(this.options.duration);const delay=this.getDuration(this.options.delay)+this.delay;const offset=this.getOffset(this.options.advanced.offset,anchorPlacement);const[elementStart,viewportStart]=anchorPlacement.split(' ');const anim=gsap.timeline({delay,paused:!0});this.element.classList.add(this.beforeClass);if(isBuilder()){this.hideEl()} 11this.startTrigger=ScrollTrigger.create({trigger:this.element,start:`${elementStart}+=${offset} ${viewportStart}`,toggleActions:"play none none none",once,onEnter:()=>anim.play()});anim.fromTo(this.element,{...from,autoAlpha:0,},{...to,duration,delay,ease,autoAlpha:1,clearProps:'all',immediateRender:!1,onStart:()=>{this.element.classList.add(this.animatingClass);this.element.classList.remove(this.beforeClass)},onComplete:()=>{this.element.classList.remove(this.animatingClass);this.element.classList.add(this.completedClass)},onReverseComplete:()=>{this.element.classList.add(this.beforeClass);this.element.classList.remove(this.animatingClass)},});if(!once){this.goToBeginningOnReverse(anim)} 12return anim} 13goToBeginningOnReverse(animation){this.endTrigger=ScrollTrigger.create({trigger:this.element,start:`top-=10 bottom`,onLeaveBack:()=>{animation.pause(0);this.cleanup();if(isBuilder()){this.hideEl()} 14this.reset()}})} 15hideEl(){gsap.set(this.element,{autoAlpha:0})} 16update(options){this.options=mergeObjects(this.defaultOptions,options);this.destroy();this.init()} 17replay(delay=0){this.destroy();this.reset();this.delay=delay;this.init()} 18destroy(){this.initialized=!1;if(!this.element)return;this.element.classList.add(this.completedClass);if(!this.tween)return;this.tween.kill();this.tween=null;this.startTrigger?.kill();this.endTrigger?.kill();gsap.set(this.element,{clearProps:'all'})} 19refresh(){ScrollTrigger.refresh()} 20initTween(){if(this.initialized)return;this.initialized=!0;this.element.classList.remove(this.completedClass);this.tween=this.createTween()}
21initOrDestroy(){if(this.canAnimate()){this.initTween()}else{this.destroy()}} 22init(){if(!this.options.animation_type)return;this.element=document.querySelector(this.selector);this.element.bdAnim=this;if(prefersReducedMotion()){this.element.classList.add(this.completedClass);return} 23onResize(()=>this.initOrDestroy());this.rootEl.classList.add(this.enabledClass)} 24static autoload(){const loaded=imagesLoaded(document.body);loaded.on("always",()=>{const event=new Event("breakdance_refresh_animations",{bubbles:!0});document.dispatchEvent(event);ScrollTrigger.refresh(!0)});addEventListener("breakdance_play_animations",(event)=>{const target=event.target===window?document.body:event.target;const nodes=[target,...target.querySelectorAll("[data-entrance]")];nodes.forEach((el)=>el.bdAnim?.replay(event?.detail?.delay))});addEventListener("breakdance_refresh_animations",(event)=>{const target=event.target===window?document.body:event.target;const nodes=[target,...target.querySelectorAll("[data-entrance]")];nodes.forEach((el)=>el.bdAnim?.cleanup())});addEventListener("breakdance_reset_animations",(event)=>{const target=event.target===window?document.body:event.target;const nodes=[target,...target.querySelectorAll("[data-entrance]")];nodes.forEach((el)=>el.bdAnim?.reset(el))})} 25static dontLetScrollTriggerMutateScrollPosition(){window.addEventListener("load",()=>{if(!location.hash)return;if(window.bdeAnimationScrolled)return;const scrollElem=document.querySelector(location.hash);if(!scrollElem)return;requestAnimationFrame(()=>{scrollElem.scrollIntoView({behavior:"smooth",})});window.bdeAnimationScrolled=!0})}} 26window.BreakdanceEntrance=BreakdanceEntrance;BreakdanceEntrance.autoload();BreakdanceEntrance.dontLetScrollTriggerMutateScrollPosition()}())
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.