@fiddle-digital/string-tune 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- var U=class{constructor(t=.1,e){this.SETTLE_THRESHOLD=.1;this.smoothingFactor=t,this.context=e,this.onSettingsChange()}onMouseMove(t){this.context.data.cursor.targetX=t.clientX,this.context.data.cursor.targetY=t.clientY}onFrame(){let{targetX:t,targetY:e,smoothedX:r,smoothedY:i}=this.context.data.cursor,o=this.context.tools.lerp.process({from:r,to:t,progress:this.smoothingFactor}),s=this.context.tools.lerp.process({from:i,to:e,progress:this.smoothingFactor}),n=this.getStepDistance(o,s);this.isSettled(n)?this.snapToTarget():this.applyStep(o,s)}onSettingsChange(){let t=Number(this.context.settings.lerp);this.setLerpFactor(t)}setLerpFactor(t){this.smoothingFactor=this.context.tools.adaptiveLerp.process({value:t,inMin:.1,inMax:1,outMin:.05,outMax:.65})}getStepDistance(t,e){return Math.hypot(t,e)}isSettled(t){return t<this.SETTLE_THRESHOLD}snapToTarget(){this.context.data.cursor.smoothedX=this.context.data.cursor.targetX,this.context.data.cursor.smoothedY=this.context.data.cursor.targetY,this.context.data.cursor.stepX=0,this.context.data.cursor.stepY=0}applyStep(t,e){this.context.data.cursor.smoothedX+=t,this.context.data.cursor.smoothedY+=e,this.context.data.cursor.stepX=t,this.context.data.cursor.stepY=e}};var C=class{constructor(){this.listeners={}}on(t,e,r){let i=r?`${t}_${r}`:t;this.listeners[i]||(this.listeners[i]=new Set),this.listeners[i].add(e)}off(t,e,r){let i=r?`${t}_${r}`:t;this.listeners[i]&&this.listeners[i].delete(e)}emit(t,e){let r=this.listeners[t];if(r)for(let i of r)i(e)}onProgress(t,e){this.on(`progress:${t}`,e)}emitProgress(t,e){this.emit(`progress:${t}`,e)}onInview(t,e){this.on(`object:inview:${t}`,e)}emitInview(t,e){this.emit(`object:inview${t}`,e)}onScroll(t){this.on("scroll",t)}emitScroll(t){this.emit("scroll",t)}onUpdate(t){this.on("update",t)}emitUpdate(){this.emit("update")}clear(t){delete this.listeners[t]}clearAll(){this.listeners={}}};var X=class{constructor(t){this.data=t;this.modules=[];this.uiModules=[]}register(t){t.type===1&&this.modules.push(t),t.type===2&&this.uiModules.push(t)}find(t){return this.modules.find(e=>e instanceof t)}onInit(){[...this.modules,...this.uiModules].forEach(t=>t.onInit())}onFrame(){[...this.modules,...this.uiModules].forEach(t=>t.onFrame(this.data))}onScroll(){[...this.modules,...this.uiModules].forEach(t=>t.onScroll(this.data))}onResize(){[...this.modules,...this.uiModules].forEach(t=>t.onResize())}onMouseMove(t){[...this.modules,...this.uiModules].forEach(e=>e.onMouseMove(t))}onWheel(t){[...this.modules,...this.uiModules].forEach(e=>e.onWheel(t))}onDirectionChange(){[...this.modules,...this.uiModules].forEach(t=>t.onDirectionChange())}onScrollStart(){[...this.modules,...this.uiModules].forEach(t=>t.onScrollStart())}onScrollStop(){[...this.modules,...this.uiModules].forEach(t=>t.onScrollStop())}onAxisChange(){[...this.modules,...this.uiModules].forEach(t=>t.onAxisChange())}onDeviceChange(){[...this.modules,...this.uiModules].forEach(t=>t.onDeviceChange())}onScrollConfigChange(){[...this.modules,...this.uiModules].forEach(t=>t.onScrollConfigChange())}onSettingsChange(){[...this.modules,...this.uiModules].forEach(t=>t.onSettingsChange())}onDOMMutate(t,e){[...this.modules,...this.uiModules].forEach(r=>r.onDOMMutate(t,e))}destroy(){[...this.modules,...this.uiModules].forEach(t=>t.destroy()),this.modules=[],this.uiModules=[]}get all(){return[...this.modules,...this.uiModules]}get core(){return this.modules}get ui(){return this.uiModules}};var I=class{constructor(t,e){this.id="";this.keys=[];this.connects=[];this.properties=new Map;this.modules=[];this.events=new C;this.htmlElement=e,this.id=t}setProperty(t,e){this.properties.set(t,e)}getProperty(t){return this.properties.get(t)??null}enter(){this.events.emit("enter",this),this.setProperty("active",!0),this.modules.forEach(t=>{t.enterObject(this.id,this)})}leave(){this.events.emit("leave",this),this.setProperty("active",!1),this.modules.forEach(t=>{t.exitObject(this.id)})}show(){this.htmlElement.classList.add("-inview")}hide(){this.getProperty("repeat")&&this.htmlElement.classList.remove("-inview")}connect(t){this.modules.includes(t)||this.modules.push(t)}};var _=class{constructor(t,e,r){this.data=t;this.modules=e;this.events=r;this.objects=new Map;this.connectQueue=[];this.globalId=1}get all(){return this.objects}add(t){let e=t.getAttribute("string-id")??`string-${this.globalId++}`,r=e&&this.objects.has(e)?this.objects.get(e):new I(e,t);t.setAttribute("string-id",r.id);let i=t.getAttribute("string")??t.getAttribute("data-string");i&&(r.keys=(i??"").split("|")),t.setAttribute("string-inited",""),this.objects.set(r.id,r);let o=this.getAllAttributes(t);this.modules.core.forEach(n=>{"setupCoreProperties"in n&&typeof n.setupCoreProperties=="function"&&n.setupCoreProperties(r,t,o)}),this.modules.core.forEach(n=>{n.canConnect(r)&&(n.initializeObject(this.globalId,r,t,o),n.calculatePositions(r,this.data.viewport.windowHeight),n.connectObject(r))}),this.connectQueue.filter(n=>n.id===r.id).forEach(n=>r.connects.push(n.element)),this.connectQueue=this.connectQueue.filter(n=>n.id!==r.id),this.initObservers(r,t)}remove(t){let e=this.objects.get(t);e&&(e.events.clearAll(),e.getProperty("observer-progress")?.disconnect(),e.getProperty("observer-inview")?.disconnect(),e.htmlElement.removeAttribute("string-inited"),e.leave(),this.objects.delete(t))}enqueueConnection(t,e){this.connectQueue.push({id:t,element:e})}getAllAttributes(t){let e={};return Array.from(t.attributes).forEach(r=>{e[r.name]=r.value}),e}initObservers(t,e){let r=t.getProperty("offset-top")??0,i=t.getProperty("offset-bottom")??0,o=t.getProperty("inview-top")??0,s=t.getProperty("inview-bottom")??0;t.getProperty("observer-progress")?.disconnect(),t.getProperty("observer-inview")?.disconnect();let n=m=>{m.forEach(l=>{this.events.emit(`object:activate:${t.id}`,l.isIntersecting),l.isIntersecting?t.enter():t.leave()})},a=m=>{m.forEach(l=>{this.events.emit(`object:inview:${t.id}`,l.isIntersecting),l.isIntersecting?t.show():t.hide()})},p=new IntersectionObserver(n,{root:null,rootMargin:`${i+this.data.viewport.windowHeight}px 0px ${r+this.data.viewport.windowHeight}px 0px`,threshold:.001}),d=new IntersectionObserver(a,{root:null,rootMargin:`${i+o}px 0px ${r+s}px 0px`,threshold:.001});p.observe(e),d.observe(e),t.setProperty("observer-progress",p),t.setProperty("observer-inview",d)}observeDOM(){new MutationObserver(e=>{e.forEach(r=>{r.type==="childList"&&(r.removedNodes.forEach(i=>{if(i.nodeType!==Node.ELEMENT_NODE)return;let o=i;this.isFixed(o)||(o.hasAttribute("string")&&this.handleRemoved(o),o.querySelectorAll("[string],[data-string]").forEach(s=>{this.isFixed(s)||this.handleRemoved(s)}))}),r.addedNodes.forEach(i=>{if(i.nodeType!==Node.ELEMENT_NODE)return;let o=i;if(this.isFixed(o))return;o.hasAttribute("string")&&!o.hasAttribute("string-inited")&&this.add(o),o.querySelectorAll("[string]:not([string-inited]),[data-string]:not([string-inited])").forEach(n=>this.add(n));let s=o.getAttribute("string-copy-from")??o.getAttribute("data-string-copy-from");s&&(this.objects.has(s)?this.objects.get(s).connects.push(o):this.enqueueConnection(s,o))}),this.modules.all.forEach(i=>i.onDOMRebuild()))})}).observe(document.body,{childList:!0,subtree:!0})}handleRemoved(t){let e=t.getAttribute("string-id");if(!e)return;let r=t.getAttribute("string-copy-from")??t.getAttribute("data-string-copy-from");r&&(this.connectQueue=this.connectQueue.filter(i=>i.id!==r)),this.remove(e)}onSettingsChange(){this.objects.forEach(t=>{this.modules.core.forEach(e=>{if(e.canConnect(t)){let r=this.getAllAttributes(t.htmlElement);e.initializeObject(this.globalId,t,t.htmlElement,r),e.calculatePositions(t,this.data.viewport.windowHeight),e.connectObject(t)}})})}isFixed(t){return t.hasAttribute("string-fixed")}};var M=class{constructor(t){this.name="";this.isProg=!1;this.isParallaxEnabled=!1;this._scrollDirection="vertical";this.onChangeDirection=()=>{};this.onScrollStart=()=>{};this.onScrollStop=()=>{};this.onCalcUpdate=()=>{this.context.data.scroll.scrollContainer?.scrollTo(0,this.context.data.scroll.current)};this.document=document,this.context=t}set scrollDirection(t){this._scrollDirection=t,this._scrollDirection==="vertical"?this.onCalcUpdate=()=>{this.context.data.scroll.scrollContainer?.scrollTo(0,this.context.data.scroll.current)}:this._scrollDirection==="horizontal"&&(this.onCalcUpdate=()=>{this.context.data.scroll.scrollContainer?.scrollTo(this.context.data.scroll.current,0)})}onFrame(){}onWheel(t){}onScroll(t){}};var Q=class extends M{constructor(e){super(e);this.name="default"}onFrame(){if(this.context.data.scroll.delta!==0){let e=this.context.data.scroll.delta*this.context.data.scroll.speedAccelerate;this.context.data.scroll.delta-=e,this.context.data.scroll.lerped=e,Math.abs(this.context.data.scroll.lerped)<.1&&(this.context.data.scroll.delta=0,this.context.data.scroll.lerped=0,this.onScrollStop())}}onScroll(e){let r=this.context.data.scroll.elementContainer.scrollTop;this.context.data.scroll.current=r,this.context.data.scroll.target=r,this.context.data.scroll.transformedCurrent=r}onWheel(e){if(e.deltaY!==0){this.context.data.scroll.delta===0&&this.onScrollStart();let r=e.deltaY;this.context.data.scroll.target===0&&(this.context.data.scroll.delta+=Math.max(0,e.deltaY)),this.context.data.scroll.delta+=r}}};var j=class extends M{constructor(e){super(e);this.name="smooth"}onFrame(){}onWheel(e){e.preventDefault()}onScroll(e){e.preventDefault()}};var K={SCROLL_FORWARD:"-scroll-forward",SCROLL_BACK:"-scroll-back"},G=class extends M{constructor(e){super(e);this.name="smooth";this.isScrollbarManipulation=!1;this.scrollForce=0;this.wheelImpulse=0;this.previousCurrent=0;this.isBottomScrollDirection=null;this.velocityThreshold=.1}updateScrollDirection(e){if(this.isBottomScrollDirection===null){this.isBottomScrollDirection=e;return}this.context.data.scroll.isScrollingDown=e,this.onChangeDirection(),document.documentElement.classList.toggle(K.SCROLL_FORWARD,e),document.documentElement.classList.toggle(K.SCROLL_BACK,!e)}stopScroll(){this.context.data.scroll.lerped=0,this.context.data.scroll.delta=0,this.context.data.scroll.target=this.context.data.scroll.current,this.isProg=!1,this.onCalcUpdate(),document.documentElement.classList.remove(K.SCROLL_BACK,K.SCROLL_FORWARD),this.isBottomScrollDirection=null}onFrame(){if(this.isScrollbarManipulation){this.isScrollbarManipulation=!1,this.context.data.scroll.current=this.context.data.scroll.elementContainer.scrollTop,this.context.data.scroll.target=this.context.data.scroll.elementContainer.scrollTop,this.context.data.scroll.transformedCurrent=this.context.data.scroll.current*this.context.data.viewport.transformScale;return}if(this.context.data.scroll.delta!==0){this.scrollForce=this.context.data.scroll.delta*this.context.data.scroll.speedAccelerate,this.context.data.scroll.target=Math.min(Math.max(0,this.context.data.scroll.target+this.scrollForce),this.context.data.scroll.bottomPosition),this.context.data.scroll.delta-=this.scrollForce,this.context.data.scroll.lerped=(this.context.data.scroll.target-this.context.data.scroll.current)*this.context.data.scroll.speed;let e=Math.abs(this.context.data.scroll.lerped);this.context.data.scroll.lerped>0?this.context.data.scroll.current=Math.ceil(this.context.data.scroll.current+this.context.data.scroll.lerped):this.context.data.scroll.current=Math.floor(this.context.data.scroll.current+this.context.data.scroll.lerped),this.context.data.scroll.transformedCurrent=this.context.data.scroll.current*this.context.data.viewport.transformScale,this.updateScrollDirection(this.context.data.scroll.lerped>0),e<this.velocityThreshold?(this.stopScroll(),this.onScrollStop()):(this.isProg=!0,this.previousCurrent!==this.context.data.scroll.current&&(this.previousCurrent=this.context.data.scroll.current,this.onCalcUpdate()))}}onWheel(e){if(e.deltaY!==0&&e.preventDefault(),this.wheelImpulse=e.deltaY,this.wheelImpulse===0)return;this.context.data.scroll.delta===0&&this.onScrollStart();let r=Math.sign(this.wheelImpulse),i=this.context.data.scroll.target===0&&r<0,o=this.context.data.scroll.target===this.context.data.scroll.bottomPosition&&r>0;i||o||(this.context.data.scroll.delta+=this.wheelImpulse)}onScroll(e){this.isProg||(this.isScrollbarManipulation=!0)}};var J=class{constructor(t){this.context=t;this.modes=new Map;this.modes.set("smooth",new G(t)),this.modes.set("default",new Q(t)),this.modes.set("disable",new j(t)),this.updateResponsiveMode()}setMobileMode(t){this.context.data.scroll.modeMobile=t,this.updateResponsiveMode()}setDesktopMode(t){this.context.data.scroll.modeDesktop=t,this.updateResponsiveMode()}updateResponsiveMode(){let e=window.innerWidth<1080?this.context.data.scroll.modeMobile:this.context.data.scroll.modeDesktop;this.setMode(e)}updatePosition(){this.modes.forEach(t=>{t.onCalcUpdate()})}setMode(t){if(!this.modes.has(t)){console.warn(`[ScrollManager] Unknown scroll mode: ${t}`);return}this.context.data.scroll.mode=t}get(){return this.modes.get(this.context.data.scroll.mode)}getEngines(){return this.modes}onFrame(){this.get().onFrame()}onScroll(t){this.get().onScroll(t)}onWheel(t){this.get().onWheel(t)}bindEvents(t){this.modes.forEach(e=>{e.onScrollStart=t.onScrollStart,e.onScrollStop=t.onScrollStop,e.onChangeDirection=t.onDirectionChange})}};var Z=class{constructor(){this.targetX=0;this.targetY=0;this.smoothedX=0;this.smoothedY=0;this.stepX=0;this.stepY=0}};var tt=class{constructor(){this.threeInstance=null}};var et=class{constructor(){this.target=0;this.current=0;this.transformedCurrent=0;this.delta=0;this.lerped=0;this.displacement=0;this.isScrollingDown=!1;this.topPosition=0;this.bottomPosition=0;this.direction="vertical";this.elementContainer=document.documentElement;this.scrollContainer=window;this.container=document.body;this.mode="smooth";this.modeMobile="smooth";this.modeDesktop="smooth";this.speed=.1;this.speedAccelerate=.25}};var rt=class{constructor(){this.now=0;this.previous=0;this.delta=0;this.elapsed=0}};var it=class{constructor(){this.windowWidth=0;this.windowHeight=0;this.contentWidth=0;this.contentHeight=0;this.scaleWidth=1;this.scaleHeight=1;this.transformScale=1;this.baseRem=16}};var ot=class{constructor(){this.scroll=new et;this.viewport=new it;this.cursor=new Z;this.render=new tt;this.time=new rt}};var h=class{constructor(t){this.objectMap=new Map;this.objects=[];this.htmlKey="";this._type=1;this.tools=t.tools,this.data=t.data,this.settings=t.settings,this.events=t.events,this.attributesToMap=[{key:"active",type:"boolean",fallback:this.settings.active},{key:"fixed",type:"boolean",fallback:this.settings.fixed},{key:"repeat",type:"boolean",fallback:this.settings.repeat},{key:"self-disable",type:"boolean",fallback:this.settings["self-disable"]},{key:"abs",type:"boolean",fallback:this.settings.abs},{key:"key",type:"string",fallback:this.settings.key},{key:"offset-top",type:"dimension",fallback:this.settings["offset-top"]},{key:"offset-bottom",type:"dimension",fallback:this.settings["offset-bottom"]},{key:"inview-top",type:"dimension",fallback:this.settings["inview-top"]},{key:"inview-bottom",type:"dimension",fallback:this.settings["inview-bottom"]},{key:"start",type:"number",fallback:(e,r,i)=>{let o=i.top;return Math.floor(o)+this.data.scroll.container.scrollTop*this.data.viewport.transformScale}},{key:"end",type:"number",fallback:(e,r,i)=>{let o=i.top,s=i.height;return o+s-this.data.scroll.transformedCurrent}},{key:"size",type:"number",fallback:(e,r,i)=>i.height},{key:"half-width",type:"number",fallback:(e,r,i)=>i.width/2},{key:"half-height",type:"number",fallback:(e,r,i)=>i.height/2}]}get type(){return this._type}initializeObject(t,e,r,i){let o=this.tools.boundingClientRect.process({element:r});for(let{key:s,type:n,fallback:a,transform:p}of this.attributesToMap){let d=typeof a=="function"?a(r,e,o):a,m=this.tools.domAttribute.process({element:r,key:s,fallback:i[s]??this.settings[s]??d}),l=this.parseAttribute(m,n,{element:r,viewportHeight:this.data.viewport.windowHeight,baseRem:this.data.viewport.baseRem});p&&(l=p(l)),e.setProperty(s,l)}}calculatePositions(t,e){}parseAttribute(t,e,r={}){if(t==null)return null;if(typeof e=="object"&&e.type==="enum")return e.values.includes(t)?t:e.values[0];switch(e){case"number":return parseFloat(t);case"boolean":return t===""||t==="true";case"json":try{return JSON.parse(t)}catch{return null}case"tuple":return t.trim().split(/\s+/);case"easing":return this.tools.easingFunction.process({easing:t});case"color":return this.tools.colorParser.process({value:t});case"dimension":return t=="0"?0:r.element!=null&&r.viewportHeight!=null&&r.baseRem!=null?this.tools.unitParser.process({value:t,element:r.element,viewportHeight:r.viewportHeight,baseRem:r.baseRem}):0;default:return t}}canConnect(t){return t.keys.includes(this.htmlKey)}connectObject(t){t.connect(this),this.onObjectConnected(t)}enterObject(t,e){this.objectMap.has(t)||(this.objectMap.set(t,e),this.objects.push(e))}exitObject(t){let e=this.objectMap.get(t);if(!e)return;this.objectMap.delete(t);let r=this.objects.indexOf(e);r!==-1&&this.objects.splice(r,1)}onObjectConnected(t){}applyToElementAndConnects(t,e){e(t.htmlElement),t.connects.forEach(e)}destroy(){this.objects=[],this.objectMap=new Map}onInit(){}onFrame(t){}onResize(){}onScroll(t){}onDirectionChange(){}onScrollStart(){}onScrollStop(){}onScrollDirectionChange(){}onAxisChange(){}onDeviceChange(){}onScrollConfigChange(){}onSettingsChange(){}onDOMRebuild(){}onMouseMove(t){}onWheel(t){}onDOMMutate(t,e){}};var P=class{process({element:t}){return t.getBoundingClientRect()}};var L=class{process({element:t,key:e,fallback:r=null}){return t.getAttribute(`string-${e}`)??t.getAttribute(`data-string-${e}`)??r}};var O=class{process({record:t,name:e,fallback:r=null}){return t[e]??t[`data-${e}`]??r}};var E=class{process({element:t}){let e=t.getBoundingClientRect(),i=getComputedStyle(t).transform.match(/-?[\d.]+/g)?.map(parseFloat)??[];if(i.length===6){let[o,s,n,a,p,d]=i,m=o*a-s*n;return{width:e.width/(o||1),height:e.height/(a||1),left:(e.left*a-e.top*n+n*d-p*a)/m,top:(-e.left*s+e.top*o+p*s-o*d)/m}}return e}};var D=class{constructor(t=new E){this.transformTool=t}process({element:t,container:e=document.body}){let r;try{r=e.getBoundingClientRect()}catch{r=document.body.getBoundingClientRect()}let i=this.transformTool.process({element:t});return{top:i.top-r.top,left:i.left-r.left}}};var k=class{process({from:t,to:e,progress:r}){return(e-t)*r}};var R=class{process({value:t,element:e,viewportHeight:r,baseRem:i}){let o=t.startsWith("-");o&&(t=t.slice(1));let s=0;return t==="selfHeight"?s=e.offsetHeight:t.endsWith("px")?s=parseFloat(t):t.endsWith("%")?s=parseFloat(t)/100*r:t.endsWith("rem")&&(s=parseFloat(t)*i),o?-s:s}};var H=class{process({value:t,inMin:e=.1,inMax:r=1,outMin:i=.05,outMax:o=.65}){if(t<e)return o;if(t>1&&(t=1),t<=r){let s=(t-e)/(r-e);return o-s*(o-i)}return i}};var A=class{process({value:t}){let e=t.trim();if(e.startsWith("random(")&&e.endsWith(")")){let r=e.slice(7,-1).split(",").map(o=>o.trim()).filter(Boolean),i=Math.floor(Math.random()*r.length);return r[i]}return e}};var F=class{process({value:t}){let e=t.trim().toLowerCase();if(e.startsWith("#")){let o=e.slice(1);o.length===3&&(o=o.split("").map(d=>d+d).join(""));let s=parseInt(o.slice(0,2),16),n=parseInt(o.slice(2,4),16),a=parseInt(o.slice(4,6),16),p=o.length===8?parseInt(o.slice(6,8),16)/255:1;return{r:s,g:n,b:a,a:p}}let r=e.match(/rgba?\(([^)]+)\)/);if(r){let[o,s,n,a=1]=r[1].split(",").map(p=>parseFloat(p.trim()));return{r:o,g:s,b:n,a}}let i=e.match(/hsla?\(([^)]+)\)/);if(i){let[o,s,n,a="1"]=i[1].split(",").map(l=>l.trim()),[p,d,m]=this.hslToRgb(parseFloat(o),parseFloat(s),parseFloat(n));return{r:p,g:d,b:m,a:parseFloat(a)}}return{r:0,g:0,b:0,a:0}}hslToRgb(t,e,r){t=t/360,e=parseFloat(e.toString())/100,r=parseFloat(r.toString())/100;let i=(d,m,l)=>(l<0&&(l+=1),l>1&&(l-=1),l<1/6?d+(m-d)*6*l:l<1/2?m:l<2/3?d+(m-d)*(2/3-l)*6:d),o=r<.5?r*(1+e):r+e-r*e,s=2*r-o,n=Math.round(i(s,o,t+1/3)*255),a=Math.round(i(s,o,t)*255),p=Math.round(i(s,o,t-1/3)*255);return[n,a,p]}};var W=class{process({value:t,rules:e,messages:r={}}){for(let i of e){let o=null;if(i==="required"&&t.trim()===""?o="required":i==="email"&&!/^\S+@\S+\.\S+$/.test(t)?o="invalid-email":typeof i=="object"&&(i.type==="minLength"&&t.length<i.value&&(o="too-short"),i.type==="maxLength"&&t.length>i.value&&(o="too-long")),o){let s=r[o],n=typeof s=="function"?s({value:t,rule:i}):s??this.defaultMessage(o,i);return{valid:!1,error:o,message:n}}}return{valid:!0,error:null,message:null}}defaultMessage(t,e){switch(t){case"required":return"This field is required.";case"invalid-email":return"Please enter a valid email.";case"too-short":return`Too short${typeof e=="object"&&"value"in e?` (min ${e.value})`:""}.`;case"too-long":return`Too long${typeof e=="object"&&"value"in e?` (max ${e.value})`:""}.`}}};var V=class{constructor(){this.namedCurves={linear:[0,0,1,1],ease:[.25,.1,.25,1],"ease-in":[.42,0,1,1],"ease-out":[0,0,.58,1],"ease-in-out":[.42,0,.58,1]}}process({easing:t}){let e=t.trim();if(this.namedCurves[e])return this.cubicBezier(...this.namedCurves[e]);let r=e.match(/^cubic-bezier\s*\(\s*([-+]?\d*\.?\d+)\s*,\s*([-+]?\d*\.?\d+)\s*,\s*([-+]?\d*\.?\d+)\s*,\s*([-+]?\d*\.?\d+)\s*\)$/);if(r){let[i,o,s,n]=r.slice(1).map(Number);return this.cubicBezier(i,o,s,n)}return i=>i}cubicBezier(t,e,r,i){let o=3*t,s=3*(r-t)-o,n=1-o-s,a=3*e,p=3*(i-e)-a,d=1-a-p;function m(u){return((n*u+s)*u+o)*u}function l(u){return((d*u+p)*u+a)*u}function g(u){return(3*n*u+2*s)*u+o}function f(u,S=1e-5){let y,v,b=u,x,Y,T;for(T=0;T<8;T++){if(x=m(b)-u,Math.abs(x)<S)return b;if(Y=g(b),Math.abs(Y)<1e-6)break;b=b-x/Y}for(y=0,v=1,b=u;y<v;){if(x=m(b)-u,Math.abs(x)<S)return b;x>0?v=b:y=b,b=(v+y)/2}return b}return function(u){return l(f(u))}}};var z=class{process({distance:t,radius:e,strength:r}){if(t>=e)return 0;let i=(e-t)/e;return r*i}};var B=class{process({from:t,to:e,progress:r}){return{r:t.r+(e.r-t.r)*r,g:t.g+(e.g-t.g)*r,b:t.b+(e.b-t.b)*r,a:t.a+(e.a-t.a)*r}}};var q=class{process({from:t,to:e,progress:r}){return{x:(e.x-t.x)*r,y:(e.y-t.y)*r}}};var N=class{process({value:t}){let r=t?.trim();if(!r||r==="none")return 1;try{if(r.startsWith("matrix(")){let i=r.match(/matrix\(([^)]+)\)/);if(i&&i[1]){let o=i[1].split(",").map(s=>parseFloat(s.trim()));if(o.length>=1&&!isNaN(o[0]))return o[0]}}if(r.startsWith("scale(")){let i=r.match(/scale\(([^)]+)\)/);if(i&&i[1]){let o=i[1].split(",").map(s=>parseFloat(s.trim()));if(o.length>=1&&!isNaN(o[0]))return o[0]}}if(r.startsWith("scaleX(")){let i=r.match(/scaleX\(([^)]+)\)/);if(i&&i[1]){let o=parseFloat(i[1].trim());if(!isNaN(o))return o}}if(r.startsWith("scale3d(")){let i=r.match(/scale3d\(([^)]+)\)/);if(i&&i[1]){let o=i[1].split(",").map(s=>parseFloat(s.trim()));if(o.length>=1&&!isNaN(o[0]))return o[0]}}if(r.startsWith("matrix3d(")){let i=r.match(/matrix3d\(([^)]+)\)/);if(i&&i[1]){let o=i[1].split(",").map(s=>parseFloat(s.trim()));if(o.length>=1&&!isNaN(o[0]))return o[0]}}}catch(i){return console.error(`Error parsing transform string "${r}":`,i),1}return 1}};var nt=class{process({processedWords:t,lines:e,options:r,totalChars:i}){let o=[],s=0,n=new Map;e.forEach((d,m)=>{let l=d.words.reduce((g,f)=>g+f.text.length,0);n.set(m,l)});let a=0,p=-1;return t.forEach(d=>{let m=d.text,l=d.lineIndex,g=m.length,f=n.get(l)||0;l!==p&&(a=0,p=l),Array.from(m).forEach((S,y)=>{let v=[];r.char&&r.char.forEach(b=>{let x=this.calculateIndex(b,s,y,i);v.push({value:x,type:"char",align:b.align})}),r.charLine&&r.charLine.forEach(b=>{let x=this.calculateIndex(b,a,y,f);v.push({value:x,type:"charLine",align:b.align})}),r.charWord&&r.charWord.forEach(b=>{let x=this.calculateIndex(b,y,y,g);v.push({value:x,type:"charWord",align:b.align})}),o.push({text:S,globalCharIndex:s,lineCharIndex:a,wordCharIndex:y,parentGlobalWordIndex:d.globalIndex,parentLineIndex:d.lineIndex,parentWordIndexInLine:d.wordIndexInLine,calculatedValues:v}),s++,a++})}),o}calculateIndex(t,e,r,i){let o=e;if(t.align==="random"){let s=t.random?.min??0,n=t.random?.max??(i>0?i-1:0),a=Math.min(s,n),p=Math.max(s,n);o=Math.floor(Math.random()*(p-a+1))+a}else t.align==="end"?o=(i>0?i-1:0)-e:t.align==="center"&&(o=e-Math.floor(i/2));return t.abs&&(o=Math.abs(o)),o}};var st=class{process({text:t,targetElement:e}){if(!t||!e||e.offsetWidth<=0)return console.warn("LayoutLineSplitterTool: Invalid input or target element has zero width."),[];let i=this.decodeHtmlEntity(t).trim().split(/\s+/).filter(l=>l.length>0);if(i.length===0)return[];let o=document.createElement("span"),s=window.getComputedStyle(e);o.style.fontFamily=s.fontFamily,o.style.fontSize=s.fontSize,o.style.fontWeight=s.fontWeight,o.style.letterSpacing=s.letterSpacing,o.style.textTransform=s.textTransform,o.style.wordSpacing=s.wordSpacing,o.style.whiteSpace="nowrap",o.style.visibility="hidden",o.style.position="absolute",o.style.top="-9999px",o.style.left="-9999px",document.body.appendChild(o);let n=[],a=[],p=0,d=this.measureWidth(" ",o),m=e.offsetWidth;try{i.forEach(l=>{let g=this.measureWidth(l,o),f=p+(a.length>0?d:0)+g;a.length>0&&f>m?(n.push({text:a.join(" "),words:a.map(u=>({text:u}))}),a=[l],p=g):(a.push(l),p=a.length===1?g:f)}),a.length>0&&n.push({text:a.join(" "),words:a.map(l=>({text:l}))})}finally{o.parentNode===document.body&&document.body.removeChild(o)}return n}measureWidth(t,e){return e.textContent=t,e.offsetWidth}decodeHtmlEntity(t){return t.replace(/&amp;/g,"&")}};var at=class{process({lines:t,words:e,chars:r,options:i}){let o=document.createElement("div"),s=0,n=0,a=this.hasLineOptions(i),p=this.hasCharOptions(i);return t.forEach(d=>{let m=a?document.createElement("span"):o;a&&(m.classList.add("-s-line"),o.appendChild(m));let l=e.slice(s,s+d.words.length);s+=d.words.length,l.forEach((g,f)=>{let u=document.createElement("span");u.classList.add("-s-word");let S=r.slice(n,n+g.text.length);p&&g.text.length>0?(S.forEach(y=>{let v=document.createElement("span");v.classList.add("-s-char"),v.textContent=y.text,this.applyStyles(v,y.calculatedValues),u.appendChild(v)}),n+=g.text.length):(u.textContent=g.text,n+=g.text.length),this.applyStyles(u,g.calculatedValues),m.appendChild(u),f<l.length-1&&m.appendChild(document.createTextNode("\xA0"))})}),o.innerHTML}hasLineOptions(t){return(t.line?.length??0)>0||(t.wordLine?.length??0)>0||(t.charLine?.length??0)>0}hasCharOptions(t){return(t.char?.length??0)>0||(t.charLine?.length??0)>0||(t.charWord?.length??0)>0}applyStyles(t,e){e&&e.forEach(r=>{let i=this.generateVariableName(r.type,r.align);t.style.setProperty(i,String(r.value))})}generateVariableName(t,e){return`--${t}-${e}`}};var lt=class{process({lines:t,options:e}){let r=[],i=0,o=t.reduce((s,n)=>s+n.words.length,0);return t.forEach((s,n)=>{let a=s.words,p=a.length;a.forEach((d,m)=>{let l=[];e.word&&e.word.forEach(g=>{let f=this.calculateIndex(g,i,m,o);l.push({value:f,type:"word",align:g.align})}),e.wordLine&&e.wordLine.forEach(g=>{let f=this.calculateIndex(g,m,m,p);l.push({value:f,type:"wordLine",align:g.align})}),r.push({text:d.text,globalIndex:i,lineIndex:n,wordIndexInLine:m,calculatedValues:l}),i++})}),r}calculateIndex(t,e,r,i){let o=e;if(t.align==="random"){let s=t.random?.min??0,n=t.random?.max??(i>0?i-1:0),a=Math.min(s,n),p=Math.max(s,n);o=Math.floor(Math.random()*(p-a+1))+a}else t.align==="end"?o=(i>0?i-1:0)-e:t.align==="center"&&(o=e-Math.floor(i/2));return t.abs&&(o=Math.abs(o)),o}};var ct=class{process({attributeValue:t}){let e={line:[],word:[],char:[],charLine:[],charWord:[],wordLine:[]};return t&&t.split("|").forEach(i=>{let o=i.trim();if(!o)return;let s=o.match(/^(\w+-)?(\w+)(\[(.*?)\])?$/);if(s){let n=s[1]||"",a=s[2],p=n+a,m=(s[4]||"").split(";").map(g=>g.trim()).filter(g=>g.length>0),l=this.parseParamsArray(m);switch(p){case"line":e.line.push(l);break;case"word":e.word.push(l);break;case"char":e.char.push(l);break;case"charLine":e.charLine.push(l);break;case"charWord":e.charWord.push(l);break;case"wordLine":e.wordLine.push(l);break;default:console.warn(`SplitOptionsParserTool: Unrecognized option type "${p}" in part "${o}"`);break}}else console.warn(`SplitOptionsParserTool: Could not parse part format "${o}"`)}),e}parseParamsArray(t){let e={align:"start"};return t.forEach(r=>{if(r==="abs")e.abs=!0;else if(r.startsWith("random")){e.align="random";let i=r.match(/random\(\s*(\d+)\s*,\s*(\d+)\s*\)/);i&&(e.random={min:parseInt(i[1],10),max:parseInt(i[2],10)})}else["start","center","end"].includes(r)&&(e.align=r)}),e}};var pt=class{constructor(){this.domAttribute=new L;this.recordAttribute=new O;this.transformNullify=new E;this.boundingClientRect=new P;this.relativePosition=new D(this.transformNullify);this.unitParser=new R;this.lerp=new k;this.adaptiveLerp=new H;this.originParser=new A;this.colorParser=new F;this.validation=new W;this.easingFunction=new V;this.magneticPull=new z;this.lerpColor=new B;this.lerpVector=new q;this.transformScaleParser=new N;this.layoutSplitter=new st;this.wordIndexer=new lt;this.charIndexer=new nt;this.domBuilder=new at;this.optionsParser=new ct}};var yt=class extends h{constructor(e){super(e);this.enterObjectsMap=new Map;this.enterObjects=new Array;this.overCount=0;this.htmlKey="cursor",this.cursor=document.querySelector("[string-cursor],[data-string-cursor]"),this.cursorContent=document.querySelector("[string-cursor-content],[data-string-cursor-content]"),this.attributesToMap=[...this.attributesToMap,{key:"target-disable",type:"boolean",fallback:this.settings["target-disable"]},{key:"target-style-disable",type:"boolean",fallback:this.settings["target-style-disable"]},{key:"target-class",type:"string",fallback:this.settings["target-class"]},{key:"cursor-class",type:"string",fallback:this.settings["cursor-class"]},{key:"alignment",type:{type:"enum",values:["start","center","end"]},fallback:this.settings.alignment},{key:"lerp",type:"number",fallback:this.settings.lerp,transform:r=>this.tools.adaptiveLerp.process({value:r,inMin:.1,inMax:1,outMin:.05,outMax:.65})}]}initializeObject(e,r,i,o){super.initializeObject(e,r,i,o),r.setProperty("mouse-x",0),r.setProperty("mouse-y",0),r.setProperty("mouse-pixel-x",0),r.setProperty("mouse-pixel-y",0),r.setProperty("is-mouse-over",!1),r.setProperty("is-mouse-move",!1)}onFrame(e){requestAnimationFrame(()=>{this.objects.forEach(n=>{let a=n.getProperty("is-mouse-over"),p=n.getProperty("cursor-target-disable"),d=n.getProperty("lerp")??.15;if(a&&!p){let m=n.htmlElement.getBoundingClientRect(),l=this.data.cursor.targetX,g=this.data.cursor.targetY,f=l-m.left,u=g-m.top,S=n.getProperty("mouse-pixel-x")??0,y=n.getProperty("mouse-pixel-y")??0,v=S-f,b=y-u;if(v*v+b*b>1e-4){(n.getProperty("is-mouse-move")??!1)||(n.setProperty("is-mouse-move",!0),n.setProperty("mouse-pixel-x",f),n.setProperty("mouse-pixel-y",u),n.setProperty("mouse-x",f),n.setProperty("mouse-y",u),S=f,y=u,this.events.emit(`cursor:start:${n.id}`,null));let T=this.tools.lerp.process({from:S,to:f,progress:d}),zt=this.tools.lerp.process({from:y,to:u,progress:d}),gt=S+T,bt=y+zt;n.setProperty("mouse-pixel-x",gt),n.setProperty("mouse-pixel-y",bt);let At=n.getProperty("alignment")??"center",ft=this.calculateOffset(At,gt,m.width),vt=this.calculateOffset(At,bt,m.height);n.setProperty("mouse-x",ft),n.setProperty("mouse-y",vt),this.setMouseCoordinates(n,ft,vt),this.events.emit(`cursor:move:${n.id}`,{x:ft,y:vt}),this.events.emit(`cursor:pixel:${n.id}`,{x:gt,y:bt})}else n.setProperty("mouse-pixel-x",f),n.setProperty("mouse-pixel-y",u),this.events.emit(`cursor:end:${n.id}`,null)}else{let m=n.getProperty("mouse-x")??0,l=n.getProperty("mouse-y")??0;if(m!==0||l!==0){n.setProperty("is-mouse-move",!1);let g=n.htmlElement.getBoundingClientRect(),f=n.getProperty("half-width")??g.width/2,u=n.getProperty("half-height")??g.height/2,S=this.calculateOffset("center",f,g.width),y=this.calculateOffset("center",u,g.height),v=m+this.tools.lerp.process({from:m,to:S,progress:d}),b=l+this.tools.lerp.process({from:l,to:y,progress:d});n.setProperty("mouse-x",v),n.setProperty("mouse-y",b),Math.abs(v)<.001&&Math.abs(b)<.001&&(n.setProperty("mouse-x",0),n.setProperty("mouse-y",0),n.setProperty("mouse-pixel-x",0),n.setProperty("mouse-pixel-y",0)),this.setMouseCoordinates(n,v,b)}}});let{stepX:r,stepY:i,smoothedX:o,smoothedY:s}=this.data.cursor;(r!==0||i!==0)&&(this.events.emit("cursor",{stepX:r,stepY:i,x:o,y:s}),this.cursor.style.setProperty("--x",o.toString()),this.cursor.style.setProperty("--y",s.toString()),this.cursor.style.setProperty("--x-lerp",r.toString()),this.cursor.style.setProperty("--y-lerp",i.toString()))})}onObjectConnected(e){let r=e.htmlElement;e.setProperty("timeoutId",null),e.setProperty("mouseleave",()=>{this.onMouseLeave(e)}),e.setProperty("mouseenter",()=>{this.onMouseEnter(e)}),e.setProperty("onEnterEvent",this.onEnterObject.bind(this)),e.events.on("enter",e.getProperty("onEnterEvent")),e.setProperty("onLeaveEvent",this.onLeaveObject.bind(this)),e.events.on("leave",e.getProperty("onLeaveEvent"))}getCursorClass(e){let r=e.getProperty("cursor-class");return r!=null&&r.length>0?r:null}onMouseEnter(e){this.overCount++,e.setProperty("is-mouse-over",!0);let r=this.getCursorClass(e);r&&this.cursor.classList.add(r),this.cursor.classList.add("-showing"),e.setProperty("timeoutId",setTimeout(()=>{this.cursor.classList.remove("-showing"),this.cursor.classList.add("-show")},1200)),e.htmlElement.addEventListener("mouseleave",e.getProperty("mouseleave"))}onMouseLeave(e){this.overCount--,e.setProperty("is-mouse-over",!1),e.getProperty("timeoutId")&&(clearTimeout(e.getProperty("timeoutId")),e.setProperty("timeoutId",null));let r=this.getCursorClass(e);r&&this.cursor.classList.remove(r),this.cursor.classList.remove("-showing"),this.cursor.classList.remove("-show"),e.htmlElement.removeEventListener("mouseleave",e.getProperty("mouseleave"))}onEnterObject(e){e.htmlElement.addEventListener("mouseenter",e.getProperty("mouseenter"))}onLeaveObject(e){e.htmlElement.removeEventListener("mouseenter",e.getProperty("mouseenter")),e.htmlElement.removeEventListener("mouseleave",e.getProperty("mouseleave"))}setMouseCoordinates(e,r,i){e.getProperty("cursor-target-style-disable")||this.applyToElementAndConnects(e,o=>{o.style.setProperty("--x",r.toFixed(2)),o.style.setProperty("--y",i.toFixed(2))})}calculateOffset(e,r,i){switch(e){case"start":return r/i;case"end":return(r-i)/i;case"center":default:return(r-i/2)/(i/2)}}};var St=class extends h{constructor(t){super(t),this.htmlKey="magnetic",this.attributesToMap=[...this.attributesToMap,{key:"strength",type:"number",fallback:this.settings.strength},{key:"radius",type:"number",fallback:this.settings.radius}]}initializeObject(t,e,r,i){super.initializeObject(t,e,r,i),e.setProperty("is-magneting",!1),e.setProperty("magnetic-target-x",0),e.setProperty("magnetic-target-y",0),e.setProperty("magnetic-x",0),e.setProperty("magnetic-y",0),e.setProperty("lerp",.1)}onMouseMove(t){this.objects.forEach(e=>{let i=e.htmlElement.getBoundingClientRect(),o=i.left+(e.getProperty("half-width")??0),s=i.top+(e.getProperty("half-height")??0),n=t.clientX-o,a=t.clientY-s,p=Math.sqrt(n**2+a**2),d=e.getProperty("radius")??0,m=e.getProperty("strength")??0,l=this.tools.magneticPull.process({distance:p,radius:d,strength:m});e.setProperty("magnetic-target-x",n*l),e.setProperty("magnetic-target-y",a*l),l>0&&e.setProperty("is-magneting",!0)})}onFrame(t){this.objects.forEach(e=>{if(e.getProperty("is-magneting")){let r=e.getProperty("magnetic-x")??0,i=e.getProperty("magnetic-y")??0,o=e.getProperty("lerp")??0,s=e.getProperty("magnetic-target-x")??0,n=e.getProperty("magnetic-target-y")??0,a=this.tools.lerp.process({from:r,to:s,progress:o}),p=this.tools.lerp.process({from:i,to:n,progress:o});a>-.01&&a<.01&&(a=0,e.setProperty("magnetic-x",e.getProperty("magnetic-target-x"))),p>-.01&&p<.01&&(p=0,e.setProperty("magnetic-y",e.getProperty("magnetic-target-y"))),r+=a,i+=p,e.setProperty("magnetic-x",r),e.setProperty("magnetic-y",i),this.events.emit(`magnetic:move:${e.id}`,{x:r,y:i}),this.applyToElementAndConnects(e,d=>{d.style.setProperty("--magnetic-x",r.toString()),d.style.setProperty("--magnetic-y",i.toString())}),(e.getProperty("magnetic-target-x")==r||e.getProperty("magnetic-target-y")==i)&&e.setProperty("is-magneting",!1)}})}};var xt=class extends h{constructor(e){super(e);this.isStartLoaded=!1;this.loadingCount=0;this.htmlKey="lazy"}onInit(){document.querySelectorAll("img[string-lazy], img[data-string-lazy]").forEach(r=>this.loadImage(r)),this.isStartLoaded=!0}onObjectConnected(e){if(this.loadingCount++,this.isStartLoaded){let r=e.htmlElement;this.loadImage(r)}}async loadImage(e){let r=this.tools.domAttribute.process({element:e,key:this.htmlKey,fallback:""});if(r)try{e.classList.add("lazyLoad"),e.src=r,e.addEventListener("load",()=>{e.classList.add("-loaded")}),await this.setAspectRatio(e,r)}catch{console.warn("Failed to load image:",r)}}setAspectRatio(e,r){return new Promise((i,o)=>{let s=new XMLHttpRequest;s.open("GET",r,!0),s.responseType="arraybuffer",s.setRequestHeader("Range","bytes=0-"),s.onload=()=>{if(s.status===200||s.status===206){let n=new Blob([s.response]),a=new Image;a.onload=()=>{e.style.aspectRatio=`${a.width} / ${a.height}`,URL.revokeObjectURL(a.src),this.loadingCount--,this.loadingCount<=0&&(this.events.emit("image:load:all",null),this.loadingCount=0),i()},a.onerror=()=>{URL.revokeObjectURL(a.src),this.loadingCount--,o(new Error("Image failed to decode"))},a.src=URL.createObjectURL(n)}else o(new Error("Image request failed"))},s.onerror=()=>o(new Error("XHR error")),s.send()})}};var Mt=class extends h{constructor(e){super(e);this.loadingTimeout=0;this._type=2,this.loadingTimeout=this.settings.timeout}onInit(){setTimeout(()=>{document.documentElement.classList.add("-loaded")},this.loadingTimeout)}};var dt=class extends h{constructor(t){super(t),this.htmlKey=""}canConnect(t){return t.keys[0]==null}};var w=class{constructor(t){this.min=void 0;this.max=void 0;this.enable=!0;this.min=t?.min,this.max=t?.max,this.enable=t?.enable??!0}setEnable(t=!0){this.enable=t}setRange(t,e){this.min=t??void 0,this.max=e??void 0}get mediaQuery(){let t="screen";return this.min&&(t+=` and (min-width: ${this.min}px)`),this.max&&(t+=` and (max-width: ${this.max}px)`),t}},Et=class extends h{constructor(e){super(e);this.queries={0:new w({max:359}),1:new w({min:360,max:1079}),2:new w({min:1080,max:1365}),3:new w({min:1366})};this.matchMedias={0:window.matchMedia(this.queries[0].mediaQuery),1:window.matchMedia(this.queries[1].mediaQuery),2:window.matchMedia(this.queries[2].mediaQuery),3:window.matchMedia(this.queries[3].mediaQuery)};this._type=2}onConnect(){}onInit(){if(this.settings!=null&&this.settings.settings!=null){let e=this.settings.settings;e.mobile?(this.queries[0].enable=!0,this.queries[0].setRange(e.mobile.min==null?null:e.mobile.min,e.mobile.max??null),this.matchMedias[0]=window.matchMedia(this.queries[0].mediaQuery)):this.queries[0].enable=!1,e.tablet?(this.queries[1].enable=!0,this.queries[1].setRange(e.mobile.min==null?null:e.mobile.min,e.mobile.max??null),this.matchMedias[1]=window.matchMedia(this.queries[0].mediaQuery)):this.queries[1].enable=!1,e.laptop?(this.queries[2].enable=!0,this.queries[2].setRange(e.mobile.min==null?null:e.mobile.min,e.mobile.max??null),this.matchMedias[2]=window.matchMedia(this.queries[0].mediaQuery)):this.queries[2].enable=!1,e.desktop?(this.queries[3].enable=!0,this.queries[3].setRange(e.mobile.min==null?null:e.mobile.min,e.mobile.max??null),this.matchMedias[3]=window.matchMedia(this.queries[0].mediaQuery)):this.queries[3].enable=!1}this.updateElements()}onResize(){this.updateElements()}updateElements(){let e=this.matchMedias[0].matches&&this.queries[0].enable,r=this.matchMedias[1].matches&&this.queries[1].enable,i=this.matchMedias[2].matches&&this.queries[2].enable,o=this.matchMedias[3].matches&&this.queries[3].enable;document.querySelectorAll("[string-mobile], [string-tablet], [string-laptop], [string-desktop]").forEach(n=>{let a=!1;n.hasAttribute("string-mobile")&&e&&(a=!0,this.events.emit("screen:mobile",e)),n.hasAttribute("string-tablet")&&r&&(a=!0,this.events.emit("screen:tablet",r)),n.hasAttribute("string-laptop")&&i&&(a=!0,this.events.emit("screen:laptop",i)),n.hasAttribute("string-desktop")&&o&&(a=!0,this.events.emit("screen:desktop",o)),a?n.style.display=null:n.style.display="none"})}};var Ct=class extends h{constructor(t){super(t),this.htmlKey="anchor",this.attributesToMap=[...this.attributesToMap,{key:"anchor",type:"tuple",fallback:this.settings.anchor,transform:e=>{let[r,i]=e,o=this.tools.originParser.process({value:r}),s=this.tools.originParser.process({value:i});return{x:o,y:s}}}]}onObjectConnected(t){super.onObjectConnected(t);let e=t.getProperty("anchor");e&&this.applyToElementAndConnects(t,r=>{r.style.transformOrigin=`${e.x} ${e.y}`})}};var Bt=.05,qt=.01,Ft=1,Nt=-1,$t=1,wt=class extends h{constructor(e){super(e);this.previousLerp=0;this.displacement=0;this.acceleration=0;this.velocityMultiplier=.00125;this.isInitialScroll=!0;this.baseVelocityMultiplier=.00125;this.reducedVelocityMultiplier=this.baseVelocityMultiplier/20;this.negativeVelocityMultiplier=-1e-4;this.maxDisplacementValue=0;this.setupItem=e=>{let r=e.getProperty("glide")??0,i=-this.data.scroll.displacement*this.maxDisplacementValue*r;this.events.emit(`glide:${e.id}`,i);let o=`translate3d(0, ${i}px, 0)`;e.htmlElement.style.transform=o};this.onUpdateDesktopEvent=()=>{for(let e=0;e<this.objects.length;e++){let r=this.objects[e];this.setupItem(r)}};this.onUpdateMobileEvent=()=>{};this.onUpdateEvent=this.onUpdateDesktopEvent;this.htmlKey="glide",this.baseVelocityMultiplier=this.settings["glide-base-velocity"]??this.baseVelocityMultiplier,this.reducedVelocityMultiplier=this.settings["glide-reduce-velocity"]??this.reducedVelocityMultiplier,this.negativeVelocityMultiplier=this.settings["glide-negative-velocity"]??this.negativeVelocityMultiplier,this.attributesToMap=[...this.attributesToMap,{key:"glide",type:"number",fallback:this.settings.glide}]}calcExpanderFactor(e){let r=e?this.data.scroll.lerped<this.previousLerp:this.data.scroll.lerped>this.previousLerp;this.velocityMultiplier=r?this.isInitialScroll?this.baseVelocityMultiplier:this.reducedVelocityMultiplier:this.negativeVelocityMultiplier,r||(this.isInitialScroll=!1)}onStart(){this.maxDisplacementValue=this.data.viewport.windowHeight*.1}onResize(){window.innerWidth>1080?(this.maxDisplacementValue=this.data.viewport.windowHeight*.1,this.onUpdateEvent=this.onUpdateDesktopEvent):(this.onUpdateEvent=this.onUpdateMobileEvent,this.resetState(),this.objects.forEach(e=>{this.setupItem(e)}))}resetState(){this.displacement=0,this.acceleration=0,this.isInitialScroll=!0,this.velocityMultiplier=this.baseVelocityMultiplier}onScrollStart(){this.resetState()}onScrollStop(){this.resetState(),this.previousLerp=0;for(let e=0;e<this.objects.length;e++){let r=this.objects[e],i="translate3d(0, 0px, 0)";r.htmlElement.style.transform=i,r.htmlElement.style.setProperty("--glide",this.data.scroll.displacement.toString())}}onFrame(e){this.calcExpanderFactor(this.data.scroll.isScrollingDown===!1),this.acceleration=Math.min(Ft,this.acceleration+Bt),this.displacement=Math.max(qt,Math.min(Ft,this.displacement+this.velocityMultiplier)),this.data.scroll.displacement=Math.min($t,Math.max(Nt,this.data.scroll.lerped*this.displacement*this.acceleration)),this.objects.forEach(r=>{this.applyToElementAndConnects(r,i=>{i.style.setProperty("--glide",this.data.scroll.displacement.toString())})}),this.previousLerp=this.data.scroll.lerped,this.onUpdateEvent()}};var Tt=class extends h{constructor(t){super(t),this.htmlKey="lerp"}onScrollStop(){this.objects.forEach(t=>{this.setLerpValue(t,0)})}onFrame(t){let e=t.scroll.lerped;this.objects.forEach(r=>{this.setLerpValue(r,e)})}setLerpValue(t,e){this.events.emit(`lerp:${t.id}`,e),t.htmlElement.style.setProperty("--lerp",e.toString())}};var $=class extends h{constructor(t){super(t),this.htmlKey="progress",this.attributesToMap=[...this.attributesToMap,{key:"enter-el",type:"string",fallback:this.settings["enter-el"]},{key:"enter-vp",type:"string",fallback:this.settings["enter-vp"]},{key:"exit-el",type:"string",fallback:this.settings["exit-el"]},{key:"exit-vp",type:"string",fallback:this.settings["exit-vp"]},{key:"easing",type:"easing",fallback:this.settings.easing}]}initializeObject(t,e,r,i){super.initializeObject(t,e,r,i)}onScroll(t){super.onScroll(t),this.objects.forEach(e=>{this.setUpObject(e)})}onObjectConnected(t){super.onObjectConnected(t),t.setProperty("setUpObject",this.setUpObject.bind(this)),t.events.on("enter",t.getProperty("setUpObject"))}setUpObject(t){let e=t.getProperty("start-position"),r=t.getProperty("difference-position"),i=t.getProperty("key"),o=t.getProperty("easing")(Math.min(1,Math.max(0,(this.data.scroll.transformedCurrent-e)/r)));if(t.getProperty("progress")!==o){this.events.emit(`progress:${t.id}`,o),t.setProperty("progress",o);let s=o.toString();this.applyToElementAndConnects(t,n=>{n.style.setProperty(i,s)})}}calculatePositions(t,e){let r=t.getProperty("start"),i=t.getProperty("size"),o=t.getProperty("offset-bottom"),s=t.getProperty("offset-top"),n=t.getProperty("enter-el"),a=t.getProperty("enter-vp"),p=t.getProperty("exit-el"),d=t.getProperty("exit-vp"),m=0,l=0;n==="top"&&a==="top"||n==="left"&&a==="left"?m=r-o:n==="top"&&a==="bottom"||n==="left"&&a==="right"?m=r-e-o:n==="bottom"&&a==="top"||n==="right"&&a==="left"?m=r+i-o:(n==="bottom"&&a==="bottom"||n==="right"&&a==="right")&&(m=r-e+i-o),p==="top"&&d==="top"||p==="left"&&d==="left"?l=r+s:p==="top"&&d==="bottom"||p==="left"&&d==="right"?l=r-e+s:p==="bottom"&&d==="top"||p==="right"&&d==="left"?l=r+i+s:(p==="bottom"&&d==="bottom"||p==="right"&&d==="right")&&(l=r-e+i+s),t.setProperty("start-position",m-this.data.scroll.topPosition),t.setProperty("end-position",l),t.setProperty("difference-position",l-m)}};var It=class extends ${constructor(e){super(e);this.handleScrollDesktop=()=>{this.objects.forEach(e=>{let r=e.getProperty("progress")??0,i=e.getProperty("parallax")??0,o=e.getProperty("parallax-position-start")??0,s=e.getProperty("parallax-position-end")??1,n=this.data.viewport.windowHeight,a=i*n*o+r*i*n*s;this.events.emit(`parallax:${e.id}`,a);let p=`translate3d(0, ${a}px, 0)`;this.applyToElementAndConnects(e,d=>{d.style.transform=p})})};this.handleScrollMobile=()=>{};this.scrollHandler=this.handleScrollDesktop;this.htmlKey="parallax",this.attributesToMap=[...this.attributesToMap,{key:"parallax",type:"number",fallback:this.settings.parallax},{key:"parallax-bias",type:"number",fallback:this.settings["parallax-bias"]}]}initializeObject(e,r,i,o){super.initializeObject(e,r,i,o);let s=r.getProperty("parallax-bias")??0,n=r.getProperty("parallax")??.2;r.setProperty("parallax-position-start",-.5+.5*s),r.setProperty("parallax-position-end",.5+.5*(1-s));let a=this.data.viewport.windowHeight;r.setProperty("offset-top",n*a),r.setProperty("offset-bottom",n*a)}onScroll(e){super.onScroll(e),this.scrollHandler()}onResize(){let e=window.innerWidth>1080;this.scrollHandler=e?this.handleScrollDesktop:this.handleScrollMobile,e||this.handleScrollDesktop()}};var mt=class{constructor(t,e,r){this.isDragging=!1;this.startY=0;this.startScrollPosition=0;this.data=t,this.scrollbar=e,this.thumb=r}onResize(){let t=this.data.viewport.contentWidth,e=this.data.viewport.windowWidth,r=e/t*e;this.thumb.style.setProperty("--size",r+"px"),t<=e?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){let t=this.data.viewport.contentWidth,e=this.data.viewport.windowWidth;this.thumb.style.setProperty("--position",`${this.data.scroll.current/t*e+"px"}`)}mouseDownEvent(t){this.startY=t.clientY,this.startScrollPosition=this.data.scroll.current}mouseMoveEvent(t){let e=t.clientY-this.startY,r=this.startScrollPosition+e/this.data.viewport.windowWidth*this.data.viewport.contentWidth;this.data.scroll.current=r,this.data.scroll.target=r,window.scrollTo(0,r),this.updateThumb()}};var ut=class{constructor(t,e,r){this.isDragging=!1;this.startCoordinate=0;this.startScrollPosition=0;this.data=t,this.scrollbar=e,this.thumb=r}onResize(){let t=this.data.viewport.contentHeight,e=this.data.viewport.windowHeight,r=e/t*e;this.thumb.style.setProperty("--height",r+"px"),t<=e?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){let t=this.data.viewport.contentHeight,e=this.data.viewport.windowHeight;this.thumb.style.setProperty("--position",`${this.data.scroll.current/t*e+"px"}`)}mouseDownEvent(t){this.startCoordinate=t.clientY,this.startScrollPosition=this.data.scroll.current}mouseMoveEvent(t){let e=t.clientY-this.startCoordinate,r=this.startScrollPosition+e/this.data.viewport.windowHeight*this.data.viewport.contentHeight,i=this.data.scroll.bottomPosition,o=Math.max(0,Math.min(r,i));this.data.scroll.current=o,this.data.scroll.target=o,window.scrollTo(0,o),this.updateThumb()}};var Pt=class extends h{constructor(e){super(e);this.isDragging=!1;this.scrollMode="smooth";this.mouseUpEventBind=this.mouseUpEvent.bind(this),this.mouseDownEventBind=this.mouseDownEvent.bind(this),this.mouseMoveEventBind=this.mouseMoveEvent.bind(this)}destructor(){document.removeEventListener("mouseup",this.mouseUpEventBind),this.thumb.removeEventListener("mousedown",this.mouseDownEventBind),document.removeEventListener("mousemove",this.mouseMoveEventBind)}onInit(){this.createScrollbar(),this.updateThumb(),this.addCustomStyles(),document.addEventListener("mouseup",this.mouseUpEventBind),this.thumb.addEventListener("mousedown",this.mouseDownEventBind),document.addEventListener("mousemove",this.mouseMoveEventBind),document.documentElement.classList.add("-no-scrollbar")}onScroll(e){this.updateThumb(),this.showScrollbar(),this.hideScrollbar()}onResize(){this.scrollbarState.onResize()}addCustomStyles(){let e=document.createElement("style");e.textContent=`
1
+ var U=class{constructor(t=.1,e){this.SETTLE_THRESHOLD=.1;this.smoothingFactor=t,this.context=e,this.onSettingsChange()}onMouseMove(t){this.context.data.cursor.targetX=t.clientX,this.context.data.cursor.targetY=t.clientY}onFrame(){let{targetX:t,targetY:e,smoothedX:r,smoothedY:i}=this.context.data.cursor,o=this.context.tools.lerp.process({from:r,to:t,progress:this.smoothingFactor}),s=this.context.tools.lerp.process({from:i,to:e,progress:this.smoothingFactor}),n=this.getStepDistance(o,s);this.isSettled(n)?this.snapToTarget():this.applyStep(o,s)}onSettingsChange(){let t=Number(this.context.settings.lerp);this.setLerpFactor(t)}setLerpFactor(t){this.smoothingFactor=this.context.tools.adaptiveLerp.process({value:t,inMin:.1,inMax:1,outMin:.05,outMax:.65})}getStepDistance(t,e){return Math.hypot(t,e)}isSettled(t){return t<this.SETTLE_THRESHOLD}snapToTarget(){this.context.data.cursor.smoothedX=this.context.data.cursor.targetX,this.context.data.cursor.smoothedY=this.context.data.cursor.targetY,this.context.data.cursor.stepX=0,this.context.data.cursor.stepY=0}applyStep(t,e){this.context.data.cursor.smoothedX+=t,this.context.data.cursor.smoothedY+=e,this.context.data.cursor.stepX=t,this.context.data.cursor.stepY=e}};var w=class{constructor(){this.listeners={}}on(t,e,r){let i=r?`${t}_${r}`:t;this.listeners[i]||(this.listeners[i]=new Set),this.listeners[i].add(e)}off(t,e,r){let i=r?`${t}_${r}`:t;this.listeners[i]&&this.listeners[i].delete(e)}emit(t,e){let r=this.listeners[t];if(r)for(let i of r)i(e)}onProgress(t,e){this.on(`progress:${t}`,e)}emitProgress(t,e){this.emit(`progress:${t}`,e)}onInview(t,e){this.on(`object:inview:${t}`,e)}emitInview(t,e){this.emit(`object:inview${t}`,e)}onScroll(t){this.on("scroll",t)}emitScroll(t){this.emit("scroll",t)}onUpdate(t){this.on("update",t)}emitUpdate(){this.emit("update")}clear(t){delete this.listeners[t]}clearAll(){this.listeners={}}};var X=class{constructor(t){this.data=t;this.modules=[];this.uiModules=[]}register(t){t.type===1&&this.modules.push(t),t.type===2&&this.uiModules.push(t)}find(t){return this.modules.find(e=>e instanceof t)}onInit(){[...this.modules,...this.uiModules].forEach(t=>t.onInit())}onFrame(){[...this.modules,...this.uiModules].forEach(t=>t.onFrame(this.data))}onScroll(){[...this.modules,...this.uiModules].forEach(t=>t.onScroll(this.data))}onResize(){[...this.modules,...this.uiModules].forEach(t=>t.onResize())}onMouseMove(t){[...this.modules,...this.uiModules].forEach(e=>e.onMouseMove(t))}onWheel(t){[...this.modules,...this.uiModules].forEach(e=>e.onWheel(t))}onDirectionChange(){[...this.modules,...this.uiModules].forEach(t=>t.onDirectionChange())}onScrollStart(){[...this.modules,...this.uiModules].forEach(t=>t.onScrollStart())}onScrollStop(){[...this.modules,...this.uiModules].forEach(t=>t.onScrollStop())}onAxisChange(){[...this.modules,...this.uiModules].forEach(t=>t.onAxisChange())}onDeviceChange(){[...this.modules,...this.uiModules].forEach(t=>t.onDeviceChange())}onScrollConfigChange(){[...this.modules,...this.uiModules].forEach(t=>t.onScrollConfigChange())}onSettingsChange(){[...this.modules,...this.uiModules].forEach(t=>t.onSettingsChange())}onDOMMutate(t,e){[...this.modules,...this.uiModules].forEach(r=>r.onDOMMutate(t,e))}destroy(){[...this.modules,...this.uiModules].forEach(t=>t.destroy()),this.modules=[],this.uiModules=[]}get all(){return[...this.modules,...this.uiModules]}get core(){return this.modules}get ui(){return this.uiModules}};var P=class{constructor(t,e){this.id="";this.keys=[];this.connects=[];this.properties=new Map;this.modules=[];this.events=new w;this.htmlElement=e,this.id=t}setProperty(t,e){this.properties.set(t,e)}getProperty(t){return this.properties.get(t)??null}enter(){this.events.emit("enter",this),this.setProperty("active",!0),this.modules.forEach(t=>{t.enterObject(this.id,this)})}leave(){this.events.emit("leave",this),this.setProperty("active",!1),this.modules.forEach(t=>{t.exitObject(this.id)})}show(){this.htmlElement.classList.add("-inview")}hide(){this.getProperty("repeat")&&this.htmlElement.classList.remove("-inview")}connect(t){this.modules.includes(t)||this.modules.push(t)}};var _=class{constructor(t,e,r){this.data=t;this.modules=e;this.events=r;this.objects=new Map;this.connectQueue=[];this.globalId=1}get all(){return this.objects}add(t){let e=t.getAttribute("string-id")??`string-${this.globalId++}`,r=e&&this.objects.has(e)?this.objects.get(e):new P(e,t);t.setAttribute("string-id",r.id);let i=t.getAttribute("string")??t.getAttribute("data-string");i&&(r.keys=(i??"").split("|")),t.setAttribute("string-inited",""),this.objects.set(r.id,r);let o=this.getAllAttributes(t);this.modules.core.forEach(n=>{"setupCoreProperties"in n&&typeof n.setupCoreProperties=="function"&&n.setupCoreProperties(r,t,o)}),this.modules.core.forEach(n=>{n.canConnect(r)&&(n.initializeObject(this.globalId,r,t,o),n.calculatePositions(r,this.data.viewport.windowHeight),n.connectObject(r))}),this.connectQueue.filter(n=>n.id===r.id).forEach(n=>r.connects.push(n.element)),this.connectQueue=this.connectQueue.filter(n=>n.id!==r.id),this.initObservers(r,t)}remove(t){let e=this.objects.get(t);e&&(e.events.clearAll(),e.getProperty("observer-progress")?.disconnect(),e.getProperty("observer-inview")?.disconnect(),e.htmlElement.removeAttribute("string-inited"),e.leave(),this.objects.delete(t))}enqueueConnection(t,e){this.connectQueue.push({id:t,element:e})}getAllAttributes(t){let e={};return Array.from(t.attributes).forEach(r=>{e[r.name]=r.value}),e}initObservers(t,e){let r=t.getProperty("offset-top")??0,i=t.getProperty("offset-bottom")??0,o=t.getProperty("inview-top")??0,s=t.getProperty("inview-bottom")??0;t.getProperty("observer-progress")?.disconnect(),t.getProperty("observer-inview")?.disconnect();let n=m=>{m.forEach(l=>{this.events.emit(`object:activate:${t.id}`,l.isIntersecting),l.isIntersecting?t.enter():t.leave()})},a=m=>{m.forEach(l=>{this.events.emit(`object:inview:${t.id}`,l.isIntersecting),l.isIntersecting?t.show():t.hide()})},p=new IntersectionObserver(n,{root:null,rootMargin:`${i+this.data.viewport.windowHeight}px 0px ${r+this.data.viewport.windowHeight}px 0px`,threshold:.001}),d=new IntersectionObserver(a,{root:null,rootMargin:`${i+o}px 0px ${r+s}px 0px`,threshold:.001});p.observe(e),d.observe(e),t.setProperty("observer-progress",p),t.setProperty("observer-inview",d)}observeDOM(){new MutationObserver(e=>{e.forEach(r=>{r.type==="childList"&&(r.removedNodes.forEach(i=>{if(i.nodeType!==Node.ELEMENT_NODE)return;let o=i;this.isFixed(o)||(o.hasAttribute("string")&&this.handleRemoved(o),o.querySelectorAll("[string],[data-string]").forEach(s=>{this.isFixed(s)||this.handleRemoved(s)}))}),r.addedNodes.forEach(i=>{if(i.nodeType!==Node.ELEMENT_NODE)return;let o=i;if(this.isFixed(o))return;o.hasAttribute("string")&&!o.hasAttribute("string-inited")&&this.add(o),o.querySelectorAll("[string]:not([string-inited]),[data-string]:not([string-inited])").forEach(n=>this.add(n));let s=o.getAttribute("string-copy-from")??o.getAttribute("data-string-copy-from");s&&(this.objects.has(s)?this.objects.get(s).connects.push(o):this.enqueueConnection(s,o))}),this.modules.all.forEach(i=>i.onDOMRebuild()))})}).observe(document.body,{childList:!0,subtree:!0})}handleRemoved(t){let e=t.getAttribute("string-id");if(!e)return;let r=t.getAttribute("string-copy-from")??t.getAttribute("data-string-copy-from");r&&(this.connectQueue=this.connectQueue.filter(i=>i.id!==r)),this.remove(e)}onSettingsChange(){this.objects.forEach(t=>{this.modules.core.forEach(e=>{if(e.canConnect(t)){let r=this.getAllAttributes(t.htmlElement);e.initializeObject(this.globalId,t,t.htmlElement,r),e.calculatePositions(t,this.data.viewport.windowHeight),e.connectObject(t)}})})}isFixed(t){return t.hasAttribute("string-fixed")}};var M=class{constructor(t){this.name="";this.isProg=!1;this.isParallaxEnabled=!1;this._scrollDirection="vertical";this.onChangeDirection=()=>{};this.onScrollStart=()=>{};this.onScrollStop=()=>{};this.onCalcUpdate=()=>{this.context.data.scroll.scrollContainer?.scrollTo(0,this.context.data.scroll.current)};this.document=document,this.context=t}set scrollDirection(t){this._scrollDirection=t,this._scrollDirection==="vertical"?this.onCalcUpdate=()=>{this.context.data.scroll.scrollContainer?.scrollTo(0,this.context.data.scroll.current)}:this._scrollDirection==="horizontal"&&(this.onCalcUpdate=()=>{this.context.data.scroll.scrollContainer?.scrollTo(this.context.data.scroll.current,0)})}onFrame(){}onWheel(t){}onScroll(t){}disableScrollEvents(){}enableScrollEvents(){}};var K=class extends M{constructor(e){super(e);this.name="default"}onFrame(){if(this.context.data.scroll.delta!==0){let e=this.context.data.scroll.delta*this.context.data.scroll.speedAccelerate;this.context.data.scroll.delta-=e,this.context.data.scroll.lerped=e,Math.abs(this.context.data.scroll.lerped)<.1&&(this.context.data.scroll.delta=0,this.context.data.scroll.lerped=0,this.onScrollStop())}}onScroll(e){let r=this.context.data.scroll.elementContainer.scrollTop;this.context.data.scroll.current=r,this.context.data.scroll.target=r,this.context.data.scroll.transformedCurrent=r}onWheel(e){if(e.deltaY!==0){this.context.data.scroll.delta===0&&this.onScrollStart();let r=e.deltaY;this.context.data.scroll.target===0&&(this.context.data.scroll.delta+=Math.max(0,e.deltaY)),this.context.data.scroll.delta+=r}}};var Q=class extends M{constructor(e){super(e);this.name="disable";this.preventScroll=e=>{e.preventDefault()};this.preventKeyScroll=e=>{["ArrowUp","ArrowDown","PageUp","PageDown"," ","Home","End"].includes(e.key)&&e.preventDefault()};this.onPreventScroll=this.preventScroll.bind(this);this.onPreventKeyScroll=this.preventKeyScroll.bind(this)}disableScrollEvents(){window.addEventListener("touchmove",this.onPreventScroll,{passive:!1}),window.addEventListener("keydown",this.onPreventKeyScroll)}enableScrollEvents(){window.removeEventListener("touchmove",this.onPreventScroll),window.removeEventListener("keydown",this.onPreventKeyScroll)}onFrame(){}onWheel(e){e.preventDefault()}onScroll(e){e.preventDefault()}};var j={SCROLL_FORWARD:"-scroll-forward",SCROLL_BACK:"-scroll-back"},G=class extends M{constructor(e){super(e);this.name="smooth";this.isScrollbarManipulation=!1;this.scrollForce=0;this.wheelImpulse=0;this.previousCurrent=0;this.isBottomScrollDirection=null;this.velocityThreshold=.1}updateScrollDirection(e){if(this.isBottomScrollDirection===null){this.isBottomScrollDirection=e;return}this.context.data.scroll.isScrollingDown=e,this.onChangeDirection(),document.documentElement.classList.toggle(j.SCROLL_FORWARD,e),document.documentElement.classList.toggle(j.SCROLL_BACK,!e)}stopScroll(){this.context.data.scroll.lerped=0,this.context.data.scroll.delta=0,this.context.data.scroll.target=this.context.data.scroll.current,this.isProg=!1,this.onCalcUpdate(),document.documentElement.classList.remove(j.SCROLL_BACK,j.SCROLL_FORWARD),this.isBottomScrollDirection=null}onFrame(){if(this.isScrollbarManipulation){this.isScrollbarManipulation=!1,this.context.data.scroll.current=this.context.data.scroll.elementContainer.scrollTop,this.context.data.scroll.target=this.context.data.scroll.elementContainer.scrollTop,this.context.data.scroll.transformedCurrent=this.context.data.scroll.current*this.context.data.viewport.transformScale;return}if(this.context.data.scroll.delta!==0){this.scrollForce=this.context.data.scroll.delta*this.context.data.scroll.speedAccelerate,this.context.data.scroll.target=Math.min(Math.max(0,this.context.data.scroll.target+this.scrollForce),this.context.data.scroll.bottomPosition),this.context.data.scroll.delta-=this.scrollForce,this.context.data.scroll.lerped=(this.context.data.scroll.target-this.context.data.scroll.current)*this.context.data.scroll.speed;let e=Math.abs(this.context.data.scroll.lerped);this.context.data.scroll.lerped>0?this.context.data.scroll.current=Math.ceil(this.context.data.scroll.current+this.context.data.scroll.lerped):this.context.data.scroll.current=Math.floor(this.context.data.scroll.current+this.context.data.scroll.lerped),this.context.data.scroll.transformedCurrent=this.context.data.scroll.current*this.context.data.viewport.transformScale,this.updateScrollDirection(this.context.data.scroll.lerped>0),e<this.velocityThreshold?(this.stopScroll(),this.onScrollStop()):(this.isProg=!0,this.previousCurrent!==this.context.data.scroll.current&&(this.previousCurrent=this.context.data.scroll.current,this.onCalcUpdate()))}}onWheel(e){if(e.deltaY!==0&&e.preventDefault(),this.wheelImpulse=e.deltaY,this.wheelImpulse===0)return;this.context.data.scroll.delta===0&&this.onScrollStart();let r=Math.sign(this.wheelImpulse),i=this.context.data.scroll.target===0&&r<0,o=this.context.data.scroll.target===this.context.data.scroll.bottomPosition&&r>0;i||o||(this.context.data.scroll.delta+=this.wheelImpulse)}onScroll(e){this.isProg||(this.isScrollbarManipulation=!0)}};var J=class{constructor(t){this.context=t;this.modes=new Map;this.modes.set("smooth",new G(t)),this.modes.set("default",new K(t)),this.modes.set("disable",new Q(t)),this.updateResponsiveMode()}setMobileMode(t){this.context.data.scroll.modeMobile=t,this.updateResponsiveMode()}setDesktopMode(t){this.context.data.scroll.modeDesktop=t,this.updateResponsiveMode()}updateResponsiveMode(){let e=window.innerWidth<1080?this.context.data.scroll.modeMobile:this.context.data.scroll.modeDesktop;this.setMode(e)}updatePosition(){this.modes.forEach(t=>{t.onCalcUpdate()})}setMode(t){if(!this.modes.has(t)){console.warn(`[ScrollManager] Unknown scroll mode: ${t}`);return}this.get().enableScrollEvents(),this.context.data.scroll.mode=t,this.get().disableScrollEvents()}get(){return this.modes.get(this.context.data.scroll.mode)}getEngines(){return this.modes}onFrame(){this.get().onFrame()}onScroll(t){this.get().onScroll(t)}onWheel(t){this.get().onWheel(t)}bindEvents(t){this.modes.forEach(e=>{e.onScrollStart=t.onScrollStart,e.onScrollStop=t.onScrollStop,e.onChangeDirection=t.onDirectionChange})}};var Z=class{constructor(){this.targetX=0;this.targetY=0;this.smoothedX=0;this.smoothedY=0;this.stepX=0;this.stepY=0}};var tt=class{constructor(){this.threeInstance=null}};var et=class{constructor(){this.target=0;this.current=0;this.transformedCurrent=0;this.delta=0;this.lerped=0;this.displacement=0;this.isScrollingDown=!1;this.topPosition=0;this.bottomPosition=0;this.direction="vertical";this.elementContainer=document.documentElement;this.scrollContainer=window;this.container=document.body;this.mode="smooth";this.modeMobile="smooth";this.modeDesktop="smooth";this.speed=.1;this.speedAccelerate=.25}};var rt=class{constructor(){this.now=0;this.previous=0;this.delta=0;this.elapsed=0}};var it=class{constructor(){this.windowWidth=0;this.windowHeight=0;this.contentWidth=0;this.contentHeight=0;this.scaleWidth=1;this.scaleHeight=1;this.transformScale=1;this.baseRem=16}};var ot=class{constructor(){this.scroll=new et;this.viewport=new it;this.cursor=new Z;this.render=new tt;this.time=new rt}};var h=class{constructor(t){this.objectMap=new Map;this.objects=[];this.htmlKey="";this._type=1;this.tools=t.tools,this.data=t.data,this.settings=t.settings,this.events=t.events,this.attributesToMap=[{key:"active",type:"boolean",fallback:this.settings.active},{key:"fixed",type:"boolean",fallback:this.settings.fixed},{key:"repeat",type:"boolean",fallback:this.settings.repeat},{key:"self-disable",type:"boolean",fallback:this.settings["self-disable"]},{key:"abs",type:"boolean",fallback:this.settings.abs},{key:"key",type:"string",fallback:this.settings.key},{key:"offset-top",type:"dimension",fallback:this.settings["offset-top"]},{key:"offset-bottom",type:"dimension",fallback:this.settings["offset-bottom"]},{key:"inview-top",type:"dimension",fallback:this.settings["inview-top"]},{key:"inview-bottom",type:"dimension",fallback:this.settings["inview-bottom"]},{key:"start",type:"number",fallback:(e,r,i)=>{let o=i.top;return Math.floor(o)+this.data.scroll.container.scrollTop*this.data.viewport.transformScale}},{key:"end",type:"number",fallback:(e,r,i)=>{let o=i.top,s=i.height;return o+s-this.data.scroll.transformedCurrent}},{key:"size",type:"number",fallback:(e,r,i)=>i.height},{key:"half-width",type:"number",fallback:(e,r,i)=>i.width/2},{key:"half-height",type:"number",fallback:(e,r,i)=>i.height/2}]}get type(){return this._type}initializeObject(t,e,r,i){let o=this.tools.boundingClientRect.process({element:r});for(let{key:s,type:n,fallback:a,transform:p}of this.attributesToMap){let d=typeof a=="function"?a(r,e,o):a,m=this.tools.domAttribute.process({element:r,key:s,fallback:i[s]??this.settings[s]??d}),l=this.parseAttribute(m,n,{element:r,viewportHeight:this.data.viewport.windowHeight,baseRem:this.data.viewport.baseRem});p&&(l=p(l)),e.setProperty(s,l)}}calculatePositions(t,e){}parseAttribute(t,e,r={}){if(t==null)return null;if(typeof e=="object"&&e.type==="enum")return e.values.includes(t)?t:e.values[0];switch(e){case"number":return parseFloat(t);case"boolean":return t===""||t==="true";case"json":try{return JSON.parse(t)}catch{return null}case"tuple":return t.trim().split(/\s+/);case"easing":return this.tools.easingFunction.process({easing:t});case"color":return this.tools.colorParser.process({value:t});case"dimension":return t=="0"?0:r.element!=null&&r.viewportHeight!=null&&r.baseRem!=null?this.tools.unitParser.process({value:t,element:r.element,viewportHeight:r.viewportHeight,baseRem:r.baseRem}):0;default:return t}}canConnect(t){return t.keys.includes(this.htmlKey)}connectObject(t){t.connect(this),this.onObjectConnected(t)}enterObject(t,e){this.objectMap.has(t)||(this.objectMap.set(t,e),this.objects.push(e))}exitObject(t){let e=this.objectMap.get(t);if(!e)return;this.objectMap.delete(t);let r=this.objects.indexOf(e);r!==-1&&this.objects.splice(r,1)}onObjectConnected(t){}applyToElementAndConnects(t,e){e(t.htmlElement),t.connects.forEach(e)}destroy(){this.objects=[],this.objectMap=new Map}onInit(){}onFrame(t){}onResize(){}onScroll(t){}onDirectionChange(){}onScrollStart(){}onScrollStop(){}onScrollDirectionChange(){}onAxisChange(){}onDeviceChange(){}onScrollConfigChange(){}onSettingsChange(){}onDOMRebuild(){}onMouseMove(t){}onWheel(t){}onDOMMutate(t,e){}};var I=class{process({element:t}){return t.getBoundingClientRect()}};var L=class{process({element:t,key:e,fallback:r=null}){return t.getAttribute(`string-${e}`)??t.getAttribute(`data-string-${e}`)??r}};var O=class{process({record:t,name:e,fallback:r=null}){return t[e]??t[`data-${e}`]??r}};var E=class{process({element:t}){let e=t.getBoundingClientRect(),i=getComputedStyle(t).transform.match(/-?[\d.]+/g)?.map(parseFloat)??[];if(i.length===6){let[o,s,n,a,p,d]=i,m=o*a-s*n;return{width:e.width/(o||1),height:e.height/(a||1),left:(e.left*a-e.top*n+n*d-p*a)/m,top:(-e.left*s+e.top*o+p*s-o*d)/m}}return e}};var D=class{constructor(t=new E){this.transformTool=t}process({element:t,container:e=document.body}){let r;try{r=e.getBoundingClientRect()}catch{r=document.body.getBoundingClientRect()}let i=this.transformTool.process({element:t});return{top:i.top-r.top,left:i.left-r.left}}};var k=class{process({from:t,to:e,progress:r}){return(e-t)*r}};var R=class{process({value:t,element:e,viewportHeight:r,baseRem:i}){let o=t.startsWith("-");o&&(t=t.slice(1));let s=0;return t==="selfHeight"?s=e.offsetHeight:t.endsWith("px")?s=parseFloat(t):t.endsWith("%")?s=parseFloat(t)/100*r:t.endsWith("rem")&&(s=parseFloat(t)*i),o?-s:s}};var A=class{process({value:t,inMin:e=.1,inMax:r=1,outMin:i=.05,outMax:o=.65}){if(t<e)return o;if(t>1&&(t=1),t<=r){let s=(t-e)/(r-e);return o-s*(o-i)}return i}};var H=class{process({value:t}){let e=t.trim();if(e.startsWith("random(")&&e.endsWith(")")){let r=e.slice(7,-1).split(",").map(o=>o.trim()).filter(Boolean),i=Math.floor(Math.random()*r.length);return r[i]}return e}};var F=class{process({value:t}){let e=t.trim().toLowerCase();if(e.startsWith("#")){let o=e.slice(1);o.length===3&&(o=o.split("").map(d=>d+d).join(""));let s=parseInt(o.slice(0,2),16),n=parseInt(o.slice(2,4),16),a=parseInt(o.slice(4,6),16),p=o.length===8?parseInt(o.slice(6,8),16)/255:1;return{r:s,g:n,b:a,a:p}}let r=e.match(/rgba?\(([^)]+)\)/);if(r){let[o,s,n,a=1]=r[1].split(",").map(p=>parseFloat(p.trim()));return{r:o,g:s,b:n,a}}let i=e.match(/hsla?\(([^)]+)\)/);if(i){let[o,s,n,a="1"]=i[1].split(",").map(l=>l.trim()),[p,d,m]=this.hslToRgb(parseFloat(o),parseFloat(s),parseFloat(n));return{r:p,g:d,b:m,a:parseFloat(a)}}return{r:0,g:0,b:0,a:0}}hslToRgb(t,e,r){t=t/360,e=parseFloat(e.toString())/100,r=parseFloat(r.toString())/100;let i=(d,m,l)=>(l<0&&(l+=1),l>1&&(l-=1),l<1/6?d+(m-d)*6*l:l<1/2?m:l<2/3?d+(m-d)*(2/3-l)*6:d),o=r<.5?r*(1+e):r+e-r*e,s=2*r-o,n=Math.round(i(s,o,t+1/3)*255),a=Math.round(i(s,o,t)*255),p=Math.round(i(s,o,t-1/3)*255);return[n,a,p]}};var W=class{process({value:t,rules:e,messages:r={}}){for(let i of e){let o=null;if(i==="required"&&t.trim()===""?o="required":i==="email"&&!/^\S+@\S+\.\S+$/.test(t)?o="invalid-email":typeof i=="object"&&(i.type==="minLength"&&t.length<i.value&&(o="too-short"),i.type==="maxLength"&&t.length>i.value&&(o="too-long")),o){let s=r[o],n=typeof s=="function"?s({value:t,rule:i}):s??this.defaultMessage(o,i);return{valid:!1,error:o,message:n}}}return{valid:!0,error:null,message:null}}defaultMessage(t,e){switch(t){case"required":return"This field is required.";case"invalid-email":return"Please enter a valid email.";case"too-short":return`Too short${typeof e=="object"&&"value"in e?` (min ${e.value})`:""}.`;case"too-long":return`Too long${typeof e=="object"&&"value"in e?` (max ${e.value})`:""}.`}}};var V=class{constructor(){this.namedCurves={linear:[0,0,1,1],ease:[.25,.1,.25,1],"ease-in":[.42,0,1,1],"ease-out":[0,0,.58,1],"ease-in-out":[.42,0,.58,1]}}process({easing:t}){let e=t.trim();if(this.namedCurves[e])return this.cubicBezier(...this.namedCurves[e]);let r=e.match(/^cubic-bezier\s*\(\s*([-+]?\d*\.?\d+)\s*,\s*([-+]?\d*\.?\d+)\s*,\s*([-+]?\d*\.?\d+)\s*,\s*([-+]?\d*\.?\d+)\s*\)$/);if(r){let[i,o,s,n]=r.slice(1).map(Number);return this.cubicBezier(i,o,s,n)}return i=>i}cubicBezier(t,e,r,i){let o=3*t,s=3*(r-t)-o,n=1-o-s,a=3*e,p=3*(i-e)-a,d=1-a-p;function m(u){return((n*u+s)*u+o)*u}function l(u){return((d*u+p)*u+a)*u}function g(u){return(3*n*u+2*s)*u+o}function b(u,S=1e-5){let y,f,v=u,x,Y,T;for(T=0;T<8;T++){if(x=m(v)-u,Math.abs(x)<S)return v;if(Y=g(v),Math.abs(Y)<1e-6)break;v=v-x/Y}for(y=0,f=1,v=u;y<f;){if(x=m(v)-u,Math.abs(x)<S)return v;x>0?f=v:y=v,v=(f+y)/2}return v}return function(u){return l(b(u))}}};var z=class{process({distance:t,radius:e,strength:r}){if(t>=e)return 0;let i=(e-t)/e;return r*i}};var B=class{process({from:t,to:e,progress:r}){return{r:t.r+(e.r-t.r)*r,g:t.g+(e.g-t.g)*r,b:t.b+(e.b-t.b)*r,a:t.a+(e.a-t.a)*r}}};var q=class{process({from:t,to:e,progress:r}){return{x:(e.x-t.x)*r,y:(e.y-t.y)*r}}};var N=class{process({value:t}){let r=t?.trim();if(!r||r==="none")return 1;try{if(r.startsWith("matrix(")){let i=r.match(/matrix\(([^)]+)\)/);if(i&&i[1]){let o=i[1].split(",").map(s=>parseFloat(s.trim()));if(o.length>=1&&!isNaN(o[0]))return o[0]}}if(r.startsWith("scale(")){let i=r.match(/scale\(([^)]+)\)/);if(i&&i[1]){let o=i[1].split(",").map(s=>parseFloat(s.trim()));if(o.length>=1&&!isNaN(o[0]))return o[0]}}if(r.startsWith("scaleX(")){let i=r.match(/scaleX\(([^)]+)\)/);if(i&&i[1]){let o=parseFloat(i[1].trim());if(!isNaN(o))return o}}if(r.startsWith("scale3d(")){let i=r.match(/scale3d\(([^)]+)\)/);if(i&&i[1]){let o=i[1].split(",").map(s=>parseFloat(s.trim()));if(o.length>=1&&!isNaN(o[0]))return o[0]}}if(r.startsWith("matrix3d(")){let i=r.match(/matrix3d\(([^)]+)\)/);if(i&&i[1]){let o=i[1].split(",").map(s=>parseFloat(s.trim()));if(o.length>=1&&!isNaN(o[0]))return o[0]}}}catch(i){return console.error(`Error parsing transform string "${r}":`,i),1}return 1}};var nt=class{process({processedWords:t,lines:e,options:r,totalChars:i}){let o=[],s=0,n=new Map;e.forEach((d,m)=>{let l=d.words.reduce((g,b)=>g+b.text.length,0);n.set(m,l)});let a=0,p=-1;return t.forEach(d=>{let m=d.text,l=d.lineIndex,g=m.length,b=n.get(l)||0;l!==p&&(a=0,p=l),Array.from(m).forEach((S,y)=>{let f=[];r.char&&r.char.forEach(v=>{let x=this.calculateIndex(v,s,y,i);f.push({value:x,type:"char",align:v.align})}),r.charLine&&r.charLine.forEach(v=>{let x=this.calculateIndex(v,a,y,b);f.push({value:x,type:"charLine",align:v.align})}),r.charWord&&r.charWord.forEach(v=>{let x=this.calculateIndex(v,y,y,g);f.push({value:x,type:"charWord",align:v.align})}),o.push({text:S,globalCharIndex:s,lineCharIndex:a,wordCharIndex:y,parentGlobalWordIndex:d.globalIndex,parentLineIndex:d.lineIndex,parentWordIndexInLine:d.wordIndexInLine,calculatedValues:f}),s++,a++})}),o}calculateIndex(t,e,r,i){let o=e;if(t.align==="random"){let s=t.random?.min??0,n=t.random?.max??(i>0?i-1:0),a=Math.min(s,n),p=Math.max(s,n);o=Math.floor(Math.random()*(p-a+1))+a}else t.align==="end"?o=(i>0?i-1:0)-e:t.align==="center"&&(o=e-Math.floor(i/2));return t.abs&&(o=Math.abs(o)),o}};var st=class{process({text:t,targetElement:e}){if(!t||!e||e.offsetWidth<=0)return console.warn("LayoutLineSplitterTool: Invalid input or target element has zero width."),[];let i=this.decodeHtmlEntity(t).trim().split(/\s+/).filter(l=>l.length>0);if(i.length===0)return[];let o=document.createElement("span"),s=window.getComputedStyle(e);o.style.fontFamily=s.fontFamily,o.style.fontSize=s.fontSize,o.style.fontWeight=s.fontWeight,o.style.letterSpacing=s.letterSpacing,o.style.textTransform=s.textTransform,o.style.wordSpacing=s.wordSpacing,o.style.whiteSpace="nowrap",o.style.visibility="hidden",o.style.position="absolute",o.style.top="-9999px",o.style.left="-9999px",document.body.appendChild(o);let n=[],a=[],p=0,d=this.measureWidth(" ",o),m=e.offsetWidth;try{i.forEach(l=>{let g=this.measureWidth(l,o),b=p+(a.length>0?d:0)+g;a.length>0&&b>m?(n.push({text:a.join(" "),words:a.map(u=>({text:u}))}),a=[l],p=g):(a.push(l),p=a.length===1?g:b)}),a.length>0&&n.push({text:a.join(" "),words:a.map(l=>({text:l}))})}finally{o.parentNode===document.body&&document.body.removeChild(o)}return n}measureWidth(t,e){return e.textContent=t,e.offsetWidth}decodeHtmlEntity(t){return t.replace(/&amp;/g,"&")}};var at=class{process({lines:t,words:e,chars:r,options:i}){let o=document.createElement("div"),s=0,n=0,a=this.hasLineOptions(i),p=this.hasCharOptions(i);return t.forEach(d=>{let m=a?document.createElement("span"):o;a&&(m.classList.add("-s-line"),o.appendChild(m));let l=e.slice(s,s+d.words.length);s+=d.words.length,l.forEach((g,b)=>{let u=document.createElement("span");u.classList.add("-s-word");let S=r.slice(n,n+g.text.length);p&&g.text.length>0?(S.forEach(y=>{let f=document.createElement("span");f.classList.add("-s-char"),f.textContent=y.text,this.applyStyles(f,y.calculatedValues),u.appendChild(f)}),n+=g.text.length):(u.textContent=g.text,n+=g.text.length),this.applyStyles(u,g.calculatedValues),m.appendChild(u),b<l.length-1&&m.appendChild(document.createTextNode("\xA0"))})}),o.innerHTML}hasLineOptions(t){return(t.line?.length??0)>0||(t.wordLine?.length??0)>0||(t.charLine?.length??0)>0}hasCharOptions(t){return(t.char?.length??0)>0||(t.charLine?.length??0)>0||(t.charWord?.length??0)>0}applyStyles(t,e){e&&e.forEach(r=>{let i=this.generateVariableName(r.type,r.align);t.style.setProperty(i,String(r.value))})}generateVariableName(t,e){return`--${t}-${e}`}};var lt=class{process({lines:t,options:e}){let r=[],i=0,o=t.reduce((s,n)=>s+n.words.length,0);return t.forEach((s,n)=>{let a=s.words,p=a.length;a.forEach((d,m)=>{let l=[];e.word&&e.word.forEach(g=>{let b=this.calculateIndex(g,i,m,o);l.push({value:b,type:"word",align:g.align})}),e.wordLine&&e.wordLine.forEach(g=>{let b=this.calculateIndex(g,m,m,p);l.push({value:b,type:"wordLine",align:g.align})}),r.push({text:d.text,globalIndex:i,lineIndex:n,wordIndexInLine:m,calculatedValues:l}),i++})}),r}calculateIndex(t,e,r,i){let o=e;if(t.align==="random"){let s=t.random?.min??0,n=t.random?.max??(i>0?i-1:0),a=Math.min(s,n),p=Math.max(s,n);o=Math.floor(Math.random()*(p-a+1))+a}else t.align==="end"?o=(i>0?i-1:0)-e:t.align==="center"&&(o=e-Math.floor(i/2));return t.abs&&(o=Math.abs(o)),o}};var ct=class{process({attributeValue:t}){let e={line:[],word:[],char:[],charLine:[],charWord:[],wordLine:[]};return t&&t.split("|").forEach(i=>{let o=i.trim();if(!o)return;let s=o.match(/^(\w+-)?(\w+)(\[(.*?)\])?$/);if(s){let n=s[1]||"",a=s[2],p=n+a,m=(s[4]||"").split(";").map(g=>g.trim()).filter(g=>g.length>0),l=this.parseParamsArray(m);switch(p){case"line":e.line.push(l);break;case"word":e.word.push(l);break;case"char":e.char.push(l);break;case"charLine":e.charLine.push(l);break;case"charWord":e.charWord.push(l);break;case"wordLine":e.wordLine.push(l);break;default:console.warn(`SplitOptionsParserTool: Unrecognized option type "${p}" in part "${o}"`);break}}else console.warn(`SplitOptionsParserTool: Could not parse part format "${o}"`)}),e}parseParamsArray(t){let e={align:"start"};return t.forEach(r=>{if(r==="abs")e.abs=!0;else if(r.startsWith("random")){e.align="random";let i=r.match(/random\(\s*(\d+)\s*,\s*(\d+)\s*\)/);i&&(e.random={min:parseInt(i[1],10),max:parseInt(i[2],10)})}else["start","center","end"].includes(r)&&(e.align=r)}),e}};var pt=class{constructor(){this.domAttribute=new L;this.recordAttribute=new O;this.transformNullify=new E;this.boundingClientRect=new I;this.relativePosition=new D(this.transformNullify);this.unitParser=new R;this.lerp=new k;this.adaptiveLerp=new A;this.originParser=new H;this.colorParser=new F;this.validation=new W;this.easingFunction=new V;this.magneticPull=new z;this.lerpColor=new B;this.lerpVector=new q;this.transformScaleParser=new N;this.layoutSplitter=new st;this.wordIndexer=new lt;this.charIndexer=new nt;this.domBuilder=new at;this.optionsParser=new ct}};var yt=class extends h{constructor(e){super(e);this.enterObjectsMap=new Map;this.enterObjects=new Array;this.overCount=0;this.htmlKey="cursor",this.cursor=document.querySelector("[string-cursor],[data-string-cursor]"),this.cursorContent=document.querySelector("[string-cursor-content],[data-string-cursor-content]"),this.attributesToMap=[...this.attributesToMap,{key:"target-disable",type:"boolean",fallback:this.settings["target-disable"]},{key:"target-style-disable",type:"boolean",fallback:this.settings["target-style-disable"]},{key:"target-class",type:"string",fallback:this.settings["target-class"]},{key:"cursor-class",type:"string",fallback:this.settings["cursor-class"]},{key:"alignment",type:{type:"enum",values:["start","center","end"]},fallback:this.settings.alignment},{key:"lerp",type:"number",fallback:this.settings.lerp,transform:r=>this.tools.adaptiveLerp.process({value:r,inMin:.1,inMax:1,outMin:.05,outMax:.65})}]}initializeObject(e,r,i,o){super.initializeObject(e,r,i,o),r.setProperty("mouse-x",0),r.setProperty("mouse-y",0),r.setProperty("mouse-pixel-x",0),r.setProperty("mouse-pixel-y",0),r.setProperty("is-mouse-over",!1),r.setProperty("is-mouse-move",!1)}onFrame(e){requestAnimationFrame(()=>{this.objects.forEach(n=>{let a=n.getProperty("is-mouse-over"),p=n.getProperty("cursor-target-disable"),d=n.getProperty("lerp")??.15;if(a&&!p){let m=n.htmlElement.getBoundingClientRect(),l=this.data.cursor.targetX,g=this.data.cursor.targetY,b=l-m.left,u=g-m.top,S=n.getProperty("mouse-pixel-x")??0,y=n.getProperty("mouse-pixel-y")??0,f=S-b,v=y-u;if(f*f+v*v>1e-4){(n.getProperty("is-mouse-move")??!1)||(n.setProperty("is-mouse-move",!0),n.setProperty("mouse-pixel-x",b),n.setProperty("mouse-pixel-y",u),n.setProperty("mouse-x",b),n.setProperty("mouse-y",u),S=b,y=u,this.events.emit(`cursor:start:${n.id}`,null));let T=this.tools.lerp.process({from:S,to:b,progress:d}),zt=this.tools.lerp.process({from:y,to:u,progress:d}),gt=S+T,vt=y+zt;n.setProperty("mouse-pixel-x",gt),n.setProperty("mouse-pixel-y",vt);let Ht=n.getProperty("alignment")??"center",bt=this.calculateOffset(Ht,gt,m.width),ft=this.calculateOffset(Ht,vt,m.height);n.setProperty("mouse-x",bt),n.setProperty("mouse-y",ft),this.setMouseCoordinates(n,bt,ft),this.events.emit(`cursor:move:${n.id}`,{x:bt,y:ft}),this.events.emit(`cursor:pixel:${n.id}`,{x:gt,y:vt})}else n.setProperty("mouse-pixel-x",b),n.setProperty("mouse-pixel-y",u),this.events.emit(`cursor:end:${n.id}`,null)}else{let m=n.getProperty("mouse-x")??0,l=n.getProperty("mouse-y")??0;if(m!==0||l!==0){n.setProperty("is-mouse-move",!1);let g=n.htmlElement.getBoundingClientRect(),b=n.getProperty("half-width")??g.width/2,u=n.getProperty("half-height")??g.height/2,S=this.calculateOffset("center",b,g.width),y=this.calculateOffset("center",u,g.height),f=m+this.tools.lerp.process({from:m,to:S,progress:d}),v=l+this.tools.lerp.process({from:l,to:y,progress:d});n.setProperty("mouse-x",f),n.setProperty("mouse-y",v),Math.abs(f)<.001&&Math.abs(v)<.001&&(n.setProperty("mouse-x",0),n.setProperty("mouse-y",0),n.setProperty("mouse-pixel-x",0),n.setProperty("mouse-pixel-y",0)),this.setMouseCoordinates(n,f,v)}}});let{stepX:r,stepY:i,smoothedX:o,smoothedY:s}=this.data.cursor;(r!==0||i!==0)&&(this.events.emit("cursor",{stepX:r,stepY:i,x:o,y:s}),this.cursor.style.setProperty("--x",o.toString()),this.cursor.style.setProperty("--y",s.toString()),this.cursor.style.setProperty("--x-lerp",r.toString()),this.cursor.style.setProperty("--y-lerp",i.toString()))})}onObjectConnected(e){let r=e.htmlElement;e.setProperty("timeoutId",null),e.setProperty("mouseleave",()=>{this.onMouseLeave(e)}),e.setProperty("mouseenter",()=>{this.onMouseEnter(e)}),e.setProperty("onEnterEvent",this.onEnterObject.bind(this)),e.events.on("enter",e.getProperty("onEnterEvent")),e.setProperty("onLeaveEvent",this.onLeaveObject.bind(this)),e.events.on("leave",e.getProperty("onLeaveEvent"))}getCursorClass(e){let r=e.getProperty("cursor-class");return r!=null&&r.length>0?r:null}onMouseEnter(e){this.overCount++,e.setProperty("is-mouse-over",!0);let r=this.getCursorClass(e);r&&this.cursor.classList.add(r),this.cursor.classList.add("-showing"),e.setProperty("timeoutId",setTimeout(()=>{this.cursor.classList.remove("-showing"),this.cursor.classList.add("-show")},1200)),e.htmlElement.addEventListener("mouseleave",e.getProperty("mouseleave"))}onMouseLeave(e){this.overCount--,e.setProperty("is-mouse-over",!1),e.getProperty("timeoutId")&&(clearTimeout(e.getProperty("timeoutId")),e.setProperty("timeoutId",null));let r=this.getCursorClass(e);r&&this.cursor.classList.remove(r),this.cursor.classList.remove("-showing"),this.cursor.classList.remove("-show"),e.htmlElement.removeEventListener("mouseleave",e.getProperty("mouseleave"))}onEnterObject(e){e.htmlElement.addEventListener("mouseenter",e.getProperty("mouseenter"))}onLeaveObject(e){e.htmlElement.removeEventListener("mouseenter",e.getProperty("mouseenter")),e.htmlElement.removeEventListener("mouseleave",e.getProperty("mouseleave"))}setMouseCoordinates(e,r,i){e.getProperty("cursor-target-style-disable")||this.applyToElementAndConnects(e,o=>{o.style.setProperty("--x",r.toFixed(2)),o.style.setProperty("--y",i.toFixed(2))})}calculateOffset(e,r,i){switch(e){case"start":return r/i;case"end":return(r-i)/i;case"center":default:return(r-i/2)/(i/2)}}};var St=class extends h{constructor(t){super(t),this.htmlKey="magnetic",this.attributesToMap=[...this.attributesToMap,{key:"strength",type:"number",fallback:this.settings.strength},{key:"radius",type:"number",fallback:this.settings.radius}]}initializeObject(t,e,r,i){super.initializeObject(t,e,r,i),e.setProperty("is-magneting",!1),e.setProperty("magnetic-target-x",0),e.setProperty("magnetic-target-y",0),e.setProperty("magnetic-x",0),e.setProperty("magnetic-y",0),e.setProperty("lerp",.1)}onMouseMove(t){this.objects.forEach(e=>{let i=e.htmlElement.getBoundingClientRect(),o=i.left+(e.getProperty("half-width")??0),s=i.top+(e.getProperty("half-height")??0),n=t.clientX-o,a=t.clientY-s,p=Math.sqrt(n**2+a**2),d=e.getProperty("radius")??0,m=e.getProperty("strength")??0,l=this.tools.magneticPull.process({distance:p,radius:d,strength:m});e.setProperty("magnetic-target-x",n*l),e.setProperty("magnetic-target-y",a*l),l>0&&e.setProperty("is-magneting",!0)})}onFrame(t){this.objects.forEach(e=>{if(e.getProperty("is-magneting")){let r=e.getProperty("magnetic-x")??0,i=e.getProperty("magnetic-y")??0,o=e.getProperty("lerp")??0,s=e.getProperty("magnetic-target-x")??0,n=e.getProperty("magnetic-target-y")??0,a=this.tools.lerp.process({from:r,to:s,progress:o}),p=this.tools.lerp.process({from:i,to:n,progress:o});a>-.01&&a<.01&&(a=0,e.setProperty("magnetic-x",e.getProperty("magnetic-target-x"))),p>-.01&&p<.01&&(p=0,e.setProperty("magnetic-y",e.getProperty("magnetic-target-y"))),r+=a,i+=p,e.setProperty("magnetic-x",r),e.setProperty("magnetic-y",i),this.events.emit(`magnetic:move:${e.id}`,{x:r,y:i}),this.applyToElementAndConnects(e,d=>{d.style.setProperty("--magnetic-x",r.toString()),d.style.setProperty("--magnetic-y",i.toString())}),(e.getProperty("magnetic-target-x")==r||e.getProperty("magnetic-target-y")==i)&&e.setProperty("is-magneting",!1)}})}};var xt=class extends h{constructor(e){super(e);this.isStartLoaded=!1;this.loadingCount=0;this.htmlKey="lazy"}onInit(){document.querySelectorAll("img[string-lazy], img[data-string-lazy]").forEach(r=>this.loadImage(r)),this.isStartLoaded=!0}onObjectConnected(e){if(this.loadingCount++,this.isStartLoaded){let r=e.htmlElement;this.loadImage(r)}}async loadImage(e){let r=this.tools.domAttribute.process({element:e,key:this.htmlKey,fallback:""});if(r)try{e.classList.add("lazyLoad"),e.src=r,e.addEventListener("load",()=>{e.classList.add("-loaded")}),await this.setAspectRatio(e,r)}catch{console.warn("Failed to load image:",r)}}setAspectRatio(e,r){return new Promise((i,o)=>{let s=new XMLHttpRequest;s.open("GET",r,!0),s.responseType="arraybuffer",s.setRequestHeader("Range","bytes=0-"),s.onload=()=>{if(s.status===200||s.status===206){let n=new Blob([s.response]),a=new Image;a.onload=()=>{e.style.aspectRatio=`${a.width} / ${a.height}`,URL.revokeObjectURL(a.src),this.loadingCount--,this.loadingCount<=0&&(this.events.emit("image:load:all",null),this.loadingCount=0),i()},a.onerror=()=>{URL.revokeObjectURL(a.src),this.loadingCount--,o(new Error("Image failed to decode"))},a.src=URL.createObjectURL(n)}else o(new Error("Image request failed"))},s.onerror=()=>o(new Error("XHR error")),s.send()})}};var Mt=class extends h{constructor(e){super(e);this.loadingTimeout=0;this._type=2,this.loadingTimeout=this.settings.timeout}onInit(){setTimeout(()=>{document.documentElement.classList.add("-loaded")},this.loadingTimeout)}};var dt=class extends h{constructor(t){super(t),this.htmlKey=""}canConnect(t){return t.keys[0]==null}};var C=class{constructor(t){this.min=void 0;this.max=void 0;this.enable=!0;this.min=t?.min,this.max=t?.max,this.enable=t?.enable??!0}setEnable(t=!0){this.enable=t}setRange(t,e){this.min=t??void 0,this.max=e??void 0}get mediaQuery(){let t="screen";return this.min&&(t+=` and (min-width: ${this.min}px)`),this.max&&(t+=` and (max-width: ${this.max}px)`),t}},Et=class extends h{constructor(e){super(e);this.queries={0:new C({max:359}),1:new C({min:360,max:1079}),2:new C({min:1080,max:1365}),3:new C({min:1366})};this.matchMedias={0:window.matchMedia(this.queries[0].mediaQuery),1:window.matchMedia(this.queries[1].mediaQuery),2:window.matchMedia(this.queries[2].mediaQuery),3:window.matchMedia(this.queries[3].mediaQuery)};this._type=2}onConnect(){}onInit(){if(this.settings!=null&&this.settings.settings!=null){let e=this.settings.settings;e.mobile?(this.queries[0].enable=!0,this.queries[0].setRange(e.mobile.min==null?null:e.mobile.min,e.mobile.max??null),this.matchMedias[0]=window.matchMedia(this.queries[0].mediaQuery)):this.queries[0].enable=!1,e.tablet?(this.queries[1].enable=!0,this.queries[1].setRange(e.mobile.min==null?null:e.mobile.min,e.mobile.max??null),this.matchMedias[1]=window.matchMedia(this.queries[0].mediaQuery)):this.queries[1].enable=!1,e.laptop?(this.queries[2].enable=!0,this.queries[2].setRange(e.mobile.min==null?null:e.mobile.min,e.mobile.max??null),this.matchMedias[2]=window.matchMedia(this.queries[0].mediaQuery)):this.queries[2].enable=!1,e.desktop?(this.queries[3].enable=!0,this.queries[3].setRange(e.mobile.min==null?null:e.mobile.min,e.mobile.max??null),this.matchMedias[3]=window.matchMedia(this.queries[0].mediaQuery)):this.queries[3].enable=!1}this.updateElements()}onResize(){this.updateElements()}updateElements(){let e=this.matchMedias[0].matches&&this.queries[0].enable,r=this.matchMedias[1].matches&&this.queries[1].enable,i=this.matchMedias[2].matches&&this.queries[2].enable,o=this.matchMedias[3].matches&&this.queries[3].enable;document.querySelectorAll("[string-mobile], [string-tablet], [string-laptop], [string-desktop]").forEach(n=>{let a=!1;n.hasAttribute("string-mobile")&&e&&(a=!0,this.events.emit("screen:mobile",e)),n.hasAttribute("string-tablet")&&r&&(a=!0,this.events.emit("screen:tablet",r)),n.hasAttribute("string-laptop")&&i&&(a=!0,this.events.emit("screen:laptop",i)),n.hasAttribute("string-desktop")&&o&&(a=!0,this.events.emit("screen:desktop",o)),a?n.style.display=null:n.style.display="none"})}};var wt=class extends h{constructor(t){super(t),this.htmlKey="anchor",this.attributesToMap=[...this.attributesToMap,{key:"anchor",type:"tuple",fallback:this.settings.anchor,transform:e=>{let[r,i]=e,o=this.tools.originParser.process({value:r}),s=this.tools.originParser.process({value:i});return{x:o,y:s}}}]}onObjectConnected(t){super.onObjectConnected(t);let e=t.getProperty("anchor");e&&this.applyToElementAndConnects(t,r=>{r.style.transformOrigin=`${e.x} ${e.y}`})}};var Bt=.05,qt=.01,Ft=1,Nt=-1,$t=1,Ct=class extends h{constructor(e){super(e);this.previousLerp=0;this.displacement=0;this.acceleration=0;this.velocityMultiplier=.00125;this.isInitialScroll=!0;this.baseVelocityMultiplier=.00125;this.reducedVelocityMultiplier=this.baseVelocityMultiplier/20;this.negativeVelocityMultiplier=-1e-4;this.maxDisplacementValue=0;this.setupItem=e=>{let r=e.getProperty("glide")??0,i=-this.data.scroll.displacement*this.maxDisplacementValue*r;this.events.emit(`glide:${e.id}`,i);let o=`translate3d(0, ${i}px, 0)`;e.htmlElement.style.transform=o};this.onUpdateDesktopEvent=()=>{for(let e=0;e<this.objects.length;e++){let r=this.objects[e];this.setupItem(r)}};this.onUpdateMobileEvent=()=>{};this.onUpdateEvent=this.onUpdateDesktopEvent;this.htmlKey="glide",this.baseVelocityMultiplier=this.settings["glide-base-velocity"]??this.baseVelocityMultiplier,this.reducedVelocityMultiplier=this.settings["glide-reduce-velocity"]??this.reducedVelocityMultiplier,this.negativeVelocityMultiplier=this.settings["glide-negative-velocity"]??this.negativeVelocityMultiplier,this.attributesToMap=[...this.attributesToMap,{key:"glide",type:"number",fallback:this.settings.glide}]}calcExpanderFactor(e){let r=e?this.data.scroll.lerped<this.previousLerp:this.data.scroll.lerped>this.previousLerp;this.velocityMultiplier=r?this.isInitialScroll?this.baseVelocityMultiplier:this.reducedVelocityMultiplier:this.negativeVelocityMultiplier,r||(this.isInitialScroll=!1)}onStart(){this.maxDisplacementValue=this.data.viewport.windowHeight*.1}onResize(){window.innerWidth>1080?(this.maxDisplacementValue=this.data.viewport.windowHeight*.1,this.onUpdateEvent=this.onUpdateDesktopEvent):(this.onUpdateEvent=this.onUpdateMobileEvent,this.resetState(),this.objects.forEach(e=>{this.setupItem(e)}))}resetState(){this.displacement=0,this.acceleration=0,this.isInitialScroll=!0,this.velocityMultiplier=this.baseVelocityMultiplier}onScrollStart(){this.resetState()}onScrollStop(){this.resetState(),this.previousLerp=0;for(let e=0;e<this.objects.length;e++){let r=this.objects[e],i="translate3d(0, 0px, 0)";r.htmlElement.style.transform=i,r.htmlElement.style.setProperty("--glide",this.data.scroll.displacement.toString())}}onFrame(e){this.calcExpanderFactor(this.data.scroll.isScrollingDown===!1),this.acceleration=Math.min(Ft,this.acceleration+Bt),this.displacement=Math.max(qt,Math.min(Ft,this.displacement+this.velocityMultiplier)),this.data.scroll.displacement=Math.min($t,Math.max(Nt,this.data.scroll.lerped*this.displacement*this.acceleration)),this.objects.forEach(r=>{this.applyToElementAndConnects(r,i=>{i.style.setProperty("--glide",this.data.scroll.displacement.toString())})}),this.previousLerp=this.data.scroll.lerped,this.onUpdateEvent()}};var Tt=class extends h{constructor(t){super(t),this.htmlKey="lerp"}onScrollStop(){this.objects.forEach(t=>{this.setLerpValue(t,0)})}onFrame(t){let e=t.scroll.lerped;this.objects.forEach(r=>{this.setLerpValue(r,e)})}setLerpValue(t,e){this.events.emit(`lerp:${t.id}`,e),t.htmlElement.style.setProperty("--lerp",e.toString())}};var $=class extends h{constructor(t){super(t),this.htmlKey="progress",this.attributesToMap=[...this.attributesToMap,{key:"enter-el",type:"string",fallback:this.settings["enter-el"]},{key:"enter-vp",type:"string",fallback:this.settings["enter-vp"]},{key:"exit-el",type:"string",fallback:this.settings["exit-el"]},{key:"exit-vp",type:"string",fallback:this.settings["exit-vp"]},{key:"easing",type:"easing",fallback:this.settings.easing}]}initializeObject(t,e,r,i){super.initializeObject(t,e,r,i)}onScroll(t){super.onScroll(t),this.objects.forEach(e=>{this.setUpObject(e)})}onObjectConnected(t){super.onObjectConnected(t),t.setProperty("setUpObject",this.setUpObject.bind(this)),t.events.on("enter",t.getProperty("setUpObject"))}setUpObject(t){let e=t.getProperty("start-position"),r=t.getProperty("difference-position"),i=t.getProperty("key"),o=t.getProperty("easing")(Math.min(1,Math.max(0,(this.data.scroll.transformedCurrent-e)/r)));if(t.getProperty("progress")!==o){this.events.emit(`progress:${t.id}`,o),t.setProperty("progress",o);let s=o.toString();this.applyToElementAndConnects(t,n=>{n.style.setProperty(i,s)})}}calculatePositions(t,e){let r=t.getProperty("start"),i=t.getProperty("size"),o=t.getProperty("offset-bottom"),s=t.getProperty("offset-top"),n=t.getProperty("enter-el"),a=t.getProperty("enter-vp"),p=t.getProperty("exit-el"),d=t.getProperty("exit-vp"),m=0,l=0;n==="top"&&a==="top"||n==="left"&&a==="left"?m=r-o:n==="top"&&a==="bottom"||n==="left"&&a==="right"?m=r-e-o:n==="bottom"&&a==="top"||n==="right"&&a==="left"?m=r+i-o:(n==="bottom"&&a==="bottom"||n==="right"&&a==="right")&&(m=r-e+i-o),p==="top"&&d==="top"||p==="left"&&d==="left"?l=r+s:p==="top"&&d==="bottom"||p==="left"&&d==="right"?l=r-e+s:p==="bottom"&&d==="top"||p==="right"&&d==="left"?l=r+i+s:(p==="bottom"&&d==="bottom"||p==="right"&&d==="right")&&(l=r-e+i+s),t.setProperty("start-position",m-this.data.scroll.topPosition),t.setProperty("end-position",l),t.setProperty("difference-position",l-m)}};var Pt=class extends ${constructor(e){super(e);this.handleScrollDesktop=()=>{this.objects.forEach(e=>{let r=e.getProperty("progress")??0,i=e.getProperty("parallax")??0,o=e.getProperty("parallax-position-start")??0,s=e.getProperty("parallax-position-end")??1,n=this.data.viewport.windowHeight,a=i*n*o+r*i*n*s;this.events.emit(`parallax:${e.id}`,a);let p=`translate3d(0, ${a}px, 0)`;this.applyToElementAndConnects(e,d=>{d.style.transform=p})})};this.handleScrollMobile=()=>{};this.scrollHandler=this.handleScrollDesktop;this.htmlKey="parallax",this.attributesToMap=[...this.attributesToMap,{key:"parallax",type:"number",fallback:this.settings.parallax},{key:"parallax-bias",type:"number",fallback:this.settings["parallax-bias"]}]}initializeObject(e,r,i,o){super.initializeObject(e,r,i,o);let s=r.getProperty("parallax-bias")??0,n=r.getProperty("parallax")??.2;r.setProperty("parallax-position-start",-.5+.5*s),r.setProperty("parallax-position-end",.5+.5*(1-s));let a=this.data.viewport.windowHeight;r.setProperty("offset-top",n*a),r.setProperty("offset-bottom",n*a)}onScroll(e){super.onScroll(e),this.scrollHandler()}onResize(){let e=window.innerWidth>1080;this.scrollHandler=e?this.handleScrollDesktop:this.handleScrollMobile,e||this.handleScrollDesktop()}};var mt=class{constructor(t,e,r){this.isDragging=!1;this.startY=0;this.startScrollPosition=0;this.data=t,this.scrollbar=e,this.thumb=r}onResize(){let t=this.data.viewport.contentWidth,e=this.data.viewport.windowWidth,r=e/t*e;this.thumb.style.setProperty("--size",r+"px"),t<=e?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){let t=this.data.viewport.contentWidth,e=this.data.viewport.windowWidth;this.thumb.style.setProperty("--position",`${this.data.scroll.current/t*e+"px"}`)}mouseDownEvent(t){this.startY=t.clientY,this.startScrollPosition=this.data.scroll.current}mouseMoveEvent(t){let e=t.clientY-this.startY,r=this.startScrollPosition+e/this.data.viewport.windowWidth*this.data.viewport.contentWidth;this.data.scroll.current=r,this.data.scroll.target=r,window.scrollTo(0,r),this.updateThumb()}};var ut=class{constructor(t,e,r){this.isDragging=!1;this.startCoordinate=0;this.startScrollPosition=0;this.data=t,this.scrollbar=e,this.thumb=r}onResize(){let t=this.data.viewport.contentHeight,e=this.data.viewport.windowHeight,r=e/t*e;this.thumb.style.setProperty("--height",r+"px"),t<=e?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){let t=this.data.viewport.contentHeight,e=this.data.viewport.windowHeight;this.thumb.style.setProperty("--position",`${this.data.scroll.current/t*e+"px"}`)}mouseDownEvent(t){this.startCoordinate=t.clientY,this.startScrollPosition=this.data.scroll.current}mouseMoveEvent(t){let e=t.clientY-this.startCoordinate,r=this.startScrollPosition+e/this.data.viewport.windowHeight*this.data.viewport.contentHeight,i=this.data.scroll.bottomPosition,o=Math.max(0,Math.min(r,i));this.data.scroll.current=o,this.data.scroll.target=o,window.scrollTo(0,o),this.updateThumb()}};var It=class extends h{constructor(e){super(e);this.isDragging=!1;this.scrollMode="smooth";this.mouseUpEventBind=this.mouseUpEvent.bind(this),this.mouseDownEventBind=this.mouseDownEvent.bind(this),this.mouseMoveEventBind=this.mouseMoveEvent.bind(this)}destructor(){document.removeEventListener("mouseup",this.mouseUpEventBind),this.thumb.removeEventListener("mousedown",this.mouseDownEventBind),document.removeEventListener("mousemove",this.mouseMoveEventBind)}onInit(){this.createScrollbar(),this.updateThumb(),this.addCustomStyles(),document.addEventListener("mouseup",this.mouseUpEventBind),this.thumb.addEventListener("mousedown",this.mouseDownEventBind),document.addEventListener("mousemove",this.mouseMoveEventBind),document.documentElement.classList.add("-no-scrollbar")}onScroll(e){this.updateThumb(),this.showScrollbar(),this.hideScrollbar()}onResize(){this.scrollbarState.onResize()}addCustomStyles(){let e=document.createElement("style");e.textContent=`
2
2
  ::-webkit-scrollbar {
3
3
  display: none;
4
4
  width: 0;
@@ -20,5 +20,5 @@ var U=class{constructor(t=.1,e){this.SETTLE_THRESHOLD=.1;this.smoothingFactor=t,
20
20
  div[data-dir][data-val]::before {
21
21
  content: attr(data-dir) ' Top: ' attr(data-val) 'px';
22
22
  }
23
- `,document.head.appendChild(e),this.displayElement=t}};function Wt(c,t){let e=null;return function(...r){let i=this;e&&clearTimeout(e),e=setTimeout(()=>{c.apply(i,r),e=null},t)}}var ht=class{constructor(){this.fps=0;this.isAnimationStarted=!1;this.fpsInterval=0;this.then=0;this.requestAnimationId=0;this.onFrameCallback=t=>{};this.animate=()=>{};this.onVisibilityChangeBind=this.onVisibilityChange.bind(this)}onVisibilityChange(){document.hidden?(this.stop(),this.isAnimationStarted=!1):this.start(this.fps)}start(t){this.fps=t,!this.isAnimationStarted&&(this.fpsInterval=1e3/t,this.then=performance.now(),this.isAnimationStarted=!0,t===0?this.animate=()=>{let e=performance.now();this.requestAnimationId=requestAnimationFrame(()=>this.animate()),this.onFrameCallback(e)}:this.animate=()=>{let e=performance.now(),r=e-this.then;r>this.fpsInterval&&(this.then=e-r%this.fpsInterval,this.onFrameCallback(e)),this.requestAnimationId=requestAnimationFrame(()=>this.animate())},this.animate())}stop(){this.isAnimationStarted&&(cancelAnimationFrame(this.requestAnimationId),this.requestAnimationId=0,this.isAnimationStarted=!1)}setOnFrame(t){this.onFrameCallback=t}destructor(){this.stop()}};var Ht=class extends h{constructor(t){super(t),this.htmlKey="autoplay",this.attributesToMap=[...this.attributesToMap,{key:"src",type:"string",fallback:""}]}onObjectConnected(t){t.setProperty("onEnterEvent",this.onEnterObject.bind(this)),t.events.on("enter",t.getProperty("onEnterEvent")),t.setProperty("onLeaveEvent",this.onLeaveObject.bind(this)),t.events.on("leave",t.getProperty("onLeaveEvent"));let e=t.htmlElement,r=this.tools.domAttribute.process({element:e,key:"string-started",fallback:null})!==null;e.tagName.toLowerCase()==="video"&&!r&&(e.setAttribute("string-started",""),e.muted=!0,e.setAttribute("muted","muted"),e.setAttribute("playsinline",""),e.setAttribute("loop",""),e.setAttribute("autoplay",""),e.src=t.getProperty("src"),e.load(),e.addEventListener("canplay",()=>{}))}onEnterObject(t){let e=t.htmlElement;this.tryPlay(e)}onLeaveObject(t){t.htmlElement.pause()}tryPlay(t){t.play().catch(e=>console.warn("[StringVideoAutoplay] Autoplay failed:",e))}};var Vt=class c{constructor(){this.prevWidth=0;this.prevHeight=0;this.loop=new ht;this.debouncedResize=Wt(this.onResize,30);this.root=document.body,this.window=window,this.tools=new pt,this.data=new ot,this.eventManager=new C,this.moduleManager=new X(this.data),this.objectManager=new _(this.data,this.moduleManager,this.eventManager),this.context={events:this.eventManager,data:this.data,tools:this.tools,settings:{}},this.cursorController=new U(1,this.context),this.scrollManager=new J(this.context),this.setupSettings({"offset-top":"0%","offset-bottom":"0%",key:"--progress","inview-top":"0%","inview-bottom":"0%","enter-el":"top","enter-vp":"bottom","exit-el":"bottom","exit-vp":"top","parallax-bias":"0.0",parallax:"0.2",lerp:"0.2",radius:"150",strength:"0.3",glide:"1",anchor:"center center",timeout:900,alignment:"center","target-disable":"false","target-style-disable":"false","target-class":"",active:"false",fixed:"false",repeat:"false","self-disable":"false",abs:"false",easing:"cubic-bezier(0.25, 0.25, 0.25, 0.25)","glide-base-velocity":.00125,"glide-reduce-velocity":625e-7,"glide-negative-velocity":-1e-4}),this.onWheelBind=this.onWheelEvent.bind(this),this.onScrollBind=this.onScrollEvent.bind(this),this.onResizeBind=this.onResize.bind(this),this.onMouseMoveBind=this.onMouseMoveEvent.bind(this),this.onScrollStartBind=this.onScrollStart.bind(this),this.onScrollStopBind=this.onScrollStop.bind(this),this.onDirectionChangeBind=this.onDirectionChange.bind(this),this.scrollManager.bindEvents({onScrollStart:this.onScrollStartBind,onScrollStop:this.onScrollStopBind,onDirectionChange:this.onDirectionChangeBind}),this.loop.setOnFrame(t=>{this.data.time.delta=t-this.data.time.now,this.data.time.previous=this.data.time.now,this.data.time.now=t,this.data.time.elapsed+=this.data.time.delta,this.onUpdateEvent()}),this.on("image:load:all",()=>{this.onResize()}),this.scrollContainer=window}set scrollPosition(t){this.data.scroll.current=t,this.data.scroll.target=t,this.data.scroll.delta=0,this.data.scroll.lerped=0,this.scrollManager.updatePosition()}set scrollContainer(t){t instanceof Window?(this.data.scroll.container=document.body,this.data.scroll.elementContainer=document.documentElement,this.data.scroll.scrollContainer=t):t instanceof HTMLElement?(this.data.scroll.container=t,this.data.scroll.elementContainer=t,this.data.scroll.scrollContainer=t):(this.data.scroll.container=document.body,this.data.scroll.elementContainer=document.documentElement,this.data.scroll.scrollContainer=t),this.debouncedResize()}get speed(){return this.data.scroll.current}set speed(t){this.data.scroll.speed=t}set speedAccelerate(t){this.data.scroll.speedAccelerate=.1+(.5-.1)*t}set scrollDesktopMode(t){this.scrollManager.setDesktopMode(t)}set scrollMobileMode(t){this.scrollManager.setMobileMode(t)}static getInstance(){return c.i||(c.i=new c),c.i}reuse(t){return this.moduleManager.find(t)}use(t,e=null){let r={...this.context.settings,...e},i=new t({events:this.eventManager,data:this.data,tools:this.tools,settings:r});this.moduleManager.register(i)}on(t,e,r=""){this.eventManager.on(t,e,r)}off(t,e,r=""){this.eventManager.off(t,e,r)}start(t){this.data.scroll.scrollContainer?.addEventListener("scroll",this.onScrollBind),this.data.scroll.container?.addEventListener("wheel",this.onWheelBind,{passive:!1}),window.addEventListener("resize",this.onResizeBind),this.root.addEventListener("mousemove",this.onMouseMoveBind),new ResizeObserver(()=>{this.debouncedResize()}).observe(this.context.data.scroll.container);let r=new MutationObserver((n,a)=>{for(let p of n)p.type==="attributes"&&(p.attributeName==="style"||p.attributeName==="class")&&this.onResize()}),i={attributes:!0,attributeFilter:["style","class"]};r.observe(this.context.data.scroll.container,i),this.use(dt);let o=window.getComputedStyle(document.documentElement).fontSize,s=parseFloat(o);this.context.data.viewport.baseRem=s,document.documentElement.classList.add("-string"),this.moduleManager.onInit(),this.onResize(),this.initObjects(),this.objectManager.observeDOM(),this.loop.start(t),this.eventManager.emit("start",null)}initObjects(){document.querySelectorAll("[string],[data-string]").forEach(t=>{this.objectManager.add(t)}),document.querySelectorAll("[string-copy-from],[data-string-copy-from]").forEach(t=>{let e=this.tools.domAttribute.process({element:t,key:"copy-from",fallback:""});e&&e.length>0&&this.objectManager.enqueueConnection(e,t)}),this.moduleManager.onResize(),this.moduleManager.onScroll(),this.moduleManager.onFrame()}setupSettings(t){this.context.settings={...this.context.settings,...t},this.onSettingsChange()}onMouseMoveEvent(t){this.cursorController.onMouseMove(t),this.moduleManager.onMouseMove(t)}onWheelEvent(t){this.scrollManager.get().onWheel(t),this.moduleManager.onWheel(t)}onScrollStart(){this.moduleManager.onScrollStart()}onScrollStop(){this.moduleManager.onScrollStop()}onDirectionChange(){this.moduleManager.onDirectionChange()}onSettingsChange(){this.cursorController.onSettingsChange(),this.objectManager.onSettingsChange(),this.moduleManager.onSettingsChange()}onScrollEvent(t){return t.preventDefault(),this.scrollManager.get().onScroll(t),this.moduleManager.onScroll(),this.eventManager.emit("lerp",this.data.scroll.lerped),this.eventManager.emit("scroll",this.data.scroll.current),!1}onUpdateEvent(){this.cursorController.onFrame(),this.scrollManager.get().onFrame(),this.moduleManager.onFrame(),this.eventManager.emit("update",null)}onResize(){let t=this.data.scroll.container,e=this.context.data.scroll,r=0,i=0;var o,s=0;let n=t.getBoundingClientRect();t.tagName=="BODY"?(r=window.innerWidth,i=window.innerHeight):(r=n.width,i=n.height),s=n.top,o=e.container.scrollHeight;let a=this.tools.transformScaleParser.process({value:window.getComputedStyle(t).transform});this.context.data.viewport.transformScale=a;let p=r>1080,d=this.prevWidth!==r,m=this.prevHeight!==i,l=this.context.data.viewport.contentHeight!==o,g=d||p&&m||l;this.context.data.scroll.topPosition=s,this.context.data.viewport.contentWidth=r,this.context.data.viewport.contentHeight=o,this.prevWidth=r,this.prevHeight=i,this.context.data.viewport.windowWidth=r,this.context.data.viewport.windowHeight=i;let f=window.getComputedStyle(document.documentElement).fontSize,u=parseFloat(f);this.context.data.viewport.baseRem=u*a,e.bottomPosition=this.context.data.viewport.contentHeight-i,g&&(this.context.data.scroll.current=this.context.data.scroll.container.scrollTop,this.context.data.scroll.target=this.context.data.scroll.container.scrollTop,this.context.data.scroll.transformedCurrent=this.context.data.scroll.current*this.context.data.viewport.transformScale,this.scrollManager.updateResponsiveMode(),this.moduleManager.onResize(),this.onSettingsChange(),this.moduleManager.onScroll(),this.moduleManager.onFrame())}destroy(){this.data.scroll.scrollContainer?.removeEventListener("scroll",this.onScrollBind),this.data.scroll.container?.removeEventListener("wheel",this.onScrollBind),this.window.removeEventListener("resize",this.onResizeBind),this.root.removeEventListener("mousemove",this.onMouseMoveBind),this.loop.stop(),this.moduleManager.destroy(),this.eventManager.clearAll()}};export{Ct as StringAnchor,yt as StringCursor,ot as StringData,Ot as StringDelayLerpTracker,Dt as StringFPSTracker,wt as StringGlide,xt as StringLazy,Tt as StringLerp,kt as StringLerpTracker,Mt as StringLoading,St as StringMagnetic,h as StringModule,I as StringObject,It as StringParallax,Rt as StringPositionTracker,$ as StringProgress,Et as StringResponsive,Pt as StringScrollbar,Lt as StringSplit,Vt as StringTune,Ht as StringVideoAutoplay,Vt as default};
23
+ `,document.head.appendChild(e),this.displayElement=t}};function Wt(c,t){let e=null;return function(...r){let i=this;e&&clearTimeout(e),e=setTimeout(()=>{c.apply(i,r),e=null},t)}}var ht=class{constructor(){this.fps=0;this.isAnimationStarted=!1;this.fpsInterval=0;this.then=0;this.requestAnimationId=0;this.onFrameCallback=t=>{};this.animate=()=>{};this.onVisibilityChangeBind=this.onVisibilityChange.bind(this)}onVisibilityChange(){document.hidden?(this.stop(),this.isAnimationStarted=!1):this.start(this.fps)}start(t){this.fps=t,!this.isAnimationStarted&&(this.fpsInterval=1e3/t,this.then=performance.now(),this.isAnimationStarted=!0,t===0?this.animate=()=>{let e=performance.now();this.requestAnimationId=requestAnimationFrame(()=>this.animate()),this.onFrameCallback(e)}:this.animate=()=>{let e=performance.now(),r=e-this.then;r>this.fpsInterval&&(this.then=e-r%this.fpsInterval,this.onFrameCallback(e)),this.requestAnimationId=requestAnimationFrame(()=>this.animate())},this.animate())}stop(){this.isAnimationStarted&&(cancelAnimationFrame(this.requestAnimationId),this.requestAnimationId=0,this.isAnimationStarted=!1)}setOnFrame(t){this.onFrameCallback=t}destructor(){this.stop()}};var At=class extends h{constructor(t){super(t),this.htmlKey="autoplay",this.attributesToMap=[...this.attributesToMap,{key:"src",type:"string",fallback:""}]}onObjectConnected(t){t.setProperty("onEnterEvent",this.onEnterObject.bind(this)),t.events.on("enter",t.getProperty("onEnterEvent")),t.setProperty("onLeaveEvent",this.onLeaveObject.bind(this)),t.events.on("leave",t.getProperty("onLeaveEvent"));let e=t.htmlElement,r=this.tools.domAttribute.process({element:e,key:"string-started",fallback:null})!==null;e.tagName.toLowerCase()==="video"&&!r&&(e.setAttribute("string-started",""),e.muted=!0,e.setAttribute("muted","muted"),e.setAttribute("playsinline",""),e.setAttribute("loop",""),e.setAttribute("autoplay",""),e.src=t.getProperty("src"),e.load(),e.addEventListener("canplay",()=>{}))}onEnterObject(t){let e=t.htmlElement;this.tryPlay(e)}onLeaveObject(t){t.htmlElement.pause()}tryPlay(t){t.play().catch(e=>console.warn("[StringVideoAutoplay] Autoplay failed:",e))}};var Vt=class c{constructor(){this.prevWidth=0;this.prevHeight=0;this.loop=new ht;this.debouncedResize=Wt(this.onResize,30);this.root=document.body,this.window=window,this.tools=new pt,this.data=new ot,this.eventManager=new w,this.moduleManager=new X(this.data),this.objectManager=new _(this.data,this.moduleManager,this.eventManager),this.context={events:this.eventManager,data:this.data,tools:this.tools,settings:{}},this.cursorController=new U(1,this.context),this.scrollManager=new J(this.context),this.setupSettings({"offset-top":"0%","offset-bottom":"0%",key:"--progress","inview-top":"0%","inview-bottom":"0%","enter-el":"top","enter-vp":"bottom","exit-el":"bottom","exit-vp":"top","parallax-bias":"0.0",parallax:"0.2",lerp:"0.2",radius:"150",strength:"0.3",glide:"1",anchor:"center center",timeout:900,alignment:"center","target-disable":"false","target-style-disable":"false","target-class":"",active:"false",fixed:"false",repeat:"false","self-disable":"false",abs:"false",easing:"cubic-bezier(0.25, 0.25, 0.25, 0.25)","glide-base-velocity":.00125,"glide-reduce-velocity":625e-7,"glide-negative-velocity":-1e-4}),this.onWheelBind=this.onWheelEvent.bind(this),this.onScrollBind=this.onScrollEvent.bind(this),this.onResizeBind=this.onResize.bind(this),this.onMouseMoveBind=this.onMouseMoveEvent.bind(this),this.onScrollStartBind=this.onScrollStart.bind(this),this.onScrollStopBind=this.onScrollStop.bind(this),this.onDirectionChangeBind=this.onDirectionChange.bind(this),this.scrollManager.bindEvents({onScrollStart:this.onScrollStartBind,onScrollStop:this.onScrollStopBind,onDirectionChange:this.onDirectionChangeBind}),this.loop.setOnFrame(t=>{this.data.time.delta=t-this.data.time.now,this.data.time.previous=this.data.time.now,this.data.time.now=t,this.data.time.elapsed+=this.data.time.delta,this.onUpdateEvent()}),this.on("image:load:all",()=>{this.onResize()}),this.scrollContainer=window}set scrollPosition(t){this.data.scroll.current=t,this.data.scroll.target=t,this.data.scroll.delta=0,this.data.scroll.lerped=0,this.scrollManager.updatePosition()}set scrollContainer(t){t instanceof Window?(this.data.scroll.container=document.body,this.data.scroll.elementContainer=document.documentElement,this.data.scroll.scrollContainer=t):t instanceof HTMLElement?(this.data.scroll.container=t,this.data.scroll.elementContainer=t,this.data.scroll.scrollContainer=t):(this.data.scroll.container=document.body,this.data.scroll.elementContainer=document.documentElement,this.data.scroll.scrollContainer=t),this.debouncedResize()}get speed(){return this.data.scroll.current}set speed(t){this.data.scroll.speed=t}set speedAccelerate(t){this.data.scroll.speedAccelerate=.1+(.5-.1)*t}set scrollDesktopMode(t){this.scrollManager.setDesktopMode(t)}set scrollMobileMode(t){this.scrollManager.setMobileMode(t)}static getInstance(){return c.i||(c.i=new c),c.i}reuse(t){return this.moduleManager.find(t)}use(t,e=null){let r={...this.context.settings,...e},i=new t({events:this.eventManager,data:this.data,tools:this.tools,settings:r});this.moduleManager.register(i)}on(t,e,r=""){this.eventManager.on(t,e,r)}off(t,e,r=""){this.eventManager.off(t,e,r)}start(t){this.data.scroll.scrollContainer?.addEventListener("scroll",this.onScrollBind),this.data.scroll.container?.addEventListener("wheel",this.onWheelBind,{passive:!1}),window.addEventListener("resize",this.onResizeBind),this.root.addEventListener("mousemove",this.onMouseMoveBind),new ResizeObserver(()=>{this.debouncedResize()}).observe(this.context.data.scroll.container);let r=new MutationObserver((n,a)=>{for(let p of n)p.type==="attributes"&&(p.attributeName==="style"||p.attributeName==="class")&&this.onResize()}),i={attributes:!0,attributeFilter:["style","class"]};r.observe(this.context.data.scroll.container,i),this.use(dt);let o=window.getComputedStyle(document.documentElement).fontSize,s=parseFloat(o);this.context.data.viewport.baseRem=s,document.documentElement.classList.add("-string"),this.moduleManager.onInit(),this.onResize(),this.initObjects(),this.objectManager.observeDOM(),this.loop.start(t),this.eventManager.emit("start",null)}initObjects(){document.querySelectorAll("[string],[data-string]").forEach(t=>{this.objectManager.add(t)}),document.querySelectorAll("[string-copy-from],[data-string-copy-from]").forEach(t=>{let e=this.tools.domAttribute.process({element:t,key:"copy-from",fallback:""});e&&e.length>0&&this.objectManager.enqueueConnection(e,t)}),this.moduleManager.onResize(),this.moduleManager.onScroll(),this.moduleManager.onFrame()}setupSettings(t){this.context.settings={...this.context.settings,...t},this.onSettingsChange()}onMouseMoveEvent(t){this.cursorController.onMouseMove(t),this.moduleManager.onMouseMove(t)}onWheelEvent(t){this.scrollManager.get().onWheel(t),this.moduleManager.onWheel(t)}onScrollStart(){this.moduleManager.onScrollStart()}onScrollStop(){this.moduleManager.onScrollStop()}onDirectionChange(){this.moduleManager.onDirectionChange()}onSettingsChange(){this.cursorController.onSettingsChange(),this.objectManager.onSettingsChange(),this.moduleManager.onSettingsChange()}onScrollEvent(t){return t.preventDefault(),this.scrollManager.get().onScroll(t),this.moduleManager.onScroll(),this.eventManager.emit("lerp",this.data.scroll.lerped),this.eventManager.emit("scroll",this.data.scroll.current),!1}onUpdateEvent(){this.cursorController.onFrame(),this.scrollManager.get().onFrame(),this.moduleManager.onFrame(),this.eventManager.emit("update",null)}onResize(){let t=this.data.scroll.container,e=this.context.data.scroll,r=0,i=0;var o,s=0;let n=t.getBoundingClientRect();t.tagName=="BODY"?(r=window.innerWidth,i=window.innerHeight):(r=n.width,i=n.height),s=n.top,o=e.container.scrollHeight;let a=this.tools.transformScaleParser.process({value:window.getComputedStyle(t).transform});this.context.data.viewport.transformScale=a;let p=r>1080,d=this.prevWidth!==r,m=this.prevHeight!==i,l=this.context.data.viewport.contentHeight!==o,g=d||p&&m||l;this.context.data.scroll.topPosition=s,this.context.data.viewport.contentWidth=r,this.context.data.viewport.contentHeight=o,this.prevWidth=r,this.prevHeight=i,this.context.data.viewport.windowWidth=r,this.context.data.viewport.windowHeight=i;let b=window.getComputedStyle(document.documentElement).fontSize,u=parseFloat(b);this.context.data.viewport.baseRem=u*a,e.bottomPosition=this.context.data.viewport.contentHeight-i,g&&(this.context.data.scroll.current=this.context.data.scroll.container.scrollTop,this.context.data.scroll.target=this.context.data.scroll.container.scrollTop,this.context.data.scroll.transformedCurrent=this.context.data.scroll.current*this.context.data.viewport.transformScale,this.scrollManager.updateResponsiveMode(),this.moduleManager.onResize(),this.onSettingsChange(),this.moduleManager.onScroll(),this.moduleManager.onFrame())}destroy(){this.data.scroll.scrollContainer?.removeEventListener("scroll",this.onScrollBind),this.data.scroll.container?.removeEventListener("wheel",this.onScrollBind),this.window.removeEventListener("resize",this.onResizeBind),this.root.removeEventListener("mousemove",this.onMouseMoveBind),this.loop.stop(),this.moduleManager.destroy(),this.eventManager.clearAll()}};export{wt as StringAnchor,yt as StringCursor,ot as StringData,Ot as StringDelayLerpTracker,Dt as StringFPSTracker,Ct as StringGlide,xt as StringLazy,Tt as StringLerp,kt as StringLerpTracker,Mt as StringLoading,St as StringMagnetic,h as StringModule,P as StringObject,Pt as StringParallax,Rt as StringPositionTracker,$ as StringProgress,Et as StringResponsive,It as StringScrollbar,Lt as StringSplit,Vt as StringTune,At as StringVideoAutoplay,Vt as default};
24
24
  //# sourceMappingURL=index.mjs.map