@fiddle-digital/string-tune 1.1.41-fix.0 → 1.1.41-fix.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.cjs CHANGED
@@ -20,5 +20,5 @@
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(t),this.displayElement=e}};function He(c,e){let t=null;return function(...r){let i=this;t&&clearTimeout(t),t=setTimeout(()=>{c.apply(i,r),t=null},e)}}var ie=class{constructor(){this.fps=0;this.isAnimationStarted=!1;this.fpsInterval=0;this.then=0;this.requestAnimationId=0;this.onFrameCallback=e=>{};this.animate=()=>{};this.onVisibilityChangeBind=this.onVisibilityChange.bind(this)}onVisibilityChange(){document.hidden?(this.stop(),this.isAnimationStarted=!1):this.start(this.fps)}start(e){this.fps=e,!this.isAnimationStarted&&(this.fpsInterval=1e3/e,this.then=performance.now(),this.isAnimationStarted=!0,e===0?this.animate=()=>{let t=performance.now();this.requestAnimationId=requestAnimationFrame(()=>this.animate()),this.onFrameCallback(t)}:this.animate=()=>{let t=performance.now(),r=t-this.then;r>this.fpsInterval&&(this.then=t-r%this.fpsInterval,this.onFrameCallback(t)),this.requestAnimationId=requestAnimationFrame(()=>this.animate())},this.animate())}stop(){this.isAnimationStarted&&(cancelAnimationFrame(this.requestAnimationId),this.requestAnimationId=0,this.isAnimationStarted=!1)}setOnFrame(e){this.onFrameCallback=e}destructor(){this.stop()}};var ne=class extends x{constructor(e){super(e),this.htmlKey="autoplay",this.attributesToMap=[...this.attributesToMap,{key:"src",type:"string",fallback:""}]}onObjectConnected(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"));let t=e.htmlElement,r=this.tools.domAttribute.process({element:t,key:"string-started",fallback:null})!==null;t.tagName.toLowerCase()==="video"&&!r&&(t.setAttribute("string-started",""),t.muted=!0,t.setAttribute("muted","muted"),t.setAttribute("playsinline",""),t.setAttribute("loop",""),t.setAttribute("autoplay",""),t.src=e.getProperty("src"),t.load(),t.addEventListener("canplay",()=>{}))}onEnterObject(e){let t=e.htmlElement;this.tryPlay(t)}onLeaveObject(e){e.htmlElement.pause()}tryPlay(e){e.play().catch(t=>console.warn("[StringVideoAutoplay] Autoplay failed:",t))}};var ye=(r=>(r.ACTIVE="-active",r.HIDE="-hide",r.DISABLE="-disable",r))(ye||{});var se=class extends x{constructor(t){super(t);this.activeStepForSlides=new Map;this.hideStepForSlides=new Map;this.htmlKey="sequence",this.attributesToMap=[...this.attributesToMap,{key:"sequence",type:"string",fallback:"string[0]"}]}onInit(){super.onInit(),this.events.on("sequence",({slider:t,step:r})=>{this.objectsOnPage.forEach(n=>{let o=n.getProperty("sequence");o==`${t}[${this.hideStepForSlides.get(t)}]`&&o!=`${t}[${r}]`&&this.setSequenceState(n,"-disable"),o==`${t}[${this.activeStepForSlides.get(t)}]`&&this.setSequenceState(n,"-hide"),o==`${t}[${r}]`&&this.setSequenceState(n,"-active")});let i=this.activeStepForSlides.get(t);i!=null&&this.hideStepForSlides.set(t,i),this.activeStepForSlides.set(t,r)})}onObjectConnected(t){super.onObjectConnected(t),this.setSequenceState(t,"-disable")}setSequenceState(t,r){requestAnimationFrame(()=>{t.htmlElement.classList.remove(...Object.values(ye)),t.htmlElement.classList.add(r)})}};var N=class N extends x{constructor(e){super(e),this.htmlKey="form"}initializeObject(e,t,r,i){super.initializeObject(e,t,r,i);let n=t.getProperty("form-events")??[];n.forEach(u=>{u.eventElement.removeEventListener(u.eventType,u.eventCallback)}),n.length=0,t.setProperty("form-events",n),super.onObjectConnected(t);let o=t.htmlElement,s=[],a={};this.getInteractiveFields(o).forEach((u,d)=>this.registerField(u,o,s,a,n,d));let l=u=>{u.preventDefault();let d=!0,p={},m=new Set;for(let g of s){let h=g.field;if(!h.isConnected||!this.shouldValidateField(h))continue;if(this.isRadioField(h)){if(m.has(g.key))continue;m.add(g.key)}let{key:v,rules:b,needsContext:f}=g,S=this.getFieldValue(h);p[v]=S,a[v]=S;let{valid:y,errors:M}=this.tools.validation.process({rules:b,value:S,context:this.buildContext(f,v,a)});this.applyValidationState(o,h,v,y,M,"submit"),y||(d=!1)}if(d)this.events.emit(`form:submit:${t.id}`,p);else{let g=new Set,h=s.find(v=>{let b=v.field;if(!b.isConnected||!this.shouldValidateField(b))return!1;if(this.isRadioField(b)){if(g.has(v.key))return!1;g.add(v.key)}let{key:f,rules:S,needsContext:y}=v,M=this.getFieldValue(b);a[f]=M;let{valid:w}=this.tools.validation.process({rules:S,value:M,context:this.buildContext(y,f,a)});return!w});h?.field&&typeof h.field.focus=="function"&&h.field.focus(),this.events.emit(`form:invalid:${t.id}`)}};o.addEventListener("submit",l),n.push({eventElement:o,eventType:"submit",eventCallback:l}),t.setProperty("form-field-entries",s),t.setProperty("form-field-values",a)}onObjectConnected(e){}onDOMMutate(e,t){this.objects.length!==0&&(e.length>0&&this.handleMutationAdditions(e),t.length>0&&this.handleMutationRemovals(t))}applyValidationState(e,t,r,i,n,o){let s=e.querySelector(`[string-input="error[${r}]"]`),a=e.querySelector(`[string-input="group[${r}]"]`);s&&(s.innerHTML="",n.forEach(u=>{let d=document.createElement("span");d.textContent=u,s.appendChild(d)})),o==="live"?(t.classList.toggle("-invalid",!i),t.classList.remove("-error")):(t.classList.remove("-invalid"),t.classList.toggle("-error",!i)),t.classList.toggle("-valid",i),a&&(o==="live"?(a.classList.toggle("-invalid",!i),a.classList.remove("-error")):(a.classList.remove("-invalid"),a.classList.toggle("-error",!i)),a.classList.toggle("-valid",i));let l=i?"valid":o==="live"?"invalid":"error";this.events.emit(`form:field:${l}:${r}`,{key:r,field:t,errors:n,phase:o,valid:i})}getInteractiveFields(e){return Array.from(e.querySelectorAll("[string-input]")).filter(t=>!this.isServiceFieldAttribute(t.getAttribute("string-input")||"")).filter(t=>this.isFormFieldElement(t)).map(t=>t)}getFieldRules(e){let t=this.tools.domAttribute.process({element:e,key:"input"})??"";return this.tools.ruleParser.process({value:t})}registerField(e,t,r,i,n,o){if(!this.isFormFieldElement(e)||e.closest("form")!==t||r.some(h=>h.field===e))return;let s=this.registerFieldIndex(e,o??r.length),a=this.getInputKey(e,s),l=this.getFieldRules(e),u=this.supportsBeforeInputValidation(l),d=this.requiresContext(l),p=this.getInputEventType(e),m={field:e,key:a,rules:l,supportsRealtime:u,needsContext:d,inputEventType:p,inputHandler:()=>{}},g=h=>{let v=h.currentTarget||h.target;if(!v||!v.isConnected||!this.shouldValidateField(v))return;let b=this.getFieldValue(v);i[m.key]=b;let f=this.buildContext(m.needsContext,m.key,i),{valid:S,errors:y}=this.tools.validation.process({rules:m.rules,value:b,context:f});this.applyValidationState(t,v,m.key,S,y,"live")};if(m.inputHandler=g,e.addEventListener(p,g),n.push({eventElement:e,eventType:p,eventCallback:g}),u&&(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)){let h=v=>{let b=v;if(b.isComposing||b.inputType?.startsWith("insertComposition"))return;let f=v.currentTarget||v.target;if(!f||!(f instanceof HTMLInputElement||f instanceof HTMLTextAreaElement)||!f.isConnected)return;let S=f.selectionStart??0,y=f.selectionEnd??0,M=f.value;switch(b.inputType){case"deleteContentBackward":M=S===y&&S>0?f.value.slice(0,S-1)+f.value.slice(y):f.value.slice(0,S)+f.value.slice(y);break;case"deleteContentForward":M=S===y&&S<f.value.length?f.value.slice(0,S)+f.value.slice(S+1):f.value.slice(0,S)+f.value.slice(y);break;case"insertFromPaste":case"insertFromDrop":case"insertReplacementText":M=f.value.slice(0,S)+(b.data||"")+f.value.slice(y);break;default:typeof b.data=="string"&&(M=f.value.slice(0,S)+b.data+f.value.slice(y))}let{errors:w}=this.tools.validation.process({rules:m.rules,value:M,type:"beforeinput",context:this.buildContext(m.needsContext,m.key,i,{applied:!0,value:M})});w.length>0&&v.cancelable&&v.preventDefault()};m.beforeInputHandler=h,e.addEventListener("beforeinput",h),n.push({eventElement:e,eventType:"beforeinput",eventCallback:h})}e.classList.add("-inited"),r.push(m),i[a]=this.getFieldValue(e)}unregisterField(e,t,r,i){let n=t.findIndex(s=>s.field===e);if(n===-1)return;let o=t[n];o.inputHandler&&e.removeEventListener(o.inputEventType,o.inputHandler),o.beforeInputHandler&&e.removeEventListener("beforeinput",o.beforeInputHandler),delete r[o.key],t.splice(n,1);for(let s=i.length-1;s>=0;s--){let a=i[s];a.eventElement===e&&(a.eventCallback===o.inputHandler||o.beforeInputHandler&&a.eventCallback===o.beforeInputHandler)&&i.splice(s,1)}e.classList.remove("-inited")}collectInteractiveFieldsFromNode(e){let t=[];return e instanceof Element?(e.hasAttribute("string-input")&&t.push(e),t.push(...Array.from(e.querySelectorAll("[string-input]")))):e instanceof DocumentFragment&&t.push(...Array.from(e.querySelectorAll("[string-input]"))),t.filter(r=>!this.isServiceFieldAttribute(r.getAttribute("string-input")||"")).filter(r=>this.isFormFieldElement(r))}isRadioField(e){return e instanceof HTMLInputElement&&e.type==="radio"}handleMutationAdditions(e){e.forEach(t=>{this.collectInteractiveFieldsFromNode(t).forEach(i=>{let n=this.getFormStateByContainment(i);n&&this.registerField(i,n.form,n.entries,n.values,n.events)})})}handleMutationRemovals(e){e.forEach(t=>{this.collectInteractiveFieldsFromNode(t).forEach(i=>{let n=this.getFormStateByReference(i);n&&this.unregisterField(i,n.entries,n.values,n.events)})})}getFormStateByContainment(e){let t=this.objects.find(r=>r.htmlElement instanceof HTMLFormElement&&r.htmlElement.contains(e));return t?this.buildFormState(t):null}getFormStateByReference(e){for(let t of this.objects){let r=t.getProperty("form-field-entries");if(r&&r.some(i=>i.field===e))return this.buildFormState(t,r)}return null}buildFormState(e,t){let r=e.htmlElement;if(!(r instanceof HTMLFormElement))return null;let i=t??e.getProperty("form-field-entries"),n=e.getProperty("form-field-values"),o=e.getProperty("form-events");return!i||!n||!o?null:{object:e,form:r,entries:i,values:n,events:o}}registerFieldIndex(e,t){let r=e.getAttribute("data-string-form-index");return r!==null?Number(r):(e.setAttribute("data-string-form-index",String(t)),t)}getFieldIndex(e,t){let r=e.getAttribute("data-string-form-index");if(r!==null){let i=Number(r);return Number.isNaN(i)?t:i}return this.registerFieldIndex(e,t)}shouldValidateField(e){return!(e.disabled||e instanceof HTMLInputElement&&e.type==="hidden")}supportsBeforeInputValidation(e){return e.some(t=>N.beforeInputRuleKeys.has(t.key))}requiresContext(e){return e.some(t=>N.crossFieldRuleKeys.has(t.key))}buildContext(e,t,r,i){if(!e)return{fieldKey:t};let n=!!i?.applied,o=n?{...r,[t]:i.value}:r;return{fieldKey:t,values:o,getValue:s=>n&&s===t?i.value:o[s]}}getInputKey(e,t){return this.tools.domAttribute.process({element:e,key:"id"})||e.getAttribute("name")||e.getAttribute("id")||`input-${t}`}getFieldValue(e){if(e instanceof HTMLInputElement){if(e.type==="checkbox"){if(e.name){let t=e.form||e.closest("form"),r=t?Array.from(t.querySelectorAll(`input[type="checkbox"][name="${e.name}"]:checked`)):[e];return r.length>1?r.map(i=>i.value):r.length===1?r[0].value:""}return e.checked}if(e.type==="radio"){if(e.name){let r=(e.form||e.closest("form"))?.querySelector(`input[type="radio"][name="${e.name}"]:checked`);return r?r.value:""}return e.checked?e.value:""}return e.type==="file"&&e.files&&e.files.length>0?e.multiple?Array.from(e.files):e.files[0]:e.value}return e instanceof HTMLSelectElement?e.multiple?Array.from(e.selectedOptions).map(t=>t.value):e.value:e instanceof HTMLTextAreaElement?e.value:""}isServiceFieldAttribute(e){return N.serviceAttributePrefixes.some(t=>e.startsWith(`${t}[`))}isFormFieldElement(e){return e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement}getInputEventType(e){return e instanceof HTMLSelectElement||e instanceof HTMLInputElement&&(e.type==="checkbox"||e.type==="radio")?"change":"input"}};N.beforeInputRuleKeys=new Set(["number","integer","email","phone","letters","lettersSpaces","lettersNumbers","alpha","alpha_num","alpha_dash","digits","url","pattern"]),N.crossFieldRuleKeys=new Set(["same","different","after","before"]),N.serviceAttributePrefixes=["error","group"];var oe=N;var ae=class{constructor(){this.map=new WeakMap;this.all=new Set}attach(e){if(this.map.has(e))return;let t=e.htmlElement,r={cx:0,cy:0,valid:!1,el:t};r.ro=new ResizeObserver(()=>{r.valid=!1}),r.ro.observe(t),this.map.set(e,r),this.all.add(e)}detach(e){let t=this.map.get(e);t&&(t.ro?.disconnect(),this.map.delete(e),this.all.delete(e))}invalidate(e){this.all.forEach(t=>{if(t.id===e){let r=this.map.get(t);r&&(r.valid=!1)}})}invalidateAll(){this.all.forEach(e=>{let t=this.map.get(e);t&&(t.valid=!1)})}getCenter(e){let t=this.map.get(e);if(!t||!t.el)return{cx:0,cy:0};if(!t.valid){let r=t.el.getBoundingClientRect();t.cx=r.left+r.width/2,t.cy=r.top+r.height/2,t.valid=!0}return{cx:t.cx,cy:t.cy}}};var le=class{constructor(){this.active=new Set;this.subs=new WeakMap}track(e){if(this.subs.has(e))return;let t=e.htmlElement,r=()=>this.active.add(e),i=()=>this.active.delete(e);t.addEventListener("pointerenter",r),t.addEventListener("pointerleave",i),this.subs.set(e,{enter:r,leave:i})}untrack(e){let t=this.subs.get(e);if(!t)return;let r=e.htmlElement;t.enter&&r.removeEventListener("pointerenter",t.enter),t.leave&&r.removeEventListener("pointerleave",t.leave),this.active.delete(e),this.subs.delete(e)}isActive(e){return this.active.has(e)}activeObjects(){return Array.from(this.active)}};var ce=class extends x{constructor(e){super(e),this.htmlKey="scroller"}onObjectConnected(e){let t=e.getProperty("scroller-inited");if(t==null||t==""){e.setProperty("scroller-inited","inited");let r=i=>{this.events.emit("wheel",i)};e.setProperty("scroller-wheel-event",r),e.htmlElement.addEventListener("wheel",r)}}onObjectDisconnected(e){e.setProperty("scroller-inited",""),e.htmlElement.removeEventListener("wheel",e.getProperty("scroller-wheel-event"))}};function Ne(c){let e=c.match(/([^[]+)\[([\d.]+)-([\d.]+)\]/);return e?{id:e[1],start:parseFloat(e[2]),end:parseFloat(e[3])}:null}function nr(c,e,t,r,i){return r+(i-r)*(c-e)/(t-e)}var ue=class extends x{constructor(e){super(e),this.htmlKey="progress-part",this.attributesToMap=[...this.attributesToMap,{key:"part-of",type:"string",fallback:""}]}onObjectConnected(e){let t=e.getProperty("part-of"),r=Ne(t);if(r){e.setProperty("part-of-id",r.id),e.setProperty("start",r.start),e.setProperty("end",r.end);let i=n=>{if(r){let o=nr(n,r?.start,r?.end,0,1),s=Math.max(0,Math.min(1,o));e.htmlElement.style.setProperty("--progress-slice",s.toString()),this.events.emit(`object:progress-slice:${e.id}`,s)}};e.setProperty("progress-event",i),this.events.on(`object:progress:${r.id}`,i)}}onObjectDisconnected(e){let t=e.getProperty("part-of-id");t&&this.events.off(`object:progress:${t}`,e.getProperty("progress-event"))}};var Se=class c{constructor(){this.prevWidth=0;this.prevHeight=0;this.loop=new ie;this.observerContainerResize=null;this.canRebuild=!0;this.debouncedResize=He(this.onResize,30);this.root=document.body,this.window=window,this.tools=new Rt,this.data=new G,this.eventManager=new U,this.moduleManager=new ft(this.data),this.objectManager=new vt(this.data,this.moduleManager,this.eventManager,this.tools),this.centers=new ae,this.hoverManager=new le,this.context={events:this.eventManager,data:this.data,tools:this.tools,settings:{},centers:this.centers,hover:this.hoverManager},this.cursorController=new gt(1,this.context),this.scrollManager=new xt(this.context),this.setupSettings({"global-class":!1,"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","cursor-lerp":"0.75",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,"position-strength":3,"position-tension":.05,"position-friction":.15,"position-max-velocity":10,"position-update-threshold":.1,"rotation-strength":.75,"rotation-tension":.06,"rotation-friction":.18,"rotation-max-angular-velocity":6,"rotation-max-angle":18,"rotation-update-threshold":.15,"max-offset":220,"sleep-epsilon":.01,"continuous-push":!0}),this.onContainerTransitionEndBind=this.onContainerTransitionEnd.bind(this),this.onResizeObserverBind=this.onResizeObserverEvent.bind(this),this.observerContainerResize=new ResizeObserver(this.onResizeObserverBind),this.observerContainerResize.observe(this.context.data.scroll.container),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.eventManager.on("wheel",this.onWheelBind),this.scrollManager.bindEvents({onScrollStart:this.onScrollStartBind,onScrollStop:this.onScrollStopBind,onDirectionChange:this.onDirectionChangeBind}),this.loop.setOnFrame(e=>{this.data.time.delta=e-this.data.time.now,this.data.time.previous=this.data.time.now,this.data.time.now=e,this.data.time.elapsed+=this.data.time.delta,this.onUpdateEvent()}),this.on("image:load:all",()=>{this.onResize()}),this.scrollContainer=window}set scrollPosition(e){this.data.scroll.current=e,this.data.scroll.target=e,this.data.scroll.transformedCurrent=this.data.scroll.current*this.data.viewport.transformScale,this.data.scroll.delta=0,this.data.scroll.lerped=0,this.scrollManager.updatePosition(),this.moduleManager.onScroll(),this.objectManager.checkInview()}set scrollContainer(e){this.observerContainerResize?.unobserve(this.context.data.scroll.container),this.data.scroll.elementContainer.removeEventListener("transitionend",this.onContainerTransitionEndBind),e instanceof Window?(this.data.scroll.container=document.body,this.data.scroll.elementContainer=document.documentElement,this.data.scroll.scrollContainer=e):e instanceof HTMLElement?(this.data.scroll.container=e,this.data.scroll.elementContainer=e,this.data.scroll.scrollContainer=e):(this.data.scroll.container=document.body,this.data.scroll.elementContainer=document.documentElement,this.data.scroll.scrollContainer=e),this.data.scroll.elementContainer.addEventListener("transitionend",this.onContainerTransitionEndBind),this.observerContainerResize?.observe(this.context.data.scroll.container),this.debouncedResize()}get scrollPosition(){return this.data.scroll.current}get scrollHeight(){return this.data.viewport.contentHeight}get containerHeight(){return this.data.viewport.windowHeight}set speed(e){this.data.scroll.speed=e}set speedAccelerate(e){this.data.scroll.speedAccelerate=.1+(.5-.1)*e}set scrollDesktopMode(e){this.scrollManager.setDesktopMode(e)}set scrollMobileMode(e){this.scrollManager.setMobileMode(e)}static getInstance(){return c.i||(c.i=new c),c.i}reuse(e){return this.moduleManager.find(e)}use(e,t=null){let r={...this.context.settings,...t},i=new e({events:this.eventManager,data:this.data,tools:this.tools,settings:r,centers:this.centers,hover:this.hoverManager});this.moduleManager.register(i)}on(e,t,r=""){this.eventManager.on(e,t,r)}emit(e,t){this.eventManager.emit(e,t)}off(e,t,r=""){this.eventManager.off(e,t,r)}addScrollMark(e){this.scrollManager.addScrollMark(e)}removeScrollMark(e){this.scrollManager.removeScrollMark(e)}start(e){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);let t=new MutationObserver((o,s)=>{for(let a of o)a.type==="attributes"&&(a.attributeName==="style"||a.attributeName==="class")&&this.onResize()}),r={attributes:!0,attributeFilter:["style","class"]};t.observe(this.context.data.scroll.container,r),this.use(Bt);let i=window.getComputedStyle(document.documentElement).fontSize,n=parseFloat(i);this.context.data.viewport.baseRem=n,document.documentElement.classList.add("-string"),this.moduleManager.onInit(),this.onResize(),this.initObjects(),this.objectManager.observeDOM(),this.loop.start(e),this.eventManager.emit("start",null)}initObjects(){document.querySelectorAll("[string],[data-string]").forEach(e=>{this.objectManager.add(e)}),document.querySelectorAll("[string-copy-from],[data-string-copy-from]").forEach(e=>{let t=this.tools.domAttribute.process({element:e,key:"copy-from",fallback:""});t&&t.length>0&&this.objectManager.linkMirror(t,e)}),this.moduleManager.onResize(),this.moduleManager.onScroll(),this.moduleManager.onFrame()}setupSettings(e){this.context.settings={...this.context.settings,...e},this.onSettingsChange({isDesktop:this.data.viewport.windowWidth>1024,widthChanged:!0,heightChanged:!0,scrollHeightChanged:!0,isForceRebuild:!1})}onResizeObserverEvent(){this.debouncedResize()}onContainerTransitionEnd(e){e.target===this.context.data.scroll.container&&(this.onResize(),this.moduleManager.onResize(),this.moduleManager.onScroll(),this.moduleManager.onFrame())}onMouseMoveEvent(e){this.cursorController.onMouseMove(e),this.moduleManager.onMouseMove(e),R.measure(()=>{this.moduleManager.onMouseMoveMeasure()})}onWheelEvent(e){e.target.closest("[string-isolation],[data-string-isolation]")==null&&(this.scrollManager.get().onWheel(e),this.moduleManager.onWheel(e))}onScrollStart(){this.moduleManager.onScrollStart(),this.eventManager.emit("scroll:start",null)}onScrollStop(){this.moduleManager.onScrollStop(),this.eventManager.emit("scroll:stop",null)}onDirectionChange(){this.moduleManager.onDirectionChange()}onSettingsChange(e){this.cursorController.onSettingsChange(e),this.objectManager.onSettingsChange(e),this.moduleManager.onSettingsChange(e)}onScrollEvent(e){return e.preventDefault(),this.context.centers.invalidateAll(),this.scrollManager.get().onScroll(e),this.moduleManager.onScroll(),this.objectManager.checkInview(),this.eventManager.emit("lerp",this.data.scroll.lerped),this.eventManager.emit("scroll",this.data.scroll.current),R.measure(()=>{this.moduleManager.onScrollMeasure()}),!1}onUpdateEvent(){this.cursorController.onFrame(),this.scrollManager.get().onFrame(),this.moduleManager.onFrame(),R.mutate(()=>{T.begin(),this.moduleManager.onMutate(),T.commit()}),this.eventManager.emit("update",null)}onResize(e=!1){if(this.canRebuild==!1)return;let t=this.data.scroll.container,r=this.context.data.scroll,i=0,n=0;var o,s=0;let a=t.getBoundingClientRect();t.tagName=="BODY"?(i=window.innerWidth,n=window.innerHeight):(i=a.width,n=a.height),s=a.top,o=r.container.scrollHeight;let l=this.tools.transformScaleParser.process({value:window.getComputedStyle(t).transform});this.context.data.viewport.transformScale=window.getComputedStyle(t).scale=="none"?l:Number(window.getComputedStyle(t).scale),this.context.data.scroll.transformedCurrent=this.context.data.scroll.current*this.context.data.viewport.transformScale;let u=i>1024,d=this.prevWidth!==i,p=this.prevHeight!==n,m=this.context.data.viewport.contentHeight!==o,g=d||u&&p||m;this.context.data.scroll.topPosition=Math.floor(s),this.context.data.viewport.contentWidth=i,this.context.data.viewport.contentHeight=o,this.prevWidth=i,this.prevHeight=n,this.context.data.viewport.windowWidth=i,this.context.data.viewport.windowHeight=n;let h=window.getComputedStyle(document.documentElement).fontSize,v=parseFloat(h);this.context.data.viewport.baseRem=v*l,r.bottomPosition=this.context.data.viewport.contentHeight-n,(d||typeof e=="boolean"&&e)&&this.moduleManager.onResizeWidth(),(g||typeof e=="boolean"&&e)&&(this.context.data.scroll.container.scrollTop>0&&(this.context.data.scroll.current=this.context.data.scroll.container.scrollTop,this.context.data.scroll.target=this.context.data.scroll.container.scrollTop),this.scrollManager.updateResponsiveMode(),this.moduleManager.onResize(),this.onSettingsChange({isDesktop:u,widthChanged:d,heightChanged:p,scrollHeightChanged:m,isForceRebuild:e===!0}),this.moduleManager.onScroll(),this.moduleManager.onFrame())}scrollToElement(e,t=0){let r=document.querySelector(e);if(r){let n=r.getBoundingClientRect().top+window.pageYOffset-this.data.scroll.container.clientTop-t;this.context.data.scroll.delta=n-this.data.scroll.current}else console.warn(`Element not found: ${e}`)}scrollTo(e){this.scrollManager.get().scrollTo(e)}invalidateCenter(e){this.centers.invalidate(e)}invalidateCenters(){this.centers.invalidateAll()}destroy(){this.data.scroll.scrollContainer?.removeEventListener("scroll",this.onScrollBind),this.data.scroll.container?.removeEventListener("wheel",this.onWheelBind),this.data.scroll.elementContainer.removeEventListener("transitionend",this.onContainerTransitionEndBind),this.window.removeEventListener("resize",this.onResizeBind),this.root.removeEventListener("mousemove",this.onMouseMoveBind),this.loop.stop(),this.moduleManager.destroy(),this.eventManager.clearAll(),this.eventManager.off("wheel",this.onWheelBind)}};0&&(module.exports={CursorReactiveModule,StringAnchor,StringCursor,StringData,StringDelayLerpTracker,StringFPSTracker,StringForm,StringGlide,StringImpulse,StringLazy,StringLerp,StringLerpTracker,StringLoading,StringMagnetic,StringModule,StringObject,StringParallax,StringPositionTracker,StringProgress,StringProgressPart,StringResponsive,StringScrollbar,StringScroller,StringSequence,StringSplit,StringSpotlight,StringTune,StringVideoAutoplay,frameDOM,styleTxn});
23
+ `,document.head.appendChild(t),this.displayElement=e}};function He(c,e){let t=null;return function(...r){let i=this;t&&clearTimeout(t),t=setTimeout(()=>{c.apply(i,r),t=null},e)}}var ie=class{constructor(){this.fps=0;this.isAnimationStarted=!1;this.fpsInterval=0;this.then=0;this.requestAnimationId=0;this.onFrameCallback=e=>{};this.animate=()=>{};this.onVisibilityChangeBind=this.onVisibilityChange.bind(this)}onVisibilityChange(){document.hidden?(this.stop(),this.isAnimationStarted=!1):this.start(this.fps)}start(e){this.fps=e,!this.isAnimationStarted&&(this.fpsInterval=1e3/e,this.then=performance.now(),this.isAnimationStarted=!0,e===0?this.animate=()=>{let t=performance.now();this.requestAnimationId=requestAnimationFrame(()=>this.animate()),this.onFrameCallback(t)}:this.animate=()=>{let t=performance.now(),r=t-this.then;r>this.fpsInterval&&(this.then=t-r%this.fpsInterval,this.onFrameCallback(t)),this.requestAnimationId=requestAnimationFrame(()=>this.animate())},this.animate())}stop(){this.isAnimationStarted&&(cancelAnimationFrame(this.requestAnimationId),this.requestAnimationId=0,this.isAnimationStarted=!1)}setOnFrame(e){this.onFrameCallback=e}destructor(){this.stop()}};var ne=class extends x{constructor(e){super(e),this.htmlKey="autoplay",this.attributesToMap=[...this.attributesToMap,{key:"src",type:"string",fallback:""}]}onObjectConnected(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"));let t=e.htmlElement,r=this.tools.domAttribute.process({element:t,key:"string-started",fallback:null})!==null;t.tagName.toLowerCase()==="video"&&!r&&(t.setAttribute("string-started",""),t.muted=!0,t.setAttribute("muted","muted"),t.setAttribute("playsinline",""),t.setAttribute("loop",""),t.setAttribute("autoplay",""),t.src=e.getProperty("src"),t.load(),t.addEventListener("canplay",()=>{}))}onEnterObject(e){let t=e.htmlElement;this.tryPlay(t)}onLeaveObject(e){e.htmlElement.pause()}tryPlay(e){e.play().catch(t=>console.warn("[StringVideoAutoplay] Autoplay failed:",t))}};var ye=(r=>(r.ACTIVE="-active",r.HIDE="-hide",r.DISABLE="-disable",r))(ye||{});var se=class extends x{constructor(t){super(t);this.activeStepForSlides=new Map;this.hideStepForSlides=new Map;this.htmlKey="sequence",this.attributesToMap=[...this.attributesToMap,{key:"sequence",type:"string",fallback:"string[0]"}]}onInit(){super.onInit(),this.events.on("sequence",({slider:t,step:r})=>{this.objectsOnPage.forEach(n=>{let o=n.getProperty("sequence");o==`${t}[${this.hideStepForSlides.get(t)}]`&&o!=`${t}[${r}]`&&this.setSequenceState(n,"-disable"),o==`${t}[${this.activeStepForSlides.get(t)}]`&&this.setSequenceState(n,"-hide"),o==`${t}[${r}]`&&this.setSequenceState(n,"-active")});let i=this.activeStepForSlides.get(t);i!=null&&this.hideStepForSlides.set(t,i),this.activeStepForSlides.set(t,r)})}onObjectConnected(t){super.onObjectConnected(t),this.setSequenceState(t,"-disable")}setSequenceState(t,r){requestAnimationFrame(()=>{t.htmlElement.classList.remove(...Object.values(ye)),t.htmlElement.classList.add(r)})}};var N=class N extends x{constructor(e){super(e),this.htmlKey="form"}initializeObject(e,t,r,i){super.initializeObject(e,t,r,i);let n=t.getProperty("form-events")??[];n.forEach(u=>{u.eventElement.removeEventListener(u.eventType,u.eventCallback)}),n.length=0,t.setProperty("form-events",n),super.onObjectConnected(t);let o=t.htmlElement,s=[],a={};this.getInteractiveFields(o).forEach((u,d)=>this.registerField(u,o,s,a,n,d));let l=u=>{u.preventDefault();let d=!0,p={},m=new Set;for(let g of s){let h=g.field;if(!h.isConnected||!this.shouldValidateField(h))continue;if(this.isRadioField(h)){if(m.has(g.key))continue;m.add(g.key)}let{key:v,rules:b,needsContext:f}=g,S=this.getFieldValue(h);p[v]=S,a[v]=S;let{valid:y,errors:M}=this.tools.validation.process({rules:b,value:S,context:this.buildContext(f,v,a)});this.applyValidationState(o,h,v,y,M,"submit"),y||(d=!1)}if(d)this.events.emit(`form:submit:${t.id}`,p);else{let g=new Set,h=s.find(v=>{let b=v.field;if(!b.isConnected||!this.shouldValidateField(b))return!1;if(this.isRadioField(b)){if(g.has(v.key))return!1;g.add(v.key)}let{key:f,rules:S,needsContext:y}=v,M=this.getFieldValue(b);a[f]=M;let{valid:w}=this.tools.validation.process({rules:S,value:M,context:this.buildContext(y,f,a)});return!w});h?.field&&typeof h.field.focus=="function"&&h.field.focus(),this.events.emit(`form:invalid:${t.id}`)}};o.addEventListener("submit",l),n.push({eventElement:o,eventType:"submit",eventCallback:l}),t.setProperty("form-field-entries",s),t.setProperty("form-field-values",a)}onObjectConnected(e){}onDOMMutate(e,t){this.objects.length!==0&&(e.length>0&&this.handleMutationAdditions(e),t.length>0&&this.handleMutationRemovals(t))}applyValidationState(e,t,r,i,n,o){let s=e.querySelector(`[string-input="error[${r}]"]`),a=e.querySelector(`[string-input="group[${r}]"]`);s&&(s.innerHTML="",n.forEach(u=>{let d=document.createElement("span");d.textContent=u,s.appendChild(d)})),o==="live"?(t.classList.toggle("-invalid",!i),t.classList.remove("-error")):(t.classList.remove("-invalid"),t.classList.toggle("-error",!i)),t.classList.toggle("-valid",i),a&&(o==="live"?(a.classList.toggle("-invalid",!i),a.classList.remove("-error")):(a.classList.remove("-invalid"),a.classList.toggle("-error",!i)),a.classList.toggle("-valid",i));let l=i?"valid":o==="live"?"invalid":"error";this.events.emit(`form:field:${l}:${r}`,{key:r,field:t,errors:n,phase:o,valid:i})}getInteractiveFields(e){return Array.from(e.querySelectorAll("[string-input]")).filter(t=>!this.isServiceFieldAttribute(t.getAttribute("string-input")||"")).filter(t=>this.isFormFieldElement(t)).map(t=>t)}getFieldRules(e){let t=this.tools.domAttribute.process({element:e,key:"input"})??"";return this.tools.ruleParser.process({value:t})}registerField(e,t,r,i,n,o){if(!this.isFormFieldElement(e)||e.closest("form")!==t||r.some(h=>h.field===e))return;let s=this.registerFieldIndex(e,o??r.length),a=this.getInputKey(e,s),l=this.getFieldRules(e),u=this.supportsBeforeInputValidation(l),d=this.requiresContext(l),p=this.getInputEventType(e),m={field:e,key:a,rules:l,supportsRealtime:u,needsContext:d,inputEventType:p,inputHandler:()=>{}},g=h=>{let v=h.currentTarget||h.target;if(!v||!v.isConnected||!this.shouldValidateField(v))return;let b=this.getFieldValue(v);i[m.key]=b;let f=this.buildContext(m.needsContext,m.key,i),{valid:S,errors:y}=this.tools.validation.process({rules:m.rules,value:b,context:f});this.applyValidationState(t,v,m.key,S,y,"live")};if(m.inputHandler=g,e.addEventListener(p,g),n.push({eventElement:e,eventType:p,eventCallback:g}),u&&(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)){let h=v=>{let b=v;if(b.isComposing||b.inputType?.startsWith("insertComposition"))return;let f=v.currentTarget||v.target;if(!f||!(f instanceof HTMLInputElement||f instanceof HTMLTextAreaElement)||!f.isConnected)return;let S=f.selectionStart??0,y=f.selectionEnd??0,M=f.value;switch(b.inputType){case"deleteContentBackward":M=S===y&&S>0?f.value.slice(0,S-1)+f.value.slice(y):f.value.slice(0,S)+f.value.slice(y);break;case"deleteContentForward":M=S===y&&S<f.value.length?f.value.slice(0,S)+f.value.slice(S+1):f.value.slice(0,S)+f.value.slice(y);break;case"insertFromPaste":case"insertFromDrop":case"insertReplacementText":M=f.value.slice(0,S)+(b.data||"")+f.value.slice(y);break;default:typeof b.data=="string"&&(M=f.value.slice(0,S)+b.data+f.value.slice(y))}let{errors:w}=this.tools.validation.process({rules:m.rules,value:M,type:"beforeinput",context:this.buildContext(m.needsContext,m.key,i,{applied:!0,value:M})});w.length>0&&v.cancelable&&v.preventDefault()};m.beforeInputHandler=h,e.addEventListener("beforeinput",h),n.push({eventElement:e,eventType:"beforeinput",eventCallback:h})}e.classList.add("-inited"),r.push(m),i[a]=this.getFieldValue(e)}unregisterField(e,t,r,i){let n=t.findIndex(s=>s.field===e);if(n===-1)return;let o=t[n];o.inputHandler&&e.removeEventListener(o.inputEventType,o.inputHandler),o.beforeInputHandler&&e.removeEventListener("beforeinput",o.beforeInputHandler),delete r[o.key],t.splice(n,1);for(let s=i.length-1;s>=0;s--){let a=i[s];a.eventElement===e&&(a.eventCallback===o.inputHandler||o.beforeInputHandler&&a.eventCallback===o.beforeInputHandler)&&i.splice(s,1)}e.classList.remove("-inited")}collectInteractiveFieldsFromNode(e){let t=[];return e instanceof Element?(e.hasAttribute("string-input")&&t.push(e),t.push(...Array.from(e.querySelectorAll("[string-input]")))):e instanceof DocumentFragment&&t.push(...Array.from(e.querySelectorAll("[string-input]"))),t.filter(r=>!this.isServiceFieldAttribute(r.getAttribute("string-input")||"")).filter(r=>this.isFormFieldElement(r))}isRadioField(e){return e instanceof HTMLInputElement&&e.type==="radio"}handleMutationAdditions(e){e.forEach(t=>{this.collectInteractiveFieldsFromNode(t).forEach(i=>{let n=this.getFormStateByContainment(i);n&&this.registerField(i,n.form,n.entries,n.values,n.events)})})}handleMutationRemovals(e){e.forEach(t=>{this.collectInteractiveFieldsFromNode(t).forEach(i=>{let n=this.getFormStateByReference(i);n&&this.unregisterField(i,n.entries,n.values,n.events)})})}getFormStateByContainment(e){let t=this.objects.find(r=>r.htmlElement instanceof HTMLFormElement&&r.htmlElement.contains(e));return t?this.buildFormState(t):null}getFormStateByReference(e){for(let t of this.objects){let r=t.getProperty("form-field-entries");if(r&&r.some(i=>i.field===e))return this.buildFormState(t,r)}return null}buildFormState(e,t){let r=e.htmlElement;if(!(r instanceof HTMLFormElement))return null;let i=t??e.getProperty("form-field-entries"),n=e.getProperty("form-field-values"),o=e.getProperty("form-events");return!i||!n||!o?null:{object:e,form:r,entries:i,values:n,events:o}}registerFieldIndex(e,t){let r=e.getAttribute("data-string-form-index");return r!==null?Number(r):(e.setAttribute("data-string-form-index",String(t)),t)}getFieldIndex(e,t){let r=e.getAttribute("data-string-form-index");if(r!==null){let i=Number(r);return Number.isNaN(i)?t:i}return this.registerFieldIndex(e,t)}shouldValidateField(e){return!(e.disabled||e instanceof HTMLInputElement&&e.type==="hidden")}supportsBeforeInputValidation(e){return e.some(t=>N.beforeInputRuleKeys.has(t.key))}requiresContext(e){return e.some(t=>N.crossFieldRuleKeys.has(t.key))}buildContext(e,t,r,i){if(!e)return{fieldKey:t};let n=!!i?.applied,o=n?{...r,[t]:i.value}:r;return{fieldKey:t,values:o,getValue:s=>n&&s===t?i.value:o[s]}}getInputKey(e,t){return this.tools.domAttribute.process({element:e,key:"id"})||e.getAttribute("name")||e.getAttribute("id")||`input-${t}`}getFieldValue(e){if(e instanceof HTMLInputElement){if(e.type==="checkbox"){if(e.name){let t=e.form||e.closest("form"),r=t?Array.from(t.querySelectorAll(`input[type="checkbox"][name="${e.name}"]:checked`)):[e];return r.length>1?r.map(i=>i.value):r.length===1?r[0].value:""}return e.checked}if(e.type==="radio"){if(e.name){let r=(e.form||e.closest("form"))?.querySelector(`input[type="radio"][name="${e.name}"]:checked`);return r?r.value:""}return e.checked?e.value:""}return e.type==="file"&&e.files&&e.files.length>0?e.multiple?Array.from(e.files):e.files[0]:e.value}return e instanceof HTMLSelectElement?e.multiple?Array.from(e.selectedOptions).map(t=>t.value):e.value:e instanceof HTMLTextAreaElement?e.value:""}isServiceFieldAttribute(e){return N.serviceAttributePrefixes.some(t=>e.startsWith(`${t}[`))}isFormFieldElement(e){return e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement}getInputEventType(e){return e instanceof HTMLSelectElement||e instanceof HTMLInputElement&&(e.type==="checkbox"||e.type==="radio")?"change":"input"}};N.beforeInputRuleKeys=new Set(["number","integer","email","phone","letters","lettersSpaces","lettersNumbers","alpha","alpha_num","alpha_dash","digits","url","pattern"]),N.crossFieldRuleKeys=new Set(["same","different","after","before"]),N.serviceAttributePrefixes=["error","group"];var oe=N;var ae=class{constructor(){this.map=new WeakMap;this.all=new Set}attach(e){if(this.map.has(e))return;let t=e.htmlElement,r={cx:0,cy:0,valid:!1,el:t};r.ro=new ResizeObserver(()=>{r.valid=!1}),r.ro.observe(t),this.map.set(e,r),this.all.add(e)}detach(e){let t=this.map.get(e);t&&(t.ro?.disconnect(),this.map.delete(e),this.all.delete(e))}invalidate(e){this.all.forEach(t=>{if(t.id===e){let r=this.map.get(t);r&&(r.valid=!1)}})}invalidateAll(){this.all.forEach(e=>{let t=this.map.get(e);t&&(t.valid=!1)})}getCenter(e){let t=this.map.get(e);if(!t||!t.el)return{cx:0,cy:0};if(!t.valid){let r=t.el.getBoundingClientRect();t.cx=r.left+r.width/2,t.cy=r.top+r.height/2,t.valid=!0}return{cx:t.cx,cy:t.cy}}};var le=class{constructor(){this.active=new Set;this.subs=new WeakMap}track(e){if(this.subs.has(e))return;let t=e.htmlElement,r=()=>this.active.add(e),i=()=>this.active.delete(e);t.addEventListener("pointerenter",r),t.addEventListener("pointerleave",i),this.subs.set(e,{enter:r,leave:i})}untrack(e){let t=this.subs.get(e);if(!t)return;let r=e.htmlElement;t.enter&&r.removeEventListener("pointerenter",t.enter),t.leave&&r.removeEventListener("pointerleave",t.leave),this.active.delete(e),this.subs.delete(e)}isActive(e){return this.active.has(e)}activeObjects(){return Array.from(this.active)}};var ce=class extends x{constructor(e){super(e),this.htmlKey="scroller"}onObjectConnected(e){let t=e.getProperty("scroller-inited");if(t==null||t==""){e.setProperty("scroller-inited","inited");let r=i=>{this.events.emit("wheel",i)};e.setProperty("scroller-wheel-event",r),e.htmlElement.addEventListener("wheel",r)}}onObjectDisconnected(e){e.setProperty("scroller-inited",""),e.htmlElement.removeEventListener("wheel",e.getProperty("scroller-wheel-event"))}};function Ne(c){let e=c.match(/([^[]+)\[([\d.]+)-([\d.]+)\]/);return e?{id:e[1],start:parseFloat(e[2]),end:parseFloat(e[3])}:null}function nr(c,e,t,r,i){return r+(i-r)*(c-e)/(t-e)}var ue=class extends x{constructor(e){super(e),this.htmlKey="progress-part",this.attributesToMap=[...this.attributesToMap,{key:"part-of",type:"string",fallback:""}]}onObjectConnected(e){let t=e.getProperty("part-of"),r=Ne(t);if(r){e.setProperty("part-of-id",r.id),e.setProperty("start",r.start),e.setProperty("end",r.end);let i=n=>{if(r){let o=nr(n,r?.start,r?.end,0,1),s=Math.max(0,Math.min(1,o));e.htmlElement.style.setProperty("--progress-slice",s.toString()),this.events.emit(`object:progress-slice:${e.id}`,s)}};e.setProperty("progress-event",i),this.events.on(`object:progress:${r.id}`,i)}}onObjectDisconnected(e){let t=e.getProperty("part-of-id");t&&this.events.off(`object:progress:${t}`,e.getProperty("progress-event"))}};var Se=class c{constructor(){this.prevWidth=0;this.prevHeight=0;this.loop=new ie;this.observerContainerResize=null;this.canRebuild=!0;this.debouncedResize=He(this.onResize,30);this.root=document.body,this.window=window,this.tools=new Rt,this.data=new G,this.eventManager=new U,this.moduleManager=new ft(this.data),this.objectManager=new vt(this.data,this.moduleManager,this.eventManager,this.tools),this.centers=new ae,this.hoverManager=new le,this.context={events:this.eventManager,data:this.data,tools:this.tools,settings:{},centers:this.centers,hover:this.hoverManager},this.cursorController=new gt(1,this.context),this.scrollManager=new xt(this.context),this.setupSettings({"global-class":!1,"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","cursor-lerp":"0.75",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,"position-strength":3,"position-tension":.05,"position-friction":.15,"position-max-velocity":10,"position-update-threshold":.1,"rotation-strength":.75,"rotation-tension":.06,"rotation-friction":.18,"rotation-max-angular-velocity":6,"rotation-max-angle":18,"rotation-update-threshold":.15,"max-offset":220,"sleep-epsilon":.01,"continuous-push":!0}),this.onContainerTransitionEndBind=this.onContainerTransitionEnd.bind(this),this.onResizeObserverBind=this.onResizeObserverEvent.bind(this),this.observerContainerResize=new ResizeObserver(this.onResizeObserverBind),this.observerContainerResize.observe(this.context.data.scroll.container),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.eventManager.on("wheel",this.onWheelBind),this.scrollManager.bindEvents({onScrollStart:this.onScrollStartBind,onScrollStop:this.onScrollStopBind,onDirectionChange:this.onDirectionChangeBind}),this.loop.setOnFrame(e=>{this.data.time.delta=e-this.data.time.now,this.data.time.previous=this.data.time.now,this.data.time.now=e,this.data.time.elapsed+=this.data.time.delta,this.onUpdateEvent()}),this.on("image:load:all",()=>{this.onResize()}),this.scrollContainer=window}set scrollPosition(e){this.data.scroll.current=e,this.data.scroll.target=e,this.data.scroll.transformedCurrent=this.data.scroll.current*this.data.viewport.transformScale,this.data.scroll.delta=0,this.data.scroll.lerped=0,this.scrollManager.updatePosition(),this.moduleManager.onScroll(),this.objectManager.checkInview()}set scrollContainer(e){this.observerContainerResize?.unobserve(this.context.data.scroll.container),this.data.scroll.elementContainer.removeEventListener("transitionend",this.onContainerTransitionEndBind),e instanceof Window?(this.data.scroll.container=document.body,this.data.scroll.elementContainer=document.documentElement,this.data.scroll.scrollContainer=e):e instanceof HTMLElement?(this.data.scroll.container=e,this.data.scroll.elementContainer=e,this.data.scroll.scrollContainer=e):(this.data.scroll.container=document.body,this.data.scroll.elementContainer=document.documentElement,this.data.scroll.scrollContainer=e),this.data.scroll.elementContainer.addEventListener("transitionend",this.onContainerTransitionEndBind),this.observerContainerResize?.observe(this.context.data.scroll.container),this.debouncedResize()}get scrollPosition(){return this.data.scroll.current}get scrollHeight(){return this.data.viewport.contentHeight}get containerHeight(){return this.data.viewport.windowHeight}set speed(e){this.data.scroll.speed=e}set speedAccelerate(e){this.data.scroll.speedAccelerate=.1+(.5-.1)*e}set scrollDesktopMode(e){this.scrollManager.setDesktopMode(e)}set scrollMobileMode(e){this.scrollManager.setMobileMode(e)}static getInstance(){return c.i||(c.i=new c),c.i}reuse(e){return this.moduleManager.find(e)}use(e,t=null){let r={...this.context.settings,...t},i=new e({events:this.eventManager,data:this.data,tools:this.tools,settings:r,centers:this.centers,hover:this.hoverManager});this.moduleManager.register(i)}on(e,t,r=""){this.eventManager.on(e,t,r)}emit(e,t){this.eventManager.emit(e,t)}off(e,t,r=""){this.eventManager.off(e,t,r)}addScrollMark(e){this.scrollManager.addScrollMark(e)}removeScrollMark(e){this.scrollManager.removeScrollMark(e)}start(e){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);let t=new MutationObserver((o,s)=>{for(let a of o)a.type==="attributes"&&(a.attributeName==="style"||a.attributeName==="class")&&this.onResize()}),r={attributes:!0,attributeFilter:["style","class"]};t.observe(this.context.data.scroll.container,r),this.use(Bt);let i=window.getComputedStyle(document.documentElement).fontSize,n=parseFloat(i);this.context.data.viewport.baseRem=n,document.documentElement.classList.add("-string"),this.moduleManager.onInit(),this.onResize(),this.initObjects(),this.objectManager.observeDOM(),this.loop.start(e),this.eventManager.emit("start",null)}initObjects(){document.querySelectorAll("[string],[data-string]").forEach(e=>{this.objectManager.add(e)}),document.querySelectorAll("[string-copy-from],[data-string-copy-from]").forEach(e=>{let t=this.tools.domAttribute.process({element:e,key:"copy-from",fallback:""});t&&t.length>0&&this.objectManager.linkMirror(t,e)}),this.moduleManager.onResize(),this.moduleManager.onScroll(),this.moduleManager.onFrame()}setupSettings(e){this.context.settings={...this.context.settings,...e},this.onSettingsChange({isDesktop:this.data.viewport.windowWidth>1024,widthChanged:!0,heightChanged:!0,scrollHeightChanged:!0,isForceRebuild:!1})}onResizeObserverEvent(){this.debouncedResize()}onContainerTransitionEnd(e){e.target===this.context.data.scroll.container&&(this.onResize(),this.moduleManager.onResize(),this.moduleManager.onScroll(),this.moduleManager.onFrame())}onMouseMoveEvent(e){this.cursorController.onMouseMove(e),this.moduleManager.onMouseMove(e),R.measure(()=>{this.moduleManager.onMouseMoveMeasure()})}onWheelEvent(e){e.target.closest("[string-isolation],[data-string-isolation]")==null&&(this.scrollManager.get().onWheel(e),this.moduleManager.onWheel(e))}onScrollStart(){this.moduleManager.onScrollStart(),this.eventManager.emit("scroll:start",null)}onScrollStop(){this.moduleManager.onScrollStop(),this.eventManager.emit("scroll:stop",null)}onDirectionChange(){this.moduleManager.onDirectionChange()}onSettingsChange(e){this.cursorController.onSettingsChange(e),this.objectManager.onSettingsChange(e),this.moduleManager.onSettingsChange(e)}onScrollEvent(e){return e.preventDefault(),this.context.centers.invalidateAll(),this.scrollManager.get().onScroll(e),this.moduleManager.onScroll(),this.objectManager.checkInview(),this.eventManager.emit("lerp",this.data.scroll.lerped),this.eventManager.emit("scroll",this.data.scroll.current),R.measure(()=>{this.moduleManager.onScrollMeasure()}),!1}onUpdateEvent(){this.cursorController.onFrame(),this.scrollManager.get().onFrame(),this.moduleManager.onFrame(),R.mutate(()=>{T.begin(),this.moduleManager.onMutate(),T.commit()}),this.eventManager.emit("update",null)}onResize(e=!1){if(this.canRebuild==!1)return;let t=this.data.scroll.container,r=this.context.data.scroll,i=0,n=0;var o,s=0;let a=t.getBoundingClientRect();t.tagName=="BODY"?(i=window.innerWidth,n=window.innerHeight):(i=a.width,n=a.height),s=a.top,o=r.container.scrollHeight;let l=this.tools.transformScaleParser.process({value:window.getComputedStyle(t).transform});this.context.data.viewport.transformScale=window.getComputedStyle(t).scale=="none"?l:Number(window.getComputedStyle(t).scale),this.context.data.scroll.transformedCurrent=this.context.data.scroll.current*this.context.data.viewport.transformScale;let u=i>1024,d=this.prevWidth!==i,p=this.prevHeight!==n,m=this.context.data.viewport.contentHeight!==o,g=d||u&&p||m;this.context.data.scroll.topPosition=Math.floor(s),this.context.data.viewport.contentWidth=i,this.context.data.viewport.contentHeight=o,this.prevWidth=i,this.prevHeight=n,this.context.data.viewport.windowWidth=i,this.context.data.viewport.windowHeight=n;let h=window.getComputedStyle(document.documentElement).fontSize,v=parseFloat(h);this.context.data.viewport.baseRem=v*l,r.bottomPosition=this.context.data.viewport.contentHeight-n,(d||typeof e=="boolean"&&e)&&this.moduleManager.onResizeWidth(),(g||typeof e=="boolean"&&e)&&(this.context.data.scroll.container.scrollTop>0&&(this.context.data.scroll.current=this.context.data.scroll.container.scrollTop,this.context.data.scroll.target=this.context.data.scroll.container.scrollTop),this.scrollManager.updateResponsiveMode(),this.moduleManager.onResize(),this.onSettingsChange({isDesktop:u,widthChanged:d,heightChanged:p,scrollHeightChanged:m,isForceRebuild:e===!0}),this.moduleManager.onScroll(),this.moduleManager.onScrollMeasure(),this.moduleManager.onFrame())}scrollToElement(e,t=0){let r=document.querySelector(e);if(r){let n=r.getBoundingClientRect().top+window.pageYOffset-this.data.scroll.container.clientTop-t;this.context.data.scroll.delta=n-this.data.scroll.current}else console.warn(`Element not found: ${e}`)}scrollTo(e){this.scrollManager.get().scrollTo(e)}invalidateCenter(e){this.centers.invalidate(e)}invalidateCenters(){this.centers.invalidateAll()}destroy(){this.data.scroll.scrollContainer?.removeEventListener("scroll",this.onScrollBind),this.data.scroll.container?.removeEventListener("wheel",this.onWheelBind),this.data.scroll.elementContainer.removeEventListener("transitionend",this.onContainerTransitionEndBind),this.window.removeEventListener("resize",this.onResizeBind),this.root.removeEventListener("mousemove",this.onMouseMoveBind),this.loop.stop(),this.moduleManager.destroy(),this.eventManager.clearAll(),this.eventManager.off("wheel",this.onWheelBind)}};0&&(module.exports={CursorReactiveModule,StringAnchor,StringCursor,StringData,StringDelayLerpTracker,StringFPSTracker,StringForm,StringGlide,StringImpulse,StringLazy,StringLerp,StringLerpTracker,StringLoading,StringMagnetic,StringModule,StringObject,StringParallax,StringPositionTracker,StringProgress,StringProgressPart,StringResponsive,StringScrollbar,StringScroller,StringSequence,StringSplit,StringSpotlight,StringTune,StringVideoAutoplay,frameDOM,styleTxn});
24
24
  //# sourceMappingURL=index.cjs.map