@fiddle-digital/string-tune 0.0.25 → 0.0.26

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.
@@ -2,7 +2,7 @@ import { StringModule } from '../StringModule';
2
2
  export declare class StringResponsive extends StringModule {
3
3
  private queries;
4
4
  private matchMedias;
5
- constructor(visitor: any);
5
+ constructor(visitor: any, settings: any);
6
6
  onConnect(): void;
7
7
  onStart(): void;
8
8
  onResize(): void;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.StringTune=e():t.StringTune=e()}(this,(()=>(()=>{"use strict";var t={d:(e,s)=>{for(var i in s)t.o(s,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:s[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{StringCursor:()=>o,StringDisplacement:()=>w,StringFPSTracker:()=>O,StringLazy:()=>i,StringLoading:()=>n,StringMagnetic:()=>a,StringParallax:()=>S,StringPositionTracker:()=>A,StringProgress:()=>x,StringResponsive:()=>v,StringScrollbar:()=>y,StringSplit:()=>D,StringTune:()=>I,StringVideoAutoplay:()=>r,default:()=>I});class s{get type(){return this._type}constructor(t,e=null){this.settings=null,this.objectsMap=new Map,this.objects=new Array,this.htmlKey="",this._type=1,this.data=t.data,this.lerp=t.lerp,this.attribute=t.attribute,this.boundingClientRect=t.boundingClientRect,this.position=t.position,this.virtualCursor=t.virtualCursor,this.events=t.events,this.settings=e}destructor(){}onChangeScrollParams(){}tryConnect(t){let e=this.attribute.process(t.el,"string","").split("|"),s=!1;return e.forEach((t=>{t==this.htmlKey&&(s=!0)})),s}connect(t){t.connect(this),this.onConnect(t)}addObject(t,e){this.objectsMap.set(t,e),this.objects=Array.from(this.objectsMap).map((([t,e])=>e))}removeObject(t){this.objectsMap.delete(t),this.objects=Array.from(this.objectsMap).map((([t,e])=>e))}onStart(){}onUpdate(t){}onResize(){}onConnect(t){}onRebuild(){}onScroll(t){}onMouseMove(t){}onWheel(t){}onChangeDevice(){}onChangeScrollDirection(){}onMutationObserver(t,e){}}class i extends s{constructor(t){super(t),this.htmlKey="lazy"}onStart(){document.querySelectorAll("img[string-lazy]").forEach((t=>{this.getImageSize(t,t.getAttribute("string-lazy")),t.classList.add("lazyLoad"),t.src=t.getAttribute("string-lazy"),t.addEventListener("load",(()=>{t.classList.add("-loaded")}))}))}onConnect(t){t.el}getImageSize(t,e){return new Promise(((s,i)=>{const n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=()=>{if(206===n.status||200===n.status){const e=n.response,r=new Blob([e]),o=new Image;o.onload=()=>{t.style.aspectRatio=`${o.width} / ${o.height}`,s({width:o.width,height:o.height}),URL.revokeObjectURL(o.src)},o.onerror=()=>{i(new Error("Failed to load image"))},o.src=URL.createObjectURL(r)}else i(new Error("Failed to load image"))},n.onerror=()=>{i(new Error("Network error"))},n.setRequestHeader("Range","bytes=0-"),n.send()}))}}class n extends s{constructor(t,e=null){super(t),this.loadingTimeout=0,this._type=2,null!=e&&null!=e.timeout&&(this.loadingTimeout=e.timeout)}onStart(){setTimeout((()=>{document.documentElement.classList.add("-loaded")}),this.loadingTimeout)}}class r extends s{constructor(t){super(t),this.htmlKey="autoplay"}onConnect(t){const e=t.el,s=this.attribute.process(e,"string-src",""),i=null!=this.attribute.process(e,"string-started",null);"video"===e.tagName.toLowerCase()&&s&&0==i?(e.setAttribute("muted","muted"),e.setAttribute("playsinline",""),e.setAttribute("loop",""),e.setAttribute("autoplay",""),e.src=s,e.muted=!0,e.addEventListener("canplaythrough",(()=>{0==(null!=this.attribute.process(e,"string-started",null))&&this.tryPlay(t,e)}),{once:!0}),e.load()):console.warn("StringVideoAutoplay: Element is not a <video> tag or string-src is missing.",t.el)}tryPlay(t,e){e.play().catch((e=>{console.warn("Autoplay failed:",e),t.started=!1})).then((()=>{t.started=!0,e.setAttribute("string-started","")}))}}class o extends s{constructor(t,e=null){super(t),this.lerpFactor=.2,this.oldX=0,this.oldY=0,this.enterObjectsMap=new Map,this.enterObjects=new Array,this.htmlKey="cursor",this.cursor=document.querySelector("[string-cursor]")}onUpdate(t){if(this.virtualCursor.smoothX!=this.oldX||this.virtualCursor.smoothY!=this.oldY){let t={lerpX:this.virtualCursor.lerpX,lerpY:this.virtualCursor.lerpY,x:this.virtualCursor.x,y:this.virtualCursor.y};this.events.emit("cursor",t),this.cursor.style.setProperty("--x",this.virtualCursor.smoothX),this.cursor.style.setProperty("--y",this.virtualCursor.smoothY),this.oldX=this.virtualCursor.smoothX,this.oldY=this.virtualCursor.smoothY}this.objects.forEach((t=>{if(t.isMouseMove){let e=t.el.getBoundingClientRect();const s=this.calculateOffset("center",this.virtualCursor.x-e.left,e.width),i=this.calculateOffset("center",this.virtualCursor.y-e.top,e.height);t.mouseX+=this.lerp.process(t.mouseX,s,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}else if(0!=t.mouseX||0!=t.mouseY){let e=t.el.getBoundingClientRect();const s=this.calculateOffset("center",t.halfWidth,e.width),i=this.calculateOffset("center",t.halfHeight,e.height);t.mouseX+=this.lerp.process(t.mouseX,s,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}}))}onConnect(t){let e=t.el;null!=this.settings&&null!=this.settings["string-lerp"]&&(t.lerp=this.settings["string-lerp"]);let s=()=>{e.addEventListener("mousemove",i),e.addEventListener("mouseleave",n),t.isMouseMove=!0,null!=t.cursorTarget&&t.cursorTarget.classList.add("-show")},i=t=>{},n=()=>{e.removeEventListener("mousemove",i),e.removeEventListener("mouseleave",n),t.isMouseMove=!1,null!=t.cursorTarget&&t.cursorTarget.classList.remove("-show")};t.onEnter=()=>{e.addEventListener("mouseenter",s)},t.onLeave=()=>{e.removeEventListener("mouseenter",s),e.removeEventListener("mousemove",i),e.removeEventListener("mouseleave",n)}}setMouseCoordinates(t,e,s){0==t.selfDisable&&(t.el.style.setProperty("--mouse-x",e.toFixed(2)),t.el.style.setProperty("--mouse-y",s.toFixed(2))),t.connects.forEach((t=>{t.style.setProperty("--mouse-x",e.toFixed(2)),t.style.setProperty("--mouse-y",s.toFixed(2))}))}calculateOffset(t,e,s){switch(t){case"start":return e/s;case"end":return(e-s)/s;default:return(e-s/2)/(s/2)}}}class a extends s{constructor(t){super(t),this.htmlKey="magnetic"}onConnect(t){t.el,null!=this.settings&&(null!=this.settings["string-strength"]&&(t.strength=this.settings["string-strength"]),null!=this.settings["string-radius"]&&(t.radius=this.settings["string-radius"]),null!=this.settings["string-lerp"]&&(t.lerp=this.settings["string-lerp"]))}onMouseMove(t){this.objects.forEach((e=>{const s=e.el.getBoundingClientRect(),i=s.left+e.halfWidth,n=s.top+e.halfHeight,r=t.clientX-i,o=t.clientY-n,a=Math.sqrt(r**2+o**2);a<e.radius?(e.magneticTargetX=r*e.strength*((e.radius-a)/e.radius),e.magneticTargetY=o*e.strength*((e.radius-a)/e.radius),e.isMagneting=!0):(e.magneticTargetX=0,e.magneticTargetY=0)}))}onUpdate(t){this.objects.forEach((t=>{if(t.isMagneting){let e=this.lerp.process(t.magneticX,t.magneticTargetX,t.lerp),s=this.lerp.process(t.magneticY,t.magneticTargetY,t.lerp);e>-.01&&e<.01&&(e=0,t.magneticX=t.magneticTargetX),s>-.01&&s<.01&&(s=0,t.magneticY=t.magneticTargetY),t.magneticX+=e,t.magneticY+=s,t.el.style.setProperty("--magnetic-x",t.magneticX.toString()),t.el.style.setProperty("--magnetic-y",t.magneticY.toString()),t.magneticTargetX!=t.magneticX&&t.magneticTargetY!=t.magneticY||(t.isMagneting=!1)}}))}}class l{process(t,e,s){return s*(e-t)}}class h{constructor(){this._lF=.1,this.lerp=new l,this._x=0,this._y=0,this._lerpX=0,this._lerpY=0,this.targetX=0,this.targetY=0}get x(){return this.targetX}get y(){return this.targetY}get smoothX(){return this._x}get smoothY(){return this._y}get lerpX(){return this._lerpX}get lerpY(){return this._lerpY}onMouseMove(t){this.targetX=t.clientX,this.targetY=t.clientY}onUpdate(){this._lerpX=this.lerp.process(this._x,this.targetX,this._lF),this._lerpY=this.lerp.process(this._y,this.targetY,this._lF),this._x=Math.floor(this._x+this._lerpX),this._y=Math.floor(this._y+this._lerpY)}}const c="top",d="bottom",u="left",p="right";class m{constructor(t){this.id="",this.oStart=0,this.oEnd=0,this.size=0,this.startPos=0,this.endPos=0,this.differencePos=0,this.factor=1,this.inviewTop=1,this.inviewBottom=1,this.sElPos="",this.sScrPos="",this.eElPos="",this.eScrPos="",this.halfWidth=0,this.halfHeight=0,this.start=0,this.end=0,this.mouseX=0,this.mouseY=0,this.magneticTargetX=0,this.magneticTargetY=0,this.magneticX=0,this.magneticY=0,this.lerp=0,this.strength=0,this.radius=0,this.parallaxPositionStart=0,this.parallaxPositionEnd=0,this.connects=new Array,this.cursorTarget=null,this.key="--progress",this.showObserver=null,this.progressObserver=null,this.inviewObserver=null,this.repeat=!1,this.selfDisable=!1,this.active=!1,this.abs=!1,this.isMouseMove=!1,this.started=!1,this.isMagneting=!1,this.onEnter=()=>{},this.onLeave=()=>{},this.modules=new Array,this.el=t}enter(){this.active=!0,this.modules.forEach((t=>{t.addObject(this.id,this)})),this.onEnter()}leave(){this.active=!1,this.modules.forEach((t=>{t.removeObject(this.id)})),this.onLeave()}show(){this.el.classList.add("-inview")}hide(){this.repeat&&this.el.classList.remove("-inview")}connect(t){this.modules.push(t)}calculatePositions(t){this.sElPos===c&&this.sScrPos===c||this.sElPos===u&&this.sScrPos===u?this.startPos=this.start-this.oEnd:this.sElPos===c&&this.sScrPos===d||this.sElPos===u&&this.sScrPos===p?this.startPos=this.start-t-this.oEnd:this.sElPos===d&&this.sScrPos===c||this.sElPos===p&&this.sScrPos===u?this.startPos=this.start+this.size-this.oEnd:(this.sElPos===d&&this.sScrPos===d||this.sElPos===p&&this.sScrPos===p)&&(this.startPos=this.start-t-this.oEnd+this.size),this.eElPos===c&&this.eScrPos===c||this.eElPos===u&&this.eScrPos===u?this.endPos=this.start+this.oStart:this.eElPos===c&&this.eScrPos===d||this.eElPos===u&&this.eScrPos===p?this.endPos=this.start-t+this.oStart:this.eElPos===d&&this.eScrPos===c||this.eElPos===p&&this.eScrPos===u?this.endPos=this.start+this.size+this.oStart:(this.eElPos===d&&this.eScrPos===d||this.eElPos===p&&this.eScrPos===p)&&(this.endPos=this.start-t+this.size+this.oStart),this.differencePos=this.endPos-this.startPos}}var g;!function(t){t[t.Mobile=0]="Mobile",t[t.Tablet=1]="Tablet",t[t.Laptop=2]="Laptop",t[t.Desktop=3]="Desktop"}(g||(g={}));class b{constructor(t){var e;this.min=void 0,this.max=void 0,this.enable=!0,this.min=null==t?void 0:t.min,this.max=null==t?void 0:t.max,this.enable=null===(e=null==t?void 0:t.enable)||void 0===e||e}setEnable(t=!0){this.enable=t}setRange(t,e){this.min=null!=t?t:void 0,this.max=null!=e?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}}class v extends s{constructor(t){super(t),this.queries={[g.Mobile]:new b({max:359}),[g.Tablet]:new b({min:360,max:1079}),[g.Laptop]:new b({min:1080,max:1365}),[g.Desktop]:new b({min:1366})},this.matchMedias={[g.Mobile]:window.matchMedia(this.queries[g.Mobile].mediaQuery),[g.Tablet]:window.matchMedia(this.queries[g.Tablet].mediaQuery),[g.Laptop]:window.matchMedia(this.queries[g.Laptop].mediaQuery),[g.Desktop]:window.matchMedia(this.queries[g.Desktop].mediaQuery)},this._type=2}onConnect(){var t,e,s,i;if(null!=this.settings&&null!=this.settings.settings){let n=this.settings.settings;n.mobile?(this.queries[g.Mobile].enable=!0,this.queries[g.Mobile].setRange(null==n.mobile.min?null:n.mobile.min,null!==(t=n.mobile.max)&&void 0!==t?t:null),this.matchMedias[g.Mobile]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Mobile].enable=!1,n.tablet?(this.queries[g.Tablet].enable=!0,this.queries[g.Tablet].setRange(null==n.mobile.min?null:n.mobile.min,null!==(e=n.mobile.max)&&void 0!==e?e:null),this.matchMedias[g.Tablet]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Tablet].enable=!1,n.laptop?(this.queries[g.Laptop].enable=!0,this.queries[g.Laptop].setRange(null==n.mobile.min?null:n.mobile.min,null!==(s=n.mobile.max)&&void 0!==s?s:null),this.matchMedias[g.Laptop]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Laptop].enable=!1,n.desktop?(this.queries[g.Desktop].enable=!0,this.queries[g.Desktop].setRange(null==n.mobile.min?null:n.mobile.min,null!==(i=n.mobile.max)&&void 0!==i?i:null),this.matchMedias[g.Desktop]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Desktop].enable=!1}}onStart(){this.updateElements()}onResize(){this.updateElements()}updateElements(){const t=this.matchMedias[g.Mobile].matches&&this.queries[g.Mobile].enable,e=this.matchMedias[g.Tablet].matches&&this.queries[g.Tablet].enable,s=this.matchMedias[g.Laptop].matches&&this.queries[g.Laptop].enable,i=this.matchMedias[g.Desktop].matches&&this.queries[g.Desktop].enable;document.querySelectorAll("[string-mobile], [string-tablet], [string-laptop], [string-desktop]").forEach((n=>{let r=!1;n.hasAttribute("string-mobile")&&t&&(r=!0),n.hasAttribute("string-tablet")&&e&&(r=!0),n.hasAttribute("string-laptop")&&s&&(r=!0),n.hasAttribute("string-desktop")&&i&&(r=!0),r?n.classList.add("-show"):n.classList.remove("-show")}))}}class f{constructor(t,e,s){this.isDragging=!1,this.startY=0,this.startScrollPosition=0,this.data=t,this.scrollbar=e,this.thumb=s}onResize(){const t=this.data.psH,e=this.data.wS,s=e/t*e;this.thumb.style.setProperty("--size",s+"px"),t<=e?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psH,e=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*e+"px")}mouseDownEvent(t){this.startY=t.clientY,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const e=t.clientY-this.startY,s=this.startScrollPosition+e/this.data.wS*this.data.psH;this.data.c=s,this.data.t=s,window.scrollTo(0,s),this.updateThumb()}}class E{constructor(t,e,s){this.isDragging=!1,this.startCoordinate=0,this.startScrollPosition=0,this.data=t,this.scrollbar=e,this.thumb=s}onResize(){const t=this.data.psW,e=this.data.wS,s=e/t*e;this.thumb.style.setProperty("--size",s+"px"),t<=e?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psW,e=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*e+"px")}mouseDownEvent(t){this.startCoordinate=t.clientX,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const e=t.clientX-this.startCoordinate,s=this.startScrollPosition+e/this.data.wS*this.data.psW;this.data.c=s,this.data.t=s,window.scrollTo(0,s),this.updateThumb()}}class y extends s{constructor(t){super(t),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)}onStart(){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(t){this.updateThumb(),this.showScrollbar(),this.hideScrollbar()}onResize(){this.scrollbarState.onResize()}onChangeScrollParams(){"disable"==this.data.sM&&"disable"!=this.scrollMode&&this.scrollbar.classList.add("-hide"),("smooth"==this.data.sM&&"disable"==this.scrollMode||"default"==this.data.sM&&"disable"==this.scrollMode)&&this.scrollbar.classList.remove("-hide"),this.scrollMode=this.data.sM}onChangeScrollDirection(){"horizontal"==this.data.sD?this.scrollbarState=this.scrollbarStateVertical:this.scrollbarState=this.scrollbarStateHorizontal,this.scrollbarState.onResize()}addCustomStyles(){const t=document.createElement("style");t.textContent="\n ::-webkit-scrollbar {\n display: none;\n width: 0;\n height: 0;\n -webkit-appearance: none;\n }\n body {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n .-without-scrollbar::-webkit-scrollbar {\n display: none;\n }\n .-without-scrollbar {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n ",document.head.appendChild(t)}createScrollbar(){this.scrollbar=document.createElement("div"),this.scrollbar.classList.add("scrollbar"),this.thumb=document.createElement("div"),this.thumb.classList.add("thumb"),this.scrollbar.appendChild(this.thumb),document.body.appendChild(this.scrollbar),this.scrollbarStateHorizontal=new f(this.data,this.scrollbar,this.thumb),this.scrollbarStateVertical=new E(this.data,this.scrollbar,this.thumb),this.scrollbarState=this.scrollbarStateHorizontal}updateThumb(){this.scrollbarState.updateThumb()}mouseDownEvent(t){this.isDragging=!0,this.scrollbarState.mouseDownEvent(t),document.body.style.userSelect="none",this.scrollbar.classList.add("-touch")}mouseMoveEvent(t){this.isDragging&&this.scrollbarState.mouseMoveEvent(t)}mouseUpEvent(){this.isDragging=!1,document.body.style.userSelect="",this.hideScrollbar(),this.scrollbar.classList.remove("-touch")}showScrollbar(){this.scrollbar.classList.add("-scroll")}hideScrollbar(){this.scrollTimeout&&clearTimeout(this.scrollTimeout),this.scrollTimeout=setTimeout((()=>{this.scrollbar.classList.remove("-scroll")}),1e3)}}class w extends s{constructor(t){super(t),this.oldLerp=0,this.htmlKey="displacement."}onUpdate(t){0!=this.oldLerp&&0==t.v&&(this.oldLerp=0,document.documentElement.style.setProperty("--lerp","0")),t.v>0&&(document.documentElement.style.setProperty("--lerp",t.v.toString()),this.oldLerp=t.v)}}class S extends s{constructor(t){super(t),this.setupParallax=(t,e)=>{let s=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+e*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=s,t.connects.forEach((t=>{t.style.transform=s}))},this.onScrollDesktopEvent=()=>{this.objects.forEach((t=>{let e=Math.min(1,Math.max(0,(this.data.c-t.startPos)/t.differencePos));t.el.style.setProperty(t.key,e.toString()),this.setupParallax(t,e)}))},this.onScrollMobileEvent=()=>{},this.onScrollEvent=this.onScrollDesktopEvent,this.htmlKey="parallax"}onConnect(t){if(null!=this.settings){if(null!=this.settings["string-parallax-bias"]){let e=this.attribute.process(t.el,"string-parallax-bias",this.settings["string-parallax-bias"]);t.parallaxPositionStart=.5*e-.5,t.parallaxPositionEnd=.5+.5*(1-e)}null!=this.settings["string-parallax"]&&(t.factor=this.settings["string-parallax"])}}onScroll(t){this.onScrollEvent()}onChangeScrollDirection(){"vertical"==this.data.sD?this.setupParallax=(t,e)=>{let s=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+e*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=s,t.connects.forEach((t=>{t.style.transform=s}))}:this.setupParallax=(t,e)=>{let s=`translate3d(${t.factor*this.data.wS*t.parallaxPositionStart+e*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0, 0)`;t.el.style.transform=s,t.connects.forEach((t=>{t.style.transform=s}))}}onResize(){window.innerWidth>1080?this.onScrollEvent=this.onScrollDesktopEvent:(this.onScrollEvent=this.onScrollMobileEvent,this.objects.forEach((t=>{this.setupParallax(t,.5)})))}}class x extends s{constructor(t){super(t),this.htmlKey="progress"}onScroll(t){this.objects.forEach((t=>{this.setUpObject(t,this.data.c)}))}onConnect(t){t.onEnter=()=>{this.setUpObject(t,this.data.c)}}setUpObject(t,e){let s=Math.min(1,Math.max(0,(e-t.startPos)/t.differencePos));this.events.emit(`progress_${t.id}`,s),t.el.style.setProperty(t.key,s.toString()),t.connects.forEach((e=>{e.style.setProperty(t.key,s.toString())}))}}class M{constructor(t,e,s){this.isProg=!1,this.isParallaxEnabled=!1,this.name="",this.v=0,this.vT=0,this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(0,this.data.c)},this._scrollDirection="vertical",this.d=t,this.settings=e,this.data=s,this.scrollContainer=window}onUpdate(){}onWheel(t){}onScroll(t){}set scrollDirection(t){this._scrollDirection=t,"vertical"==this._scrollDirection?this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(0,this.data.c)}:"horizontal"==this._scrollDirection&&(this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(this.data.c,0)})}}class P extends M{constructor(t,e,s){super(t,e,s),this.animateC=0,this.name="mobile"}onUpdate(){this.vT=this.d.documentElement.scrollTop-this.animateC,this.animateC=this.d.documentElement.scrollTop,this.v=this.vT}onScroll(t){this.data.c=this.d.documentElement.scrollTop,this.data.t=this.d.documentElement.scrollTop,this.data.d=0}}class C extends M{constructor(t,e,s){super(t,e,s),this.name="disable"}onUpdate(){}onWheel(t){t.preventDefault()}onScroll(t){t.preventDefault()}}class L extends M{constructor(t,e,s){super(t,e,s),this.name="desktop",this.isScroll=!1,this.name="desktop"}onUpdate(){if(this.data.v=(this.data.t-this.data.c)*this.settings.speed,0!=this.data.v){let t;this.isScroll=!0,this.data.v>0?(t=Math.ceil(this.data.c+this.data.v),document.documentElement.classList.add("-scroll-forward"),document.documentElement.classList.remove("-scroll-back")):(t=Math.floor(this.data.c+this.data.v),document.documentElement.classList.add("-scroll-back"),document.documentElement.classList.remove("-scroll-forward")),this.data.c!=t?(this.data.c=t,this.isProg=!0,this.onCalcUpdate()):this.data.c=t}else this.isScroll&&(this.isScroll=!1,this.data.v=0,this.data.c=this.data.t,this.isProg=!1,document.documentElement.classList.remove("-scroll-back"),document.documentElement.classList.remove("-scroll-forward"),document.documentElement.style.setProperty("--lerp","0"))}onWheel(t){0!=t.deltaY&&(t.preventDefault(),this.data.d=t.deltaY,this.data.t+=this.data.d,this.data.t=Math.min(Math.max(this.data.t,0),this.data.bS))}}class _{constructor(){this.sC=0,this.sA=.13,this.sD=.04}get speed(){return this.sC}get speedAccelerate(){return this.sA}get speedDecelerate(){return this.sD}set speedAccelerate(t){this.sA=t,this.updateScrollParams()}set speedDecelerate(t){this.sD=t,this.updateScrollParams()}updateScrollParams(){this.sC=this.sA*(1-this.sD)}}class D extends s{constructor(t){super(t),this.htmlKey="split"}onStart(){}onResize(){document.querySelectorAll('[string="split"].-splited').forEach((t=>{const e=this.parseSplitOptions(t.getAttribute("string-split"));t.innerHTML=this.split(e,t).html}))}onConnect(t){let e=t.el;if(!e.classList.contains("-splited")){e.classList.add("-splited"),e.setAttribute("string-split-original",e.innerHTML);const t=this.parseSplitOptions(e.getAttribute("string-split"));e.innerHTML=this.split(t,e).html}}parseSplitOptions(t){const e={line:[],word:[],char:[],charLine:[],charWord:[],wordLine:[]};return t&&t.split("|").forEach((t=>{const s=t.match(/^(\w+-)?(\w+)(\[(.*?)\])?$/);if(s){const t=s[1]||"",i=s[2],n=s[4]?s[4].split(","):[];switch(t+i){case"char-line":e.charLine.push(this.parseParam(n));break;case"char-word":e.charWord.push(this.parseParam(n));break;case"word-line":e.wordLine.push(this.parseParam(n));break;case"line":e.line.push(this.parseParam(n));break;case"word":e.word.push(this.parseParam(n));break;case"char":e.char.push(this.parseParam(n))}}})),e}parseParam(t){const e={align:"start"};return t.forEach((t=>{if("abs"===t)e.abs=!0;else if(t.startsWith("random")){const s=t.match(/random\((\d+),(\d+)\)/);s?(e.random={min:parseInt(s[1]),max:parseInt(s[2])},e.align="random"):e.align="random"}else["start","center","end"].includes(t)?e.align=t:e.align="start"})),e}split(t,e){let s=e.getAttribute("string-split-original");if(0===s.length)return"";s=this.decodeHtmlEntity(s);const i=document.createElement("span"),n=s.split(/\s+/);let r=0,o=0;const a=s.replace(/\s/g,"").length,l=document.createElement("span"),h=window.getComputedStyle(e);l.style.fontFamily=h.fontFamily,l.style.fontSize=h.fontSize,l.style.letterSpacing=h.letterSpacing,l.style.lineHeight=h.lineHeight,l.style.fontWeight=h.fontWeight,l.classList.add("-s-char"),document.body.appendChild(l);let c=[],d=[],u=0;n.forEach(((t,s)=>{l.textContent=t,t.length>0&&(l.textContent+=" ");const i=l.offsetWidth,n={text:t,width:i,chars:new Array};Array.from(t).forEach(((t,e)=>{const s={text:t};n.chars.push(s)})),u+i>e.offsetWidth&&(c.push(d),d=[],u=0,r+=d.length),d.push(n),u+=i})),c.push(d);let p=!1;null!=t.line&&t.line.length>0&&(p=!0),null!=t.wordLine&&t.wordLine.length>0&&(p=!0),null!=t.charLine&&t.charLine.length>0&&(p=!0);let m=0;if(p)for(let e=0;e<c.length;e++)this.appendVirtualLineToDOM(e,c.length,n.length,i,c[e],t,r,a,m),m+=c[e].length;else for(let e=0;e<c.length;e++)c[e].forEach(((e,s)=>{if(e.chars.length>0){const l=document.createElement("span");l.classList.add("-s-word"),e.chars.forEach(((s,i)=>{const n=document.createElement("span");n.classList.add("-s-char"),n.textContent=s.text,this.applyOptions(n,t.char,r,"char",i,a),this.applyOptions(n,t.charWord,i,"char-word",i,e.text.length),l.appendChild(n),r++})),this.applyOptions(l,t.word,o,"word",s,n.length),e.chars.length>0&&(l.innerHTML+=" "),i.appendChild(l),o++}}));return document.body.removeChild(l),{html:i.innerHTML}}appendVirtualLineToDOM(t,e,s,i,n,r,o,a,l){const h=document.createElement("span");h.classList.add("-s-line"),this.applyOptions(h,r.line,t,"line",0,e);let c=0,d=0,u=0;n.forEach(((t,e)=>{u+=t.text.length})),n.forEach(((t,e)=>{if(t.chars.length>0){const i=document.createElement("span");i.classList.add("-s-word"),t.chars.forEach(((e,s)=>{const n=document.createElement("span");n.classList.add("-s-char"),n.textContent=e.text,this.applyOptions(n,r.char,o,"char",s,a),this.applyOptions(n,r.charLine,c,"char-line",s,u),this.applyOptions(n,r.charWord,s,"char-word",s,t.text.length),i.appendChild(n),o++,c++})),this.applyOptions(i,r.word,l+d,"word",l+d,s-1),this.applyOptions(i,r.wordLine,e,"word-line",e,n.length),e<n.length-1&&(i.innerHTML+=" "),h.appendChild(i),d++}})),i.appendChild(h)}applyOptions(t,e,s,i,n,r){e&&e.forEach(((e,o)=>{let a=this.calculateIndex(e,s,n,r);const l=this.generateVariableName(i,e,o);t.style.setProperty(l,String(a))}))}createSpaceSpan(){const t=document.createElement("span");return t.innerHTML=" ",t}decodeHtmlEntity(t){return t.replace(/&amp;/g,"&")}calculateIndex(t,e,s,i){let n=e;if("random"===t.align){void 0===t.random&&(t.random={min:0,max:i});const e=t.random.min||0,s=t.random.max||i;n=Math.floor(Math.random()*(s-e+1))+e}return"end"===t.align?n=i-n-1:"center"===t.align&&(n-=Math.floor(i/2)),t.abs&&(n=Math.abs(n)),n}generateVariableName(t,e,s){let i=`--${t}`;return e.align&&(i+=`-${e.align}`),i}}class T{constructor(){this.isAnimationStarted=!1,this.requestAnimationId=0,this.onFrame=()=>{}}start(t){this.isAnimationStarted||(this.fpsInterval=1e3/t,this.then=Date.now(),this.animate(),this.isAnimationStarted=!0)}stop(){this.isAnimationStarted&&(cancelAnimationFrame(this.requestAnimationId),this.isAnimationStarted=!1)}animate(){this.requestAnimationId=requestAnimationFrame((()=>{this.animate()})),this.now=Date.now(),this.elapsed=this.now-this.then,this.elapsed>this.fpsInterval&&(this.then=this.now-this.elapsed%this.fpsInterval,this.onFrame())}}class O extends s{constructor(t){super(t),this.callCount=0,this._type=2}createDisplayElement(){this.displayElement=document.createElement("div"),this.displayElement.style.position="fixed",this.displayElement.style.bottom="10px",this.displayElement.style.right="10px",this.displayElement.style.backgroundColor="#000000",this.displayElement.style.border="1px solid rgba(255, 255, 255, 0.2)",this.displayElement.style.zIndex="9999",this.displayElement.setAttribute("data-fps","0"),document.body.appendChild(this.displayElement);const t=document.createElement("style");t.innerHTML="\n [data-fps]::after {\n content: 'FPS: ' attr(fps);\n position: relative;\n display: block;\n color: #ffffff;\n padding: 5px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n ",document.head.appendChild(t)}onStart(){this.createDisplayElement(),this.intervalId=setInterval((()=>{this.displayElement.setAttribute("fps",`${this.callCount}`),this.callCount=0}),1e3)}onUpdate(t){this.callCount++}destructor(){clearInterval(this.intervalId),document.body.removeChild(this.displayElement)}}class A extends s{constructor(t){super(t),this.callCount=0,this._type=2}createDisplayElement(){this.displayElement=document.createElement("div"),this.displayElement.style.position="fixed",this.displayElement.style.bottom="10px",this.displayElement.style.left="10px",this.displayElement.style.backgroundColor="#000000",this.displayElement.style.border="1px solid rgba(255, 255, 255, 0.2)",this.displayElement.style.zIndex="9999",this.displayElement.setAttribute("data-position","0"),document.body.appendChild(this.displayElement);const t=document.createElement("style");t.innerHTML="\n [data-position]::after {\n content: attr(direction) 'Top: ' attr(value) 'px';\n position: relative;\n display: block;\n color: #ffffff;\n padding: 5px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n ",document.head.appendChild(t)}onStart(){this.createDisplayElement()}onScroll(t){let e="";t.c<t.t&&(e="↓"),t.c>t.t&&(e="↑"),this.displayElement.setAttribute("direction",e),this.displayElement.setAttribute("value",`${this.data.c}`)}onUpdate(t){this.callCount++}destructor(){document.body.removeChild(this.displayElement)}}class W{process(t,e,s=null){return null==t.getAttribute(e)?s:t.getAttribute(e)}}class k{process(t){return t.getBoundingClientRect()}}class j{constructor(){this.t=0,this.c=0,this.d=0,this.v=0,this.bS=0,this.cF=1,this.wS=0,this.hnwS=0,this.psW=0,this.psH=0,this.scsW=1,this.scsH=1,this.sD="vertical",this.sM="smooth"}}class z{constructor(){this.eventsByKey=new Map,this.events=new Array}on(t,e){var s;0==this.eventsByKey.has(t)&&this.eventsByKey.set(t,[]),null===(s=this.eventsByKey.get(t))||void 0===s||s.push(e),this.updateAllEvents()}has(t){return this.eventsByKey.has(t)}emit(t,e){var s;this.eventsByKey.has(t)&&(null===(s=this.eventsByKey.get(t))||void 0===s||s.forEach((t=>{t(e)})))}off(t,e){let s=this.eventsByKey.get(t);null!=s&&this.eventsByKey.set(t,s.filter((t=>t!==e))),this.updateAllEvents()}all(t){this.events.forEach((e=>{e(t)}))}updateAllEvents(){Array.from(this.eventsByKey.values()).forEach((t=>{t.forEach((t=>{this.events.push(t)}))}))}}class B{parseSingle(t,e,s,i){let n,r=t.startsWith("-");return r&&(t=t.slice(1)),"selfHeight"===t?n=e.offsetHeight:t.endsWith("px")?n=parseFloat(t):t.endsWith("%")?n=parseFloat(t)*s/100:t.endsWith("rem")&&(n=parseFloat(t)*i),r?-n:n}}class R{process(t,e=document.body){let s;try{s=e.getBoundingClientRect()}catch(t){s=document.body.getBoundingClientRect()}let i=function(t){let{top:e,left:s,width:i,height:n}=t.getBoundingClientRect(),r=function(t){return window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)}))}(t);if(6==r.length){var o=r;let t=o[0]*o[3]-o[1]*o[2];return{width:i/o[0]==0?1:o[0],height:n/o[3]==0?1:o[3],left:(s*o[3]-e*o[2]+o[2]*o[5]-o[4]*o[3])/t,top:(-s*o[1]+e*o[0]+o[4]*o[1]-o[0]*o[5])/t}}return{top:e,left:s,width:i,height:n}}(t);return{top:i.top-s.top,left:i.left-s.left}}}function H(){return"ontouchstart"in window||navigator.maxTouchPoints>0}class I{get scrollDirection(){return this.data.sD}set scrollDirection(t){this.data.sD=t,this.sEn.scrollDirection=t,this.sEnSmooth.scrollDirection=t,this.sEnDefault.scrollDirection=t,this.sEnDisable.scrollDirection=t,"horizontal"==t?(document.documentElement.classList.add("-horizontal"),document.documentElement.classList.remove("-vertical")):(document.documentElement.classList.add("-vertical"),document.documentElement.classList.remove("-horizontal")),this.rebuild(),this.initObjects(),this.modules.forEach((t=>{t.onChangeScrollDirection()}))}get speedAccelerate(){return this.settings.speedAccelerate}set speedAccelerate(t){this.settings.speedAccelerate=t}get speedDecelerate(){return this.settings.speedDecelerate}set speedDecelerate(t){this.settings.speedDecelerate=t}get scrollPosition(){return this.data.c}set scrollPosition(t){this.data.c=t,this.data.t=t,window.scrollTo(0,this.data.c),this.modules.forEach((t=>{t.onScroll(this.data)}))}set scrollContainer(t){let e=null!=this.data.sC;e&&(this.data.sC.removeEventListener("scroll",this.onScrollBind),this.data.sC.removeEventListener("resize",this.onResizeBind)),this.sEn.scrollContainer=t,this.sEnSmooth.scrollContainer=t,this.sEnDefault.scrollContainer=t,this.sEnDisable.scrollContainer=t,this.data.sC=t,e&&(this.data.sC.addEventListener("scroll",this.onScrollBind),this.data.sC.addEventListener("resize",this.onResizeBind)),this.rebuild(),this.initObjects()}set scrollMobileMode(t){this.mMode=t,this.updateModeParams()}set scrollDesktopMode(t){this.dMode=t,this.updateModeParams()}updateModeParams(){switch(this.window.innerWidth<1024||H()?this.scrollMode=this.mMode:this.scrollMode=this.dMode,this.scrollMode){case"disable":this.data.sM="disable",this.sEn=this.sEnDisable,this.onChangeScrollParams(),document.documentElement.style.overflow="hidden";break;case"default":this.data.sM="default",this.sEn=this.sEnDefault,this.onChangeScrollParams(),document.documentElement.style.overflow="auto";break;default:this.data.sM="smooth",this.sEn=this.sEnSmooth,this.onChangeScrollParams(),document.documentElement.style.overflow="auto"}}constructor(){this.modules=new Array,this.modulesUI=new Array,this.events=new z,this.loop=new T,this.wW=0,this.wH=0,this._virtualCursor=new h,this._lerp=new l,this._attribute=new W,this._boundingClientRect=new k,this._position=new R,this.objects=new Map,this.connectQueue=new Array,this.globalId=1,this._parser=new B,this.scrollMode="smooth",this.mMode="default",this.dMode="smooth",this.defaultSettings={stringOffsetStart:"0%",stringOffsetEnd:"0%",stringEnterEl:"top",stringExitEl:"bottom",stringEnterVp:"bottom",stringExitVp:"top",stringInviewTop:"0%",stringInviewBottom:"0%",stringKey:"--progress",stringStrength:.3,stringRadius:150,stringLerp:.2,stringParallaxBias:0,stringParallax:.2},this.root=document.body,this.window=window,this.settings=new _,this.data=new j,this.settings.speedAccelerate=.13,this.settings.speedDecelerate=.04,this.sEnSmooth=new L(document,this.settings,this.data),this.sEnDefault=new P(document,this.settings,this.data),this.sEnDisable=new C(document,this.settings,this.data),this.sEn=this.sEnSmooth,this.scrollContainer=window,this.data.sC=this.window,this.data.sD="vertical",document.documentElement.classList.add("-vertical"),this.onWheelBind=this.onWheelEvent.bind(this),this.onScrollBind=this.onScrollEvent.bind(this),this.onResizeBind=this.onResizeEvent.bind(this),this.onMouseMoveBind=this.onMouseMoveEvent.bind(this),this.loop.onFrame=()=>{this.onUpdateEvent()},this.rebuild()}static getInstance(){return I.i||(I.i=new I),I.i}use(t,e=null){const s=new t({data:this.data,lerp:this._lerp,attribute:this._attribute,boundingClientRect:this._boundingClientRect,position:this._position,virtualCursor:this._virtualCursor,events:this.events},e);1==s.type&&this.modules.push(s),2==s.type&&this.modulesUI.push(s)}start(t){this.data.sC.addEventListener("scroll",this.onScrollBind),this.data.sC.addEventListener("resize",this.onResizeBind),this.root.addEventListener("wheel",this.onWheelBind,{passive:!1}),this.root.addEventListener("mousemove",this.onMouseMoveBind),new ResizeObserver((t=>{Array.from(this.objects.values()).forEach((t=>{this.setupObject(t.el,t)}))})).observe(document.body),this.loop.start(t),document.documentElement.classList.add("-string"),this.modules.forEach((t=>{t.onStart()})),this.modulesUI.forEach((t=>{t.onStart()})),this.initObjects(),this.initMutationObserver()}onChangeScrollParams(){this.modules.forEach((t=>{t.onChangeScrollParams()})),this.modulesUI.forEach((t=>{t.onChangeScrollParams()}))}initObjects(){document.querySelectorAll("[string]").forEach((t=>{this.addObject(t)})),document.querySelectorAll("[string-copy-from]").forEach((t=>{let e=this._attribute.process(t,"string-copy-from");if(null!=e&&this.objects.has(e)){let s=this.objects.get(e);null!=s&&s.connects.push(t)}})),this.modules.forEach((t=>{t.onResize(),t.onScroll(this.data),t.onUpdate(this.data)}))}destroy(){this.window.removeEventListener("scroll",this.onScrollBind),this.root.removeEventListener("wheel",this.onScrollBind),this.window.removeEventListener("resize",this.onResizeBind),this.root.removeEventListener("mousemove",this.onMouseMoveBind),this.loop.stop(),this.modules.forEach((t=>{t.destructor()})),this.modulesUI.forEach((t=>{t.destructor()}))}on(t,e,s=""){switch(t){case"scroll":this.events.on("scroll",e);break;case"progress":this.events.on(`progress_${s}`,e);break;case"lerp":this.events.on("lerp",e);break;case"intersection":this.events.on(`intersection_${s}`,e);break;case"inview":this.events.on(`inview_${s}`,e);break;case"cursor":this.events.on("cursor",e)}}off(t,e,s=""){switch(t){case"scroll":this.events.off("scroll",e);break;case"progress":this.events.off(`progress_${s}`,e);break;case"lerp":this.events.off("lerp",e);break;case"intersection":this.events.off(`intersection_${s}`,e);break;case"inview":this.events.off(`inview_${s}`,e);break;case"cursor":this.events.off("cursor",e)}}setupSettings(t){null!=t["string-offset-top"]&&(this.defaultSettings.stringOffsetStart=t["string-offset-top"]),null!=t["string-offset-bottom"]&&(this.defaultSettings.stringOffsetEnd=t["string-offset-bottom"]),null!=t["string-offset-left"]&&(this.defaultSettings.stringOffsetStart=t["string-offset-left"]),null!=t["string-offset-right"]&&(this.defaultSettings.stringOffsetEnd=t["string-offset-right"]),null!=t["string-inview-top"]&&(this.defaultSettings.stringInviewTop=t["string-inview-top"]),null!=t["string-inview-left"]&&(this.defaultSettings.stringInviewTop=t["string-inview-left"]),null!=t["string-inview-bottom"]&&(this.defaultSettings.stringInviewBottom=t["string-inview-bottom"]),null!=t["string-inview-right"]&&(this.defaultSettings.stringInviewBottom=t["string-inview-right"]),null!=t["string-enter-el"]&&(this.defaultSettings.stringEnterEl=t["string-enter-el"]),null!=t["string-enter-vp"]&&(this.defaultSettings.stringEnterVp=t["string-enter-vp"]),null!=t["string-exit-el"]&&(this.defaultSettings.stringExitEl=t["string-exit-el"]),null!=t["string-exit-vp"]&&(this.defaultSettings.stringExitVp=t["string-exit-vp"]),null!=t["string-key"]&&(this.defaultSettings.stringKey=t["string-key"]),null!=t["string-strength"]&&(this.defaultSettings.stringStrength=t["string-strength"]),null!=t["string-radius"]&&(this.defaultSettings.stringRadius=t["string-radius"]),null!=t["string-lerp"]&&(this.defaultSettings.stringLerp=t["string-lerp"]),null!=t["string-parallax-bias"]&&(this.defaultSettings.stringParallaxBias=t["string-parallax-bias"]),null!=t["string-parallax"]&&(this.defaultSettings.stringParallax=t["string-parallax"])}setupObject(t,e){var s,i,n;null===(s=e.showObserver)||void 0===s||s.disconnect(),null===(i=e.progressObserver)||void 0===i||i.disconnect(),null===(n=e.inviewObserver)||void 0===n||n.disconnect();let r=this._boundingClientRect.process(t),o=r.width/this.data.scsW,a=r.height/this.data.scsH,l=this._attribute.process(t,"string-enter-el")||this.defaultSettings.stringEnterEl,h=this._attribute.process(t,"string-exit-el")||this.defaultSettings.stringExitEl,c=this._attribute.process(t,"string-enter-vp")||this.defaultSettings.stringEnterVp,d=this._attribute.process(t,"string-exit-vp")||this.defaultSettings.stringExitVp;e.inviewTop=-1*this._parser.parseSingle(this._attribute.process(t,"string-inview-top",this._attribute.process(t,"string-inview-left",this.defaultSettings.stringInviewTop)),t,"vertical"==this.data.sD?a:o,16),e.inviewBottom=-1*this._parser.parseSingle(this._attribute.process(t,"string-inview",this._attribute.process(t,"string-inview-bottom",this._attribute.process(t,"string-inview-right",this.defaultSettings.stringInviewBottom))),t,"vertical"==this.data.sD?a:o,16),e.selfDisable=null!=this._attribute.process(t,"string-self-disable"),e.abs=null!=this._attribute.process(t,"string-abs");let u=this._attribute.process(t,"string-cursor-target");null!=u&&(e.cursorTarget=document.querySelector(`[string-cursor-content="${u}"]`)),e.id=this._attribute.process(t,"string-id",`string-${this.globalId}`),e.key=this._attribute.process(t,"string-key",this.defaultSettings.stringKey),e.strength=this._attribute.process(t,"string-strength",this.defaultSettings.stringStrength),e.radius=this._attribute.process(t,"string-radius",this.defaultSettings.stringRadius),e.lerp=this._attribute.process(t,"string-lerp",this.defaultSettings.stringLerp);let p=this._attribute.process(t,"string-parallax-bias",this.defaultSettings.stringParallaxBias);e.parallaxPositionStart=.5*p-.5,e.parallaxPositionEnd=.5+.5*(1-p),t.setAttribute("string-id",e.id),"vertical"==this.data.sD?e.size=a:e.size=o,e.oStart=this._parser.parseSingle(this._attribute.process(t,"string-offset-top",this._attribute.process(t,"string-offset-left",this.defaultSettings.stringOffsetStart)),t,this.data.wS,16),e.oEnd=this._parser.parseSingle(this._attribute.process(t,"string-offset-bottom",this._attribute.process(t,"string-offset-right",this.defaultSettings.stringOffsetEnd)),t,this.data.wS,16);let m=this._parser.parseSingle(this._attribute.process(t,"string-offset-top",this._attribute.process(t,"string-offset-left",this.defaultSettings.stringOffsetStart)),t,this.data.wS,16),g=this._parser.parseSingle(this._attribute.process(t,"string-offset-bottom",this._attribute.process(t,"string-offset-right",this.defaultSettings.stringOffsetEnd)),t,this.data.wS,16);this._attribute.process(e.el,"string","").split("|").includes("parallax")&&(m=0,g=0,e.oStart=0,e.oEnd=0),e.factor=Math.min(1,this._attribute.process(t,"string-parallax",this.defaultSettings.stringParallax)),e.oStart+=e.factor*this.data.wS*.5,e.oEnd+=e.factor*this.data.wS*.5,e.repeat=null!=this._attribute.process(t,"string-repeat"),e.sElPos=l,e.sScrPos=c,e.eElPos=h,e.eScrPos=d,e.halfWidth=o/2,e.halfHeight=a/2;let b=this.data.wS;if("vertical"==this.data.sD){let s=this._position.process(t,this.data.sC).top/this.data.scsH;e.start=s,e.end=s+a}else{let s=this._position.process(t,this.data.sC).left/this.data.scsW;e.start=s,e.end=s+o}e.calculatePositions(b);let v,f,E=this.connectQueue.filter((t=>t.id==e.id));this.connectQueue=this.connectQueue.filter((t=>t.id!=e.id)),E.forEach((t=>{e.connects.push(t.element)})),"vertical"==this.data.sD?(v={root:null,rootMargin:`${m+this.data.wS}px 0px ${g+this.data.wS}px 0px`,threshold:.001},f={root:null,rootMargin:`${m+e.inviewTop}px 0px ${g+e.inviewBottom}px 0px`,threshold:.001}):(v={root:null,rootMargin:`0px ${m+this.data.wS}px 0px ${g+this.data.wS}px`,threshold:.001},f={root:null,rootMargin:`0px ${m+e.inviewTop}px 0px ${g+e.inviewBottom}px`,threshold:.001});let y=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?0==e.active&&(this.events.emit(`activate_object_${e.id}`,!0),e.enter()):1==e.active&&(this.events.emit(`activate_object_${e.id}`,!1),e.leave())}))}),v),w=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?this.events.emit(`intersection_${e.id}`,!0):this.events.emit(`intersection_${e.id}`,!1)}))}),{root:null,rootMargin:"0px 0px 0px 0px",threshold:.001}),S=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?(this.events.emit(`inview_${e.id}`,!0),e.show()):(this.events.emit(`inview_${e.id}`,!1),e.hide())}))}),f);y.observe(t),w.observe(t),S.observe(t),e.showObserver=w,e.progressObserver=y,e.inviewObserver=S}addObject(t){let e,s=this._attribute.process(t,"string-inited");e=null==s?new m(t):this.objects.has(this._attribute.process(t,"string-id"))?this.objects.get(this._attribute.process(t,"string-id")):new m(t),t.setAttribute("string-inited",""),this.setupObject(t,e),this.modules.forEach((t=>{t.tryConnect(e)&&t.connect(e)})),this.objects.set(e.id,e),this.globalId++}removeObject(t){let e=this.objects.get(t);null!=(null==e?void 0:e.showObserver)&&(null==e||e.showObserver.disconnect()),null!=(null==e?void 0:e.progressObserver)&&(null==e||e.progressObserver.disconnect()),null!=(null==e?void 0:e.inviewObserver)&&(null==e||e.inviewObserver.disconnect()),this.objects.delete(t),null==e||e.el.removeAttribute("string-inited"),null==e||e.leave(),e=void 0}onMouseMoveEvent(t){this._virtualCursor.onMouseMove(t),this.modules.forEach((e=>{e.onMouseMove(t)})),this.modulesUI.forEach((e=>{e.onMouseMove(t)}))}onWheelEvent(t){this.sEn.onWheel(t),this.modules.forEach((e=>{e.onWheel(t)})),this.modulesUI.forEach((e=>{e.onWheel(t)}))}onScrollEvent(t){this.sEn.onScroll(t),this.modules.forEach((t=>{t.onScroll(this.data)})),this.modulesUI.forEach((t=>{t.onScroll(this.data)})),this.events.emit("lerp",this.data.v),this.events.emit("scroll",this.data.c)}onUpdateEvent(){this._virtualCursor.onUpdate(),this.sEn.onUpdate(),this.modules.forEach((t=>{t.onUpdate(this.data)})),this.modulesUI.forEach((t=>{t.onUpdate(this.data)}))}onResizeEvent(){try{let t=this.sEn.scrollContainer.getBoundingClientRect();this.wW=t.width,this.wH=t.height}catch(t){this.wW=this.sEn.scrollContainer.innerWidth,this.wH=this.sEn.scrollContainer.innerHeight}("vertical"==this.data.sD&&this.wW!=this.data.wS||this.window.innerWidth>1024||"horizontal"==this.data.sD&&this.wW!=this.data.wS||this.window.innerWidth>1024)&&(this.rebuild(),this.modules.forEach((t=>{t.onResize()})),this.modulesUI.forEach((t=>{t.onResize()})))}initMutationObserver(){new MutationObserver((t=>{t.forEach((t=>{"childList"===t.type&&(t.addedNodes.length>0&&t.addedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]:not([string-inited])").forEach((t=>{this.addObject(t);let e=this._attribute.process(t,"string-copy-from");if(null!=e)if(this.objects.has(e)){let s=this.objects.get(e);null!=s&&s.connects.push(t)}else this.connectQueue.push({id:e,element:t})}))})),t.removedNodes.length>0&&t.removedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]").forEach((t=>{let e=t.getAttribute("string-id"),s=this._attribute.process(t,"string-copy-from");null!=s&&(this.connectQueue=this.connectQueue.filter((t=>t.id!=s))),null!=e&&this.removeObject(e)}))})),(t.addedNodes.length>0||t.removedNodes.length>0)&&this.modules.forEach((t=>{t.onRebuild()})))}))})).observe(document.body,{attributes:!1,childList:!0,subtree:!0})}rebuild(){try{let e=(t=this.data.sC,window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)})));this.data.scsW=e[0],this.data.scsH=e[3]}catch(t){this.data.scsW=1,this.data.scsH=1}var t;try{let t=this.data.sC.getBoundingClientRect();this.wW=t.width/this.data.scsW,this.wH=t.height/this.data.scsH}catch(t){this.wW=this.data.sC.innerWidth,this.wH=this.data.sC.innerHeight}this.wW<1024||H()?this.scrollMode=this.mMode:this.scrollMode=this.dMode;let e=document.body,s=document.documentElement;this.data.psW=this.data.sC.scrollWidth,this.data.psH=this.data.sC.scrollHeight,null==this.data.psW&&(this.data.psW=Math.max(e.scrollWidth,e.offsetWidth,s.clientWidth,s.scrollWidth,s.offsetWidth)),null==this.data.psH&&(this.data.psH=Math.max(e.scrollHeight,e.offsetHeight,s.clientHeight,s.scrollHeight,s.offsetHeight)),"vertical"==this.data.sD?(this.data.bS=this.data.psH-this.wH,this.data.wS=this.wH):(this.data.bS=this.data.psW-this.wW,this.data.wS=this.wW),this.data.hnwS=-.5*this.data.wS,this.updateModeParams()}}return e})()));
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.StringTune=e():t.StringTune=e()}(this,(()=>(()=>{"use strict";var t={d:(e,s)=>{for(var i in s)t.o(s,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:s[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{StringCursor:()=>o,StringDisplacement:()=>w,StringFPSTracker:()=>O,StringLazy:()=>i,StringLoading:()=>n,StringMagnetic:()=>a,StringParallax:()=>S,StringPositionTracker:()=>A,StringProgress:()=>x,StringResponsive:()=>v,StringScrollbar:()=>y,StringSplit:()=>D,StringTune:()=>I,StringVideoAutoplay:()=>r,default:()=>I});class s{get type(){return this._type}constructor(t,e=null){this.settings=null,this.objectsMap=new Map,this.objects=new Array,this.htmlKey="",this._type=1,this.data=t.data,this.lerp=t.lerp,this.attribute=t.attribute,this.boundingClientRect=t.boundingClientRect,this.position=t.position,this.virtualCursor=t.virtualCursor,this.events=t.events,this.settings=e}destructor(){}onChangeScrollParams(){}tryConnect(t){let e=this.attribute.process(t.el,"string","").split("|"),s=!1;return e.forEach((t=>{t==this.htmlKey&&(s=!0)})),s}connect(t){t.connect(this),this.onConnect(t)}addObject(t,e){this.objectsMap.set(t,e),this.objects=Array.from(this.objectsMap).map((([t,e])=>e))}removeObject(t){this.objectsMap.delete(t),this.objects=Array.from(this.objectsMap).map((([t,e])=>e))}onStart(){}onUpdate(t){}onResize(){}onConnect(t){}onRebuild(){}onScroll(t){}onMouseMove(t){}onWheel(t){}onChangeDevice(){}onChangeScrollDirection(){}onMutationObserver(t,e){}}class i extends s{constructor(t){super(t),this.htmlKey="lazy"}onStart(){document.querySelectorAll("img[string-lazy]").forEach((t=>{this.getImageSize(t,t.getAttribute("string-lazy")),t.classList.add("lazyLoad"),t.src=t.getAttribute("string-lazy"),t.addEventListener("load",(()=>{t.classList.add("-loaded")}))}))}onConnect(t){t.el}getImageSize(t,e){return new Promise(((s,i)=>{const n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=()=>{if(206===n.status||200===n.status){const e=n.response,r=new Blob([e]),o=new Image;o.onload=()=>{t.style.aspectRatio=`${o.width} / ${o.height}`,s({width:o.width,height:o.height}),URL.revokeObjectURL(o.src)},o.onerror=()=>{i(new Error("Failed to load image"))},o.src=URL.createObjectURL(r)}else i(new Error("Failed to load image"))},n.onerror=()=>{i(new Error("Network error"))},n.setRequestHeader("Range","bytes=0-"),n.send()}))}}class n extends s{constructor(t,e=null){super(t),this.loadingTimeout=0,this._type=2,null!=e&&null!=e.timeout&&(this.loadingTimeout=e.timeout)}onStart(){setTimeout((()=>{document.documentElement.classList.add("-loaded")}),this.loadingTimeout)}}class r extends s{constructor(t){super(t),this.htmlKey="autoplay"}onConnect(t){const e=t.el,s=this.attribute.process(e,"string-src",""),i=null!=this.attribute.process(e,"string-started",null);"video"===e.tagName.toLowerCase()&&s&&0==i?(e.setAttribute("muted","muted"),e.setAttribute("playsinline",""),e.setAttribute("loop",""),e.setAttribute("autoplay",""),e.src=s,e.muted=!0,e.addEventListener("canplaythrough",(()=>{0==(null!=this.attribute.process(e,"string-started",null))&&this.tryPlay(t,e)}),{once:!0}),e.load()):console.warn("StringVideoAutoplay: Element is not a <video> tag or string-src is missing.",t.el)}tryPlay(t,e){e.play().catch((e=>{console.warn("Autoplay failed:",e),t.started=!1})).then((()=>{t.started=!0,e.setAttribute("string-started","")}))}}class o extends s{constructor(t,e=null){super(t),this.lerpFactor=.2,this.oldX=0,this.oldY=0,this.enterObjectsMap=new Map,this.enterObjects=new Array,this.htmlKey="cursor",this.cursor=document.querySelector("[string-cursor]")}onUpdate(t){if(this.virtualCursor.smoothX!=this.oldX||this.virtualCursor.smoothY!=this.oldY){let t={lerpX:this.virtualCursor.lerpX,lerpY:this.virtualCursor.lerpY,x:this.virtualCursor.x,y:this.virtualCursor.y};this.events.emit("cursor",t),this.cursor.style.setProperty("--x",this.virtualCursor.smoothX),this.cursor.style.setProperty("--y",this.virtualCursor.smoothY),this.oldX=this.virtualCursor.smoothX,this.oldY=this.virtualCursor.smoothY}this.objects.forEach((t=>{if(t.isMouseMove){let e=t.el.getBoundingClientRect();const s=this.calculateOffset("center",this.virtualCursor.x-e.left,e.width),i=this.calculateOffset("center",this.virtualCursor.y-e.top,e.height);t.mouseX+=this.lerp.process(t.mouseX,s,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}else if(0!=t.mouseX||0!=t.mouseY){let e=t.el.getBoundingClientRect();const s=this.calculateOffset("center",t.halfWidth,e.width),i=this.calculateOffset("center",t.halfHeight,e.height);t.mouseX+=this.lerp.process(t.mouseX,s,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}}))}onConnect(t){let e=t.el;null!=this.settings&&null!=this.settings["string-lerp"]&&(t.lerp=this.settings["string-lerp"]);let s=()=>{e.addEventListener("mousemove",i),e.addEventListener("mouseleave",n),t.isMouseMove=!0,null!=t.cursorTarget&&t.cursorTarget.classList.add("-show")},i=t=>{},n=()=>{e.removeEventListener("mousemove",i),e.removeEventListener("mouseleave",n),t.isMouseMove=!1,null!=t.cursorTarget&&t.cursorTarget.classList.remove("-show")};t.onEnter=()=>{e.addEventListener("mouseenter",s)},t.onLeave=()=>{e.removeEventListener("mouseenter",s),e.removeEventListener("mousemove",i),e.removeEventListener("mouseleave",n)}}setMouseCoordinates(t,e,s){0==t.selfDisable&&(t.el.style.setProperty("--mouse-x",e.toFixed(2)),t.el.style.setProperty("--mouse-y",s.toFixed(2))),t.connects.forEach((t=>{t.style.setProperty("--mouse-x",e.toFixed(2)),t.style.setProperty("--mouse-y",s.toFixed(2))}))}calculateOffset(t,e,s){switch(t){case"start":return e/s;case"end":return(e-s)/s;default:return(e-s/2)/(s/2)}}}class a extends s{constructor(t){super(t),this.htmlKey="magnetic"}onConnect(t){t.el,null!=this.settings&&(null!=this.settings["string-strength"]&&(t.strength=this.settings["string-strength"]),null!=this.settings["string-radius"]&&(t.radius=this.settings["string-radius"]),null!=this.settings["string-lerp"]&&(t.lerp=this.settings["string-lerp"]))}onMouseMove(t){this.objects.forEach((e=>{const s=e.el.getBoundingClientRect(),i=s.left+e.halfWidth,n=s.top+e.halfHeight,r=t.clientX-i,o=t.clientY-n,a=Math.sqrt(r**2+o**2);a<e.radius?(e.magneticTargetX=r*e.strength*((e.radius-a)/e.radius),e.magneticTargetY=o*e.strength*((e.radius-a)/e.radius),e.isMagneting=!0):(e.magneticTargetX=0,e.magneticTargetY=0)}))}onUpdate(t){this.objects.forEach((t=>{if(t.isMagneting){let e=this.lerp.process(t.magneticX,t.magneticTargetX,t.lerp),s=this.lerp.process(t.magneticY,t.magneticTargetY,t.lerp);e>-.01&&e<.01&&(e=0,t.magneticX=t.magneticTargetX),s>-.01&&s<.01&&(s=0,t.magneticY=t.magneticTargetY),t.magneticX+=e,t.magneticY+=s,t.el.style.setProperty("--magnetic-x",t.magneticX.toString()),t.el.style.setProperty("--magnetic-y",t.magneticY.toString()),t.magneticTargetX!=t.magneticX&&t.magneticTargetY!=t.magneticY||(t.isMagneting=!1)}}))}}class l{process(t,e,s){return s*(e-t)}}class h{constructor(){this._lF=.1,this.lerp=new l,this._x=0,this._y=0,this._lerpX=0,this._lerpY=0,this.targetX=0,this.targetY=0}get x(){return this.targetX}get y(){return this.targetY}get smoothX(){return this._x}get smoothY(){return this._y}get lerpX(){return this._lerpX}get lerpY(){return this._lerpY}onMouseMove(t){this.targetX=t.clientX,this.targetY=t.clientY}onUpdate(){this._lerpX=this.lerp.process(this._x,this.targetX,this._lF),this._lerpY=this.lerp.process(this._y,this.targetY,this._lF),this._x=Math.floor(this._x+this._lerpX),this._y=Math.floor(this._y+this._lerpY)}}const c="top",d="bottom",u="left",p="right";class m{constructor(t){this.id="",this.oStart=0,this.oEnd=0,this.size=0,this.startPos=0,this.endPos=0,this.differencePos=0,this.factor=1,this.inviewTop=1,this.inviewBottom=1,this.sElPos="",this.sScrPos="",this.eElPos="",this.eScrPos="",this.halfWidth=0,this.halfHeight=0,this.start=0,this.end=0,this.mouseX=0,this.mouseY=0,this.magneticTargetX=0,this.magneticTargetY=0,this.magneticX=0,this.magneticY=0,this.lerp=0,this.strength=0,this.radius=0,this.parallaxPositionStart=0,this.parallaxPositionEnd=0,this.connects=new Array,this.cursorTarget=null,this.key="--progress",this.showObserver=null,this.progressObserver=null,this.inviewObserver=null,this.repeat=!1,this.selfDisable=!1,this.active=!1,this.abs=!1,this.isMouseMove=!1,this.started=!1,this.isMagneting=!1,this.onEnter=()=>{},this.onLeave=()=>{},this.modules=new Array,this.el=t}enter(){this.active=!0,this.modules.forEach((t=>{t.addObject(this.id,this)})),this.onEnter()}leave(){this.active=!1,this.modules.forEach((t=>{t.removeObject(this.id)})),this.onLeave()}show(){this.el.classList.add("-inview")}hide(){this.repeat&&this.el.classList.remove("-inview")}connect(t){this.modules.push(t)}calculatePositions(t){this.sElPos===c&&this.sScrPos===c||this.sElPos===u&&this.sScrPos===u?this.startPos=this.start-this.oEnd:this.sElPos===c&&this.sScrPos===d||this.sElPos===u&&this.sScrPos===p?this.startPos=this.start-t-this.oEnd:this.sElPos===d&&this.sScrPos===c||this.sElPos===p&&this.sScrPos===u?this.startPos=this.start+this.size-this.oEnd:(this.sElPos===d&&this.sScrPos===d||this.sElPos===p&&this.sScrPos===p)&&(this.startPos=this.start-t-this.oEnd+this.size),this.eElPos===c&&this.eScrPos===c||this.eElPos===u&&this.eScrPos===u?this.endPos=this.start+this.oStart:this.eElPos===c&&this.eScrPos===d||this.eElPos===u&&this.eScrPos===p?this.endPos=this.start-t+this.oStart:this.eElPos===d&&this.eScrPos===c||this.eElPos===p&&this.eScrPos===u?this.endPos=this.start+this.size+this.oStart:(this.eElPos===d&&this.eScrPos===d||this.eElPos===p&&this.eScrPos===p)&&(this.endPos=this.start-t+this.size+this.oStart),this.differencePos=this.endPos-this.startPos}}var g;!function(t){t[t.Mobile=0]="Mobile",t[t.Tablet=1]="Tablet",t[t.Laptop=2]="Laptop",t[t.Desktop=3]="Desktop"}(g||(g={}));class b{constructor(t){var e;this.min=void 0,this.max=void 0,this.enable=!0,this.min=null==t?void 0:t.min,this.max=null==t?void 0:t.max,this.enable=null===(e=null==t?void 0:t.enable)||void 0===e||e}setEnable(t=!0){this.enable=t}setRange(t,e){this.min=null!=t?t:void 0,this.max=null!=e?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}}class v extends s{constructor(t,e){super(t,e),this.queries={[g.Mobile]:new b({max:359}),[g.Tablet]:new b({min:360,max:1079}),[g.Laptop]:new b({min:1080,max:1365}),[g.Desktop]:new b({min:1366})},this.matchMedias={[g.Mobile]:window.matchMedia(this.queries[g.Mobile].mediaQuery),[g.Tablet]:window.matchMedia(this.queries[g.Tablet].mediaQuery),[g.Laptop]:window.matchMedia(this.queries[g.Laptop].mediaQuery),[g.Desktop]:window.matchMedia(this.queries[g.Desktop].mediaQuery)},this._type=2}onConnect(){}onStart(){var t,e,s,i;if(null!=this.settings&&null!=this.settings.settings){let n=this.settings.settings;n.mobile?(this.queries[g.Mobile].enable=!0,this.queries[g.Mobile].setRange(null==n.mobile.min?null:n.mobile.min,null!==(t=n.mobile.max)&&void 0!==t?t:null),this.matchMedias[g.Mobile]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Mobile].enable=!1,n.tablet?(this.queries[g.Tablet].enable=!0,this.queries[g.Tablet].setRange(null==n.mobile.min?null:n.mobile.min,null!==(e=n.mobile.max)&&void 0!==e?e:null),this.matchMedias[g.Tablet]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Tablet].enable=!1,n.laptop?(this.queries[g.Laptop].enable=!0,this.queries[g.Laptop].setRange(null==n.mobile.min?null:n.mobile.min,null!==(s=n.mobile.max)&&void 0!==s?s:null),this.matchMedias[g.Laptop]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Laptop].enable=!1,n.desktop?(this.queries[g.Desktop].enable=!0,this.queries[g.Desktop].setRange(null==n.mobile.min?null:n.mobile.min,null!==(i=n.mobile.max)&&void 0!==i?i:null),this.matchMedias[g.Desktop]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Desktop].enable=!1}this.updateElements()}onResize(){this.updateElements()}updateElements(){const t=this.matchMedias[g.Mobile].matches&&this.queries[g.Mobile].enable,e=this.matchMedias[g.Tablet].matches&&this.queries[g.Tablet].enable,s=this.matchMedias[g.Laptop].matches&&this.queries[g.Laptop].enable,i=this.matchMedias[g.Desktop].matches&&this.queries[g.Desktop].enable;document.querySelectorAll("[string-mobile], [string-tablet], [string-laptop], [string-desktop]").forEach((n=>{let r=!1;n.hasAttribute("string-mobile")&&t&&(r=!0),n.hasAttribute("string-tablet")&&e&&(r=!0),n.hasAttribute("string-laptop")&&s&&(r=!0),n.hasAttribute("string-desktop")&&i&&(r=!0),n.style.display=r?null:"none"}))}}class f{constructor(t,e,s){this.isDragging=!1,this.startY=0,this.startScrollPosition=0,this.data=t,this.scrollbar=e,this.thumb=s}onResize(){const t=this.data.psH,e=this.data.wS,s=e/t*e;this.thumb.style.setProperty("--size",s+"px"),t<=e?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psH,e=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*e+"px")}mouseDownEvent(t){this.startY=t.clientY,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const e=t.clientY-this.startY,s=this.startScrollPosition+e/this.data.wS*this.data.psH;this.data.c=s,this.data.t=s,window.scrollTo(0,s),this.updateThumb()}}class E{constructor(t,e,s){this.isDragging=!1,this.startCoordinate=0,this.startScrollPosition=0,this.data=t,this.scrollbar=e,this.thumb=s}onResize(){const t=this.data.psW,e=this.data.wS,s=e/t*e;this.thumb.style.setProperty("--size",s+"px"),t<=e?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psW,e=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*e+"px")}mouseDownEvent(t){this.startCoordinate=t.clientX,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const e=t.clientX-this.startCoordinate,s=this.startScrollPosition+e/this.data.wS*this.data.psW;this.data.c=s,this.data.t=s,window.scrollTo(0,s),this.updateThumb()}}class y extends s{constructor(t){super(t),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)}onStart(){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(t){this.updateThumb(),this.showScrollbar(),this.hideScrollbar()}onResize(){this.scrollbarState.onResize()}onChangeScrollParams(){"disable"==this.data.sM&&"disable"!=this.scrollMode&&this.scrollbar.classList.add("-hide"),("smooth"==this.data.sM&&"disable"==this.scrollMode||"default"==this.data.sM&&"disable"==this.scrollMode)&&this.scrollbar.classList.remove("-hide"),this.scrollMode=this.data.sM}onChangeScrollDirection(){"horizontal"==this.data.sD?this.scrollbarState=this.scrollbarStateVertical:this.scrollbarState=this.scrollbarStateHorizontal,this.scrollbarState.onResize()}addCustomStyles(){const t=document.createElement("style");t.textContent="\n ::-webkit-scrollbar {\n display: none;\n width: 0;\n height: 0;\n -webkit-appearance: none;\n }\n body {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n .-without-scrollbar::-webkit-scrollbar {\n display: none;\n }\n .-without-scrollbar {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n ",document.head.appendChild(t)}createScrollbar(){this.scrollbar=document.createElement("div"),this.scrollbar.classList.add("scrollbar"),this.thumb=document.createElement("div"),this.thumb.classList.add("thumb"),this.scrollbar.appendChild(this.thumb),document.body.appendChild(this.scrollbar),this.scrollbarStateHorizontal=new f(this.data,this.scrollbar,this.thumb),this.scrollbarStateVertical=new E(this.data,this.scrollbar,this.thumb),this.scrollbarState=this.scrollbarStateHorizontal}updateThumb(){this.scrollbarState.updateThumb()}mouseDownEvent(t){this.isDragging=!0,this.scrollbarState.mouseDownEvent(t),document.body.style.userSelect="none",this.scrollbar.classList.add("-touch")}mouseMoveEvent(t){this.isDragging&&this.scrollbarState.mouseMoveEvent(t)}mouseUpEvent(){this.isDragging=!1,document.body.style.userSelect="",this.hideScrollbar(),this.scrollbar.classList.remove("-touch")}showScrollbar(){this.scrollbar.classList.add("-scroll")}hideScrollbar(){this.scrollTimeout&&clearTimeout(this.scrollTimeout),this.scrollTimeout=setTimeout((()=>{this.scrollbar.classList.remove("-scroll")}),1e3)}}class w extends s{constructor(t){super(t),this.oldLerp=0,this.htmlKey="displacement."}onUpdate(t){0!=this.oldLerp&&0==t.v&&(this.oldLerp=0,document.documentElement.style.setProperty("--lerp","0")),t.v>0&&(document.documentElement.style.setProperty("--lerp",t.v.toString()),this.oldLerp=t.v)}}class S extends s{constructor(t){super(t),this.setupParallax=(t,e)=>{let s=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+e*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=s,t.connects.forEach((t=>{t.style.transform=s}))},this.onScrollDesktopEvent=()=>{this.objects.forEach((t=>{let e=Math.min(1,Math.max(0,(this.data.c-t.startPos)/t.differencePos));t.el.style.setProperty(t.key,e.toString()),this.setupParallax(t,e)}))},this.onScrollMobileEvent=()=>{},this.onScrollEvent=this.onScrollDesktopEvent,this.htmlKey="parallax"}onConnect(t){if(null!=this.settings){if(null!=this.settings["string-parallax-bias"]){let e=this.attribute.process(t.el,"string-parallax-bias",this.settings["string-parallax-bias"]);t.parallaxPositionStart=.5*e-.5,t.parallaxPositionEnd=.5+.5*(1-e)}null!=this.settings["string-parallax"]&&(t.factor=this.settings["string-parallax"])}}onScroll(t){this.onScrollEvent()}onChangeScrollDirection(){"vertical"==this.data.sD?this.setupParallax=(t,e)=>{let s=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+e*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=s,t.connects.forEach((t=>{t.style.transform=s}))}:this.setupParallax=(t,e)=>{let s=`translate3d(${t.factor*this.data.wS*t.parallaxPositionStart+e*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0, 0)`;t.el.style.transform=s,t.connects.forEach((t=>{t.style.transform=s}))}}onResize(){window.innerWidth>1080?this.onScrollEvent=this.onScrollDesktopEvent:(this.onScrollEvent=this.onScrollMobileEvent,this.objects.forEach((t=>{this.setupParallax(t,.5)})))}}class x extends s{constructor(t){super(t),this.htmlKey="progress"}onScroll(t){this.objects.forEach((t=>{this.setUpObject(t,this.data.c)}))}onConnect(t){t.onEnter=()=>{this.setUpObject(t,this.data.c)}}setUpObject(t,e){let s=Math.min(1,Math.max(0,(e-t.startPos)/t.differencePos));this.events.emit(`progress_${t.id}`,s),t.el.style.setProperty(t.key,s.toString()),t.connects.forEach((e=>{e.style.setProperty(t.key,s.toString())}))}}class M{constructor(t,e,s){this.isProg=!1,this.isParallaxEnabled=!1,this.name="",this.v=0,this.vT=0,this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(0,this.data.c)},this._scrollDirection="vertical",this.d=t,this.settings=e,this.data=s,this.scrollContainer=window}onUpdate(){}onWheel(t){}onScroll(t){}set scrollDirection(t){this._scrollDirection=t,"vertical"==this._scrollDirection?this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(0,this.data.c)}:"horizontal"==this._scrollDirection&&(this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(this.data.c,0)})}}class P extends M{constructor(t,e,s){super(t,e,s),this.animateC=0,this.name="mobile"}onUpdate(){this.vT=this.d.documentElement.scrollTop-this.animateC,this.animateC=this.d.documentElement.scrollTop,this.v=this.vT}onScroll(t){this.data.c=this.d.documentElement.scrollTop,this.data.t=this.d.documentElement.scrollTop,this.data.d=0}}class C extends M{constructor(t,e,s){super(t,e,s),this.name="disable"}onUpdate(){}onWheel(t){t.preventDefault()}onScroll(t){t.preventDefault()}}class L extends M{constructor(t,e,s){super(t,e,s),this.name="desktop",this.isScroll=!1,this.name="desktop"}onUpdate(){if(this.data.v=(this.data.t-this.data.c)*this.settings.speed,0!=this.data.v){let t;this.isScroll=!0,this.data.v>0?(t=Math.ceil(this.data.c+this.data.v),document.documentElement.classList.add("-scroll-forward"),document.documentElement.classList.remove("-scroll-back")):(t=Math.floor(this.data.c+this.data.v),document.documentElement.classList.add("-scroll-back"),document.documentElement.classList.remove("-scroll-forward")),this.data.c!=t?(this.data.c=t,this.isProg=!0,this.onCalcUpdate()):this.data.c=t}else this.isScroll&&(this.isScroll=!1,this.data.v=0,this.data.c=this.data.t,this.isProg=!1,document.documentElement.classList.remove("-scroll-back"),document.documentElement.classList.remove("-scroll-forward"),document.documentElement.style.setProperty("--lerp","0"))}onWheel(t){0!=t.deltaY&&(t.preventDefault(),this.data.d=t.deltaY,this.data.t+=this.data.d,this.data.t=Math.min(Math.max(this.data.t,0),this.data.bS))}}class _{constructor(){this.sC=0,this.sA=.13,this.sD=.04}get speed(){return this.sC}get speedAccelerate(){return this.sA}get speedDecelerate(){return this.sD}set speedAccelerate(t){this.sA=t,this.updateScrollParams()}set speedDecelerate(t){this.sD=t,this.updateScrollParams()}updateScrollParams(){this.sC=this.sA*(1-this.sD)}}class D extends s{constructor(t){super(t),this.htmlKey="split"}onStart(){}onResize(){document.querySelectorAll('[string="split"].-splited').forEach((t=>{const e=this.parseSplitOptions(t.getAttribute("string-split"));t.innerHTML=this.split(e,t).html}))}onConnect(t){let e=t.el;if(!e.classList.contains("-splited")){e.classList.add("-splited"),e.setAttribute("string-split-original",e.innerHTML);const t=this.parseSplitOptions(e.getAttribute("string-split"));e.innerHTML=this.split(t,e).html}}parseSplitOptions(t){const e={line:[],word:[],char:[],charLine:[],charWord:[],wordLine:[]};return t&&t.split("|").forEach((t=>{const s=t.match(/^(\w+-)?(\w+)(\[(.*?)\])?$/);if(s){const t=s[1]||"",i=s[2],n=s[4]?s[4].split(","):[];switch(t+i){case"char-line":e.charLine.push(this.parseParam(n));break;case"char-word":e.charWord.push(this.parseParam(n));break;case"word-line":e.wordLine.push(this.parseParam(n));break;case"line":e.line.push(this.parseParam(n));break;case"word":e.word.push(this.parseParam(n));break;case"char":e.char.push(this.parseParam(n))}}})),e}parseParam(t){const e={align:"start"};return t.forEach((t=>{if("abs"===t)e.abs=!0;else if(t.startsWith("random")){const s=t.match(/random\((\d+),(\d+)\)/);s?(e.random={min:parseInt(s[1]),max:parseInt(s[2])},e.align="random"):e.align="random"}else["start","center","end"].includes(t)?e.align=t:e.align="start"})),e}split(t,e){let s=e.getAttribute("string-split-original");if(0===s.length)return"";s=this.decodeHtmlEntity(s);const i=document.createElement("span"),n=s.split(/\s+/);let r=0,o=0;const a=s.replace(/\s/g,"").length,l=document.createElement("span"),h=window.getComputedStyle(e);l.style.fontFamily=h.fontFamily,l.style.fontSize=h.fontSize,l.style.letterSpacing=h.letterSpacing,l.style.lineHeight=h.lineHeight,l.style.fontWeight=h.fontWeight,l.classList.add("-s-char"),document.body.appendChild(l);let c=[],d=[],u=0;n.forEach(((t,s)=>{l.textContent=t,t.length>0&&(l.textContent+=" ");const i=l.offsetWidth,n={text:t,width:i,chars:new Array};Array.from(t).forEach(((t,e)=>{const s={text:t};n.chars.push(s)})),u+i>e.offsetWidth&&(c.push(d),d=[],u=0,r+=d.length),d.push(n),u+=i})),c.push(d);let p=!1;null!=t.line&&t.line.length>0&&(p=!0),null!=t.wordLine&&t.wordLine.length>0&&(p=!0),null!=t.charLine&&t.charLine.length>0&&(p=!0);let m=0;if(p)for(let e=0;e<c.length;e++)this.appendVirtualLineToDOM(e,c.length,n.length,i,c[e],t,r,a,m),m+=c[e].length;else for(let e=0;e<c.length;e++)c[e].forEach(((e,s)=>{if(e.chars.length>0){const l=document.createElement("span");l.classList.add("-s-word"),e.chars.forEach(((s,i)=>{const n=document.createElement("span");n.classList.add("-s-char"),n.textContent=s.text,this.applyOptions(n,t.char,r,"char",i,a),this.applyOptions(n,t.charWord,i,"char-word",i,e.text.length),l.appendChild(n),r++})),this.applyOptions(l,t.word,o,"word",s,n.length),e.chars.length>0&&(l.innerHTML+=" "),i.appendChild(l),o++}}));return document.body.removeChild(l),{html:i.innerHTML}}appendVirtualLineToDOM(t,e,s,i,n,r,o,a,l){const h=document.createElement("span");h.classList.add("-s-line"),this.applyOptions(h,r.line,t,"line",0,e);let c=0,d=0,u=0;n.forEach(((t,e)=>{u+=t.text.length})),n.forEach(((t,e)=>{if(t.chars.length>0){const i=document.createElement("span");i.classList.add("-s-word"),t.chars.forEach(((e,s)=>{const n=document.createElement("span");n.classList.add("-s-char"),n.textContent=e.text,this.applyOptions(n,r.char,o,"char",s,a),this.applyOptions(n,r.charLine,c,"char-line",s,u),this.applyOptions(n,r.charWord,s,"char-word",s,t.text.length),i.appendChild(n),o++,c++})),this.applyOptions(i,r.word,l+d,"word",l+d,s-1),this.applyOptions(i,r.wordLine,e,"word-line",e,n.length),e<n.length-1&&(i.innerHTML+=" "),h.appendChild(i),d++}})),i.appendChild(h)}applyOptions(t,e,s,i,n,r){e&&e.forEach(((e,o)=>{let a=this.calculateIndex(e,s,n,r);const l=this.generateVariableName(i,e,o);t.style.setProperty(l,String(a))}))}createSpaceSpan(){const t=document.createElement("span");return t.innerHTML=" ",t}decodeHtmlEntity(t){return t.replace(/&amp;/g,"&")}calculateIndex(t,e,s,i){let n=e;if("random"===t.align){void 0===t.random&&(t.random={min:0,max:i});const e=t.random.min||0,s=t.random.max||i;n=Math.floor(Math.random()*(s-e+1))+e}return"end"===t.align?n=i-n-1:"center"===t.align&&(n-=Math.floor(i/2)),t.abs&&(n=Math.abs(n)),n}generateVariableName(t,e,s){let i=`--${t}`;return e.align&&(i+=`-${e.align}`),i}}class T{constructor(){this.isAnimationStarted=!1,this.requestAnimationId=0,this.onFrame=()=>{}}start(t){this.isAnimationStarted||(this.fpsInterval=1e3/t,this.then=Date.now(),this.animate(),this.isAnimationStarted=!0)}stop(){this.isAnimationStarted&&(cancelAnimationFrame(this.requestAnimationId),this.isAnimationStarted=!1)}animate(){this.requestAnimationId=requestAnimationFrame((()=>{this.animate()})),this.now=Date.now(),this.elapsed=this.now-this.then,this.elapsed>this.fpsInterval&&(this.then=this.now-this.elapsed%this.fpsInterval,this.onFrame())}}class O extends s{constructor(t){super(t),this.callCount=0,this._type=2}createDisplayElement(){this.displayElement=document.createElement("div"),this.displayElement.style.position="fixed",this.displayElement.style.bottom="10px",this.displayElement.style.right="10px",this.displayElement.style.backgroundColor="#000000",this.displayElement.style.border="1px solid rgba(255, 255, 255, 0.2)",this.displayElement.style.zIndex="9999",this.displayElement.setAttribute("data-fps","0"),document.body.appendChild(this.displayElement);const t=document.createElement("style");t.innerHTML="\n [data-fps]::after {\n content: 'FPS: ' attr(fps);\n position: relative;\n display: block;\n color: #ffffff;\n padding: 5px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n ",document.head.appendChild(t)}onStart(){this.createDisplayElement(),this.intervalId=setInterval((()=>{this.displayElement.setAttribute("fps",`${this.callCount}`),this.callCount=0}),1e3)}onUpdate(t){this.callCount++}destructor(){clearInterval(this.intervalId),document.body.removeChild(this.displayElement)}}class A extends s{constructor(t){super(t),this.callCount=0,this._type=2}createDisplayElement(){this.displayElement=document.createElement("div"),this.displayElement.style.position="fixed",this.displayElement.style.bottom="10px",this.displayElement.style.left="10px",this.displayElement.style.backgroundColor="#000000",this.displayElement.style.border="1px solid rgba(255, 255, 255, 0.2)",this.displayElement.style.zIndex="9999",this.displayElement.setAttribute("data-position","0"),document.body.appendChild(this.displayElement);const t=document.createElement("style");t.innerHTML="\n [data-position]::after {\n content: attr(direction) 'Top: ' attr(value) 'px';\n position: relative;\n display: block;\n color: #ffffff;\n padding: 5px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n ",document.head.appendChild(t)}onStart(){this.createDisplayElement()}onScroll(t){let e="";t.c<t.t&&(e="↓"),t.c>t.t&&(e="↑"),this.displayElement.setAttribute("direction",e),this.displayElement.setAttribute("value",`${this.data.c}`)}onUpdate(t){this.callCount++}destructor(){document.body.removeChild(this.displayElement)}}class W{process(t,e,s=null){return null==t.getAttribute(e)?s:t.getAttribute(e)}}class k{process(t){return t.getBoundingClientRect()}}class j{constructor(){this.t=0,this.c=0,this.d=0,this.v=0,this.bS=0,this.cF=1,this.wS=0,this.hnwS=0,this.psW=0,this.psH=0,this.scsW=1,this.scsH=1,this.sD="vertical",this.sM="smooth"}}class z{constructor(){this.eventsByKey=new Map,this.events=new Array}on(t,e){var s;0==this.eventsByKey.has(t)&&this.eventsByKey.set(t,[]),null===(s=this.eventsByKey.get(t))||void 0===s||s.push(e),this.updateAllEvents()}has(t){return this.eventsByKey.has(t)}emit(t,e){var s;this.eventsByKey.has(t)&&(null===(s=this.eventsByKey.get(t))||void 0===s||s.forEach((t=>{t(e)})))}off(t,e){let s=this.eventsByKey.get(t);null!=s&&this.eventsByKey.set(t,s.filter((t=>t!==e))),this.updateAllEvents()}all(t){this.events.forEach((e=>{e(t)}))}updateAllEvents(){Array.from(this.eventsByKey.values()).forEach((t=>{t.forEach((t=>{this.events.push(t)}))}))}}class B{parseSingle(t,e,s,i){let n,r=t.startsWith("-");return r&&(t=t.slice(1)),"selfHeight"===t?n=e.offsetHeight:t.endsWith("px")?n=parseFloat(t):t.endsWith("%")?n=parseFloat(t)*s/100:t.endsWith("rem")&&(n=parseFloat(t)*i),r?-n:n}}class R{process(t,e=document.body){let s;try{s=e.getBoundingClientRect()}catch(t){s=document.body.getBoundingClientRect()}let i=function(t){let{top:e,left:s,width:i,height:n}=t.getBoundingClientRect(),r=function(t){return window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)}))}(t);if(6==r.length){var o=r;let t=o[0]*o[3]-o[1]*o[2];return{width:i/o[0]==0?1:o[0],height:n/o[3]==0?1:o[3],left:(s*o[3]-e*o[2]+o[2]*o[5]-o[4]*o[3])/t,top:(-s*o[1]+e*o[0]+o[4]*o[1]-o[0]*o[5])/t}}return{top:e,left:s,width:i,height:n}}(t);return{top:i.top-s.top,left:i.left-s.left}}}function H(){return"ontouchstart"in window||navigator.maxTouchPoints>0}class I{get scrollDirection(){return this.data.sD}set scrollDirection(t){this.data.sD=t,this.sEn.scrollDirection=t,this.sEnSmooth.scrollDirection=t,this.sEnDefault.scrollDirection=t,this.sEnDisable.scrollDirection=t,"horizontal"==t?(document.documentElement.classList.add("-horizontal"),document.documentElement.classList.remove("-vertical")):(document.documentElement.classList.add("-vertical"),document.documentElement.classList.remove("-horizontal")),this.rebuild(),this.initObjects(),this.modules.forEach((t=>{t.onChangeScrollDirection()}))}get speedAccelerate(){return this.settings.speedAccelerate}set speedAccelerate(t){this.settings.speedAccelerate=t}get speedDecelerate(){return this.settings.speedDecelerate}set speedDecelerate(t){this.settings.speedDecelerate=t}get scrollPosition(){return this.data.c}set scrollPosition(t){this.data.c=t,this.data.t=t,window.scrollTo(0,this.data.c),this.modules.forEach((t=>{t.onScroll(this.data)}))}set scrollContainer(t){let e=null!=this.data.sC;e&&(this.data.sC.removeEventListener("scroll",this.onScrollBind),this.data.sC.removeEventListener("resize",this.onResizeBind)),this.sEn.scrollContainer=t,this.sEnSmooth.scrollContainer=t,this.sEnDefault.scrollContainer=t,this.sEnDisable.scrollContainer=t,this.data.sC=t,e&&(this.data.sC.addEventListener("scroll",this.onScrollBind),this.data.sC.addEventListener("resize",this.onResizeBind)),this.rebuild(),this.initObjects()}set scrollMobileMode(t){this.mMode=t,this.updateModeParams()}set scrollDesktopMode(t){this.dMode=t,this.updateModeParams()}updateModeParams(){switch(this.window.innerWidth<1024||H()?this.scrollMode=this.mMode:this.scrollMode=this.dMode,this.scrollMode){case"disable":this.data.sM="disable",this.sEn=this.sEnDisable,this.onChangeScrollParams(),document.documentElement.style.overflow="hidden";break;case"default":this.data.sM="default",this.sEn=this.sEnDefault,this.onChangeScrollParams(),document.documentElement.style.overflow="auto";break;default:this.data.sM="smooth",this.sEn=this.sEnSmooth,this.onChangeScrollParams(),document.documentElement.style.overflow="auto"}}constructor(){this.modules=new Array,this.modulesUI=new Array,this.events=new z,this.loop=new T,this.wW=0,this.wH=0,this._virtualCursor=new h,this._lerp=new l,this._attribute=new W,this._boundingClientRect=new k,this._position=new R,this.objects=new Map,this.connectQueue=new Array,this.globalId=1,this._parser=new B,this.scrollMode="smooth",this.mMode="default",this.dMode="smooth",this.defaultSettings={stringOffsetStart:"0%",stringOffsetEnd:"0%",stringEnterEl:"top",stringExitEl:"bottom",stringEnterVp:"bottom",stringExitVp:"top",stringInviewTop:"0%",stringInviewBottom:"0%",stringKey:"--progress",stringStrength:.3,stringRadius:150,stringLerp:.2,stringParallaxBias:0,stringParallax:.2},this.root=document.body,this.window=window,this.settings=new _,this.data=new j,this.settings.speedAccelerate=.13,this.settings.speedDecelerate=.04,this.sEnSmooth=new L(document,this.settings,this.data),this.sEnDefault=new P(document,this.settings,this.data),this.sEnDisable=new C(document,this.settings,this.data),this.sEn=this.sEnSmooth,this.scrollContainer=window,this.data.sC=this.window,this.data.sD="vertical",document.documentElement.classList.add("-vertical"),this.onWheelBind=this.onWheelEvent.bind(this),this.onScrollBind=this.onScrollEvent.bind(this),this.onResizeBind=this.onResizeEvent.bind(this),this.onMouseMoveBind=this.onMouseMoveEvent.bind(this),this.loop.onFrame=()=>{this.onUpdateEvent()},this.rebuild()}static getInstance(){return I.i||(I.i=new I),I.i}use(t,e=null){const s=new t({data:this.data,lerp:this._lerp,attribute:this._attribute,boundingClientRect:this._boundingClientRect,position:this._position,virtualCursor:this._virtualCursor,events:this.events},e);1==s.type&&this.modules.push(s),2==s.type&&this.modulesUI.push(s)}start(t){this.data.sC.addEventListener("scroll",this.onScrollBind),this.data.sC.addEventListener("resize",this.onResizeBind),this.root.addEventListener("wheel",this.onWheelBind,{passive:!1}),this.root.addEventListener("mousemove",this.onMouseMoveBind),new ResizeObserver((t=>{Array.from(this.objects.values()).forEach((t=>{this.setupObject(t.el,t)}))})).observe(document.body),this.loop.start(t),document.documentElement.classList.add("-string"),this.modules.forEach((t=>{t.onStart()})),this.modulesUI.forEach((t=>{t.onStart()})),this.initObjects(),this.initMutationObserver()}onChangeScrollParams(){this.modules.forEach((t=>{t.onChangeScrollParams()})),this.modulesUI.forEach((t=>{t.onChangeScrollParams()}))}initObjects(){document.querySelectorAll("[string]").forEach((t=>{this.addObject(t)})),document.querySelectorAll("[string-copy-from]").forEach((t=>{let e=this._attribute.process(t,"string-copy-from");if(null!=e&&this.objects.has(e)){let s=this.objects.get(e);null!=s&&s.connects.push(t)}})),this.modules.forEach((t=>{t.onResize(),t.onScroll(this.data),t.onUpdate(this.data)}))}destroy(){this.window.removeEventListener("scroll",this.onScrollBind),this.root.removeEventListener("wheel",this.onScrollBind),this.window.removeEventListener("resize",this.onResizeBind),this.root.removeEventListener("mousemove",this.onMouseMoveBind),this.loop.stop(),this.modules.forEach((t=>{t.destructor()})),this.modulesUI.forEach((t=>{t.destructor()}))}on(t,e,s=""){switch(t){case"scroll":this.events.on("scroll",e);break;case"progress":this.events.on(`progress_${s}`,e);break;case"lerp":this.events.on("lerp",e);break;case"intersection":this.events.on(`intersection_${s}`,e);break;case"inview":this.events.on(`inview_${s}`,e);break;case"cursor":this.events.on("cursor",e)}}off(t,e,s=""){switch(t){case"scroll":this.events.off("scroll",e);break;case"progress":this.events.off(`progress_${s}`,e);break;case"lerp":this.events.off("lerp",e);break;case"intersection":this.events.off(`intersection_${s}`,e);break;case"inview":this.events.off(`inview_${s}`,e);break;case"cursor":this.events.off("cursor",e)}}setupSettings(t){null!=t["string-offset-top"]&&(this.defaultSettings.stringOffsetStart=t["string-offset-top"]),null!=t["string-offset-bottom"]&&(this.defaultSettings.stringOffsetEnd=t["string-offset-bottom"]),null!=t["string-offset-left"]&&(this.defaultSettings.stringOffsetStart=t["string-offset-left"]),null!=t["string-offset-right"]&&(this.defaultSettings.stringOffsetEnd=t["string-offset-right"]),null!=t["string-inview-top"]&&(this.defaultSettings.stringInviewTop=t["string-inview-top"]),null!=t["string-inview-left"]&&(this.defaultSettings.stringInviewTop=t["string-inview-left"]),null!=t["string-inview-bottom"]&&(this.defaultSettings.stringInviewBottom=t["string-inview-bottom"]),null!=t["string-inview-right"]&&(this.defaultSettings.stringInviewBottom=t["string-inview-right"]),null!=t["string-enter-el"]&&(this.defaultSettings.stringEnterEl=t["string-enter-el"]),null!=t["string-enter-vp"]&&(this.defaultSettings.stringEnterVp=t["string-enter-vp"]),null!=t["string-exit-el"]&&(this.defaultSettings.stringExitEl=t["string-exit-el"]),null!=t["string-exit-vp"]&&(this.defaultSettings.stringExitVp=t["string-exit-vp"]),null!=t["string-key"]&&(this.defaultSettings.stringKey=t["string-key"]),null!=t["string-strength"]&&(this.defaultSettings.stringStrength=t["string-strength"]),null!=t["string-radius"]&&(this.defaultSettings.stringRadius=t["string-radius"]),null!=t["string-lerp"]&&(this.defaultSettings.stringLerp=t["string-lerp"]),null!=t["string-parallax-bias"]&&(this.defaultSettings.stringParallaxBias=t["string-parallax-bias"]),null!=t["string-parallax"]&&(this.defaultSettings.stringParallax=t["string-parallax"])}setupObject(t,e){var s,i,n;null===(s=e.showObserver)||void 0===s||s.disconnect(),null===(i=e.progressObserver)||void 0===i||i.disconnect(),null===(n=e.inviewObserver)||void 0===n||n.disconnect();let r=this._boundingClientRect.process(t),o=r.width/this.data.scsW,a=r.height/this.data.scsH,l=this._attribute.process(t,"string-enter-el")||this.defaultSettings.stringEnterEl,h=this._attribute.process(t,"string-exit-el")||this.defaultSettings.stringExitEl,c=this._attribute.process(t,"string-enter-vp")||this.defaultSettings.stringEnterVp,d=this._attribute.process(t,"string-exit-vp")||this.defaultSettings.stringExitVp;e.inviewTop=-1*this._parser.parseSingle(this._attribute.process(t,"string-inview-top",this._attribute.process(t,"string-inview-left",this.defaultSettings.stringInviewTop)),t,"vertical"==this.data.sD?a:o,16),e.inviewBottom=-1*this._parser.parseSingle(this._attribute.process(t,"string-inview",this._attribute.process(t,"string-inview-bottom",this._attribute.process(t,"string-inview-right",this.defaultSettings.stringInviewBottom))),t,"vertical"==this.data.sD?a:o,16),e.selfDisable=null!=this._attribute.process(t,"string-self-disable"),e.abs=null!=this._attribute.process(t,"string-abs");let u=this._attribute.process(t,"string-cursor-target");null!=u&&(e.cursorTarget=document.querySelector(`[string-cursor-content="${u}"]`)),e.id=this._attribute.process(t,"string-id",`string-${this.globalId}`),e.key=this._attribute.process(t,"string-key",this.defaultSettings.stringKey),e.strength=this._attribute.process(t,"string-strength",this.defaultSettings.stringStrength),e.radius=this._attribute.process(t,"string-radius",this.defaultSettings.stringRadius),e.lerp=this._attribute.process(t,"string-lerp",this.defaultSettings.stringLerp);let p=this._attribute.process(t,"string-parallax-bias",this.defaultSettings.stringParallaxBias);e.parallaxPositionStart=.5*p-.5,e.parallaxPositionEnd=.5+.5*(1-p),t.setAttribute("string-id",e.id),"vertical"==this.data.sD?e.size=a:e.size=o,e.oStart=this._parser.parseSingle(this._attribute.process(t,"string-offset-top",this._attribute.process(t,"string-offset-left",this.defaultSettings.stringOffsetStart)),t,this.data.wS,16),e.oEnd=this._parser.parseSingle(this._attribute.process(t,"string-offset-bottom",this._attribute.process(t,"string-offset-right",this.defaultSettings.stringOffsetEnd)),t,this.data.wS,16);let m=this._parser.parseSingle(this._attribute.process(t,"string-offset-top",this._attribute.process(t,"string-offset-left",this.defaultSettings.stringOffsetStart)),t,this.data.wS,16),g=this._parser.parseSingle(this._attribute.process(t,"string-offset-bottom",this._attribute.process(t,"string-offset-right",this.defaultSettings.stringOffsetEnd)),t,this.data.wS,16);this._attribute.process(e.el,"string","").split("|").includes("parallax")&&(m=0,g=0,e.oStart=0,e.oEnd=0),e.factor=Math.min(1,this._attribute.process(t,"string-parallax",this.defaultSettings.stringParallax)),e.oStart+=e.factor*this.data.wS*.5,e.oEnd+=e.factor*this.data.wS*.5,e.repeat=null!=this._attribute.process(t,"string-repeat"),e.sElPos=l,e.sScrPos=c,e.eElPos=h,e.eScrPos=d,e.halfWidth=o/2,e.halfHeight=a/2;let b=this.data.wS;if("vertical"==this.data.sD){let s=this._position.process(t,this.data.sC).top/this.data.scsH;e.start=s,e.end=s+a}else{let s=this._position.process(t,this.data.sC).left/this.data.scsW;e.start=s,e.end=s+o}e.calculatePositions(b);let v,f,E=this.connectQueue.filter((t=>t.id==e.id));this.connectQueue=this.connectQueue.filter((t=>t.id!=e.id)),E.forEach((t=>{e.connects.push(t.element)})),"vertical"==this.data.sD?(v={root:null,rootMargin:`${m+this.data.wS}px 0px ${g+this.data.wS}px 0px`,threshold:.001},f={root:null,rootMargin:`${m+e.inviewTop}px 0px ${g+e.inviewBottom}px 0px`,threshold:.001}):(v={root:null,rootMargin:`0px ${m+this.data.wS}px 0px ${g+this.data.wS}px`,threshold:.001},f={root:null,rootMargin:`0px ${m+e.inviewTop}px 0px ${g+e.inviewBottom}px`,threshold:.001});let y=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?0==e.active&&(this.events.emit(`activate_object_${e.id}`,!0),e.enter()):1==e.active&&(this.events.emit(`activate_object_${e.id}`,!1),e.leave())}))}),v),w=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?this.events.emit(`intersection_${e.id}`,!0):this.events.emit(`intersection_${e.id}`,!1)}))}),{root:null,rootMargin:"0px 0px 0px 0px",threshold:.001}),S=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?(this.events.emit(`inview_${e.id}`,!0),e.show()):(this.events.emit(`inview_${e.id}`,!1),e.hide())}))}),f);y.observe(t),w.observe(t),S.observe(t),e.showObserver=w,e.progressObserver=y,e.inviewObserver=S}addObject(t){let e,s=this._attribute.process(t,"string-inited");e=null==s?new m(t):this.objects.has(this._attribute.process(t,"string-id"))?this.objects.get(this._attribute.process(t,"string-id")):new m(t),t.setAttribute("string-inited",""),this.setupObject(t,e),this.modules.forEach((t=>{t.tryConnect(e)&&t.connect(e)})),this.objects.set(e.id,e),this.globalId++}removeObject(t){let e=this.objects.get(t);null!=(null==e?void 0:e.showObserver)&&(null==e||e.showObserver.disconnect()),null!=(null==e?void 0:e.progressObserver)&&(null==e||e.progressObserver.disconnect()),null!=(null==e?void 0:e.inviewObserver)&&(null==e||e.inviewObserver.disconnect()),this.objects.delete(t),null==e||e.el.removeAttribute("string-inited"),null==e||e.leave(),e=void 0}onMouseMoveEvent(t){this._virtualCursor.onMouseMove(t),this.modules.forEach((e=>{e.onMouseMove(t)})),this.modulesUI.forEach((e=>{e.onMouseMove(t)}))}onWheelEvent(t){this.sEn.onWheel(t),this.modules.forEach((e=>{e.onWheel(t)})),this.modulesUI.forEach((e=>{e.onWheel(t)}))}onScrollEvent(t){this.sEn.onScroll(t),this.modules.forEach((t=>{t.onScroll(this.data)})),this.modulesUI.forEach((t=>{t.onScroll(this.data)})),this.events.emit("lerp",this.data.v),this.events.emit("scroll",this.data.c)}onUpdateEvent(){this._virtualCursor.onUpdate(),this.sEn.onUpdate(),this.modules.forEach((t=>{t.onUpdate(this.data)})),this.modulesUI.forEach((t=>{t.onUpdate(this.data)}))}onResizeEvent(){try{let t=this.sEn.scrollContainer.getBoundingClientRect();this.wW=t.width,this.wH=t.height}catch(t){this.wW=this.sEn.scrollContainer.innerWidth,this.wH=this.sEn.scrollContainer.innerHeight}("vertical"==this.data.sD&&this.wW!=this.data.wS||this.window.innerWidth>1024||"horizontal"==this.data.sD&&this.wW!=this.data.wS||this.window.innerWidth>1024)&&(this.rebuild(),this.modules.forEach((t=>{t.onResize()})),this.modulesUI.forEach((t=>{t.onResize()})))}initMutationObserver(){new MutationObserver((t=>{t.forEach((t=>{"childList"===t.type&&(t.addedNodes.length>0&&t.addedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]:not([string-inited])").forEach((t=>{this.addObject(t);let e=this._attribute.process(t,"string-copy-from");if(null!=e)if(this.objects.has(e)){let s=this.objects.get(e);null!=s&&s.connects.push(t)}else this.connectQueue.push({id:e,element:t})}))})),t.removedNodes.length>0&&t.removedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]").forEach((t=>{let e=t.getAttribute("string-id"),s=this._attribute.process(t,"string-copy-from");null!=s&&(this.connectQueue=this.connectQueue.filter((t=>t.id!=s))),null!=e&&this.removeObject(e)}))})),(t.addedNodes.length>0||t.removedNodes.length>0)&&this.modules.forEach((t=>{t.onRebuild()})))}))})).observe(document.body,{attributes:!1,childList:!0,subtree:!0})}rebuild(){try{let e=(t=this.data.sC,window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)})));this.data.scsW=e[0],this.data.scsH=e[3]}catch(t){this.data.scsW=1,this.data.scsH=1}var t;try{let t=this.data.sC.getBoundingClientRect();this.wW=t.width/this.data.scsW,this.wH=t.height/this.data.scsH}catch(t){this.wW=this.data.sC.innerWidth,this.wH=this.data.sC.innerHeight}this.wW<1024||H()?this.scrollMode=this.mMode:this.scrollMode=this.dMode;let e=document.body,s=document.documentElement;this.data.psW=this.data.sC.scrollWidth,this.data.psH=this.data.sC.scrollHeight,null==this.data.psW&&(this.data.psW=Math.max(e.scrollWidth,e.offsetWidth,s.clientWidth,s.scrollWidth,s.offsetWidth)),null==this.data.psH&&(this.data.psH=Math.max(e.scrollHeight,e.offsetHeight,s.clientHeight,s.scrollHeight,s.offsetHeight)),"vertical"==this.data.sD?(this.data.bS=this.data.psH-this.wH,this.data.wS=this.wH):(this.data.bS=this.data.psW-this.wW,this.data.wS=this.wW),this.data.hnwS=-.5*this.data.wS,this.updateModeParams()}}return e})()));
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack://StringTune/webpack/universalModuleDefinition","webpack://StringTune/webpack/bootstrap","webpack://StringTune/webpack/runtime/define property getters","webpack://StringTune/webpack/runtime/hasOwnProperty shorthand","webpack://StringTune/webpack/runtime/make namespace object","webpack://StringTune/./src/StringModule.ts","webpack://StringTune/./src/Loading/Modules/StringLazy.ts","webpack://StringTune/./src/Loading/Modules/StringLoading.ts","webpack://StringTune/./src/Loading/Modules/StringVideoAutoplay.ts","webpack://StringTune/./src/Mouse/Modules/StringCursor.ts","webpack://StringTune/./src/Mouse/Modules/StringMagnetic.ts","webpack://StringTune/./src/Utils/StringLerp.ts","webpack://StringTune/./src/Mouse/StringVirtualCursor.ts","webpack://StringTune/./src/Objects/StringObject.ts","webpack://StringTune/./src/Screen/StringResponsive.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarHorizontal.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarVertical.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbar.ts","webpack://StringTune/./src/Scroll/Modules/StringDisplacement.ts","webpack://StringTune/./src/Scroll/Modules/StringParallax.ts","webpack://StringTune/./src/Scroll/Modules/StringProgress.ts","webpack://StringTune/./src/Scroll/Types/StringScroll.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDefault.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDisable.ts","webpack://StringTune/./src/Scroll/Types/StringScrollSmooth.ts","webpack://StringTune/./src/Scroll/Types/StringTypeSettings.ts","webpack://StringTune/./src/Split/Modules/StringSplit.ts","webpack://StringTune/./src/StringFPS.ts","webpack://StringTune/./src/Tracker/StringFPSTracker.ts","webpack://StringTune/./src/Tracker/StringPositionTracker.ts","webpack://StringTune/./src/Utils/StringAttribute.ts","webpack://StringTune/./src/Utils/StringBoundingClientRect.ts","webpack://StringTune/./src/Utils/StringData.ts","webpack://StringTune/./src/Utils/StringEvent.ts","webpack://StringTune/./src/Utils/StringParser.ts","webpack://StringTune/./src/Utils/StringPosition.ts","webpack://StringTune/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"StringTune\"] = factory();\n\telse\n\t\troot[\"StringTune\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { IStringModule } from './IStringModule';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerp } from './Utils/StringLerp';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nexport class StringModule implements IStringModule {\r\n lerp: StringLerp;\r\n attribute: StringAttribute;\r\n boundingClientRect: StringBoundingClientRect;\r\n position: StringPosition;\r\n events: StringEvent;\r\n data: StringData;\r\n virtualCursor: StringVirtualCursor;\r\n settings: any = null;\r\n protected objectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected objects: Array<StringObject> = new Array<StringObject>();\r\n protected htmlKey: string = '';\r\n protected _type: number = 1;\r\n public get type() {\r\n return this._type;\r\n }\r\n constructor(visitor: any, settings: any = null) {\r\n this.data = visitor.data;\r\n this.lerp = visitor.lerp;\r\n this.attribute = visitor.attribute;\r\n this.boundingClientRect = visitor.boundingClientRect;\r\n this.position = visitor.position;\r\n this.virtualCursor = visitor.virtualCursor;\r\n this.events = visitor.events;\r\n this.settings = settings;\r\n }\r\n destructor() { }\r\n \r\n onChangeScrollParams(): void {}\r\n\r\n tryConnect(object: StringObject): boolean {\r\n let stringModuleKeys = this.attribute.process(object.el, 'string', '').split('|');\r\n\r\n let value = false;\r\n stringModuleKeys.forEach((key: string) => {\r\n if (key == this.htmlKey) {\r\n value = true;\r\n }\r\n });\r\n return value;\r\n }\r\n connect(object: StringObject) {\r\n object.connect(this);\r\n this.onConnect(object);\r\n }\r\n addObject(id: string, object: StringObject) {\r\n this.objectsMap.set(id, object);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n removeObject(id: string) {\r\n this.objectsMap.delete(id);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n\r\n onStart(): void {}\r\n onUpdate(data: StringData): void {}\r\n onResize(): void {}\r\n onConnect(object: StringObject): void {}\r\n onRebuild(): void {}\r\n onScroll(data: StringData): void {}\r\n onMouseMove(e: MouseEvent): void {}\r\n onWheel(e: WheelEvent): void {}\r\n onChangeDevice(): void {}\r\n onChangeScrollDirection(): void {}\r\n onMutationObserver(added: NodeList, removed: NodeList): void {}\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\nexport class StringLazy extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'lazy';\r\n }\r\n\r\n onStart(): void {\r\n const imagesEls = document.querySelectorAll('img[string-lazy]');\r\n imagesEls.forEach((element: any) => {\r\n this.getImageSize(element, element.getAttribute('string-lazy'));\r\n element.classList.add(`lazyLoad`);\r\n element.src = element.getAttribute('string-lazy') as any;\r\n element.addEventListener('load', () => {\r\n element.classList.add(`-loaded`);\r\n });\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLVideoElement;\r\n }\r\n\r\n private getImageSize(element: HTMLElement, url: string) {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = () => {\r\n if (xhr.status === 206 || xhr.status === 200) {\r\n const buffer = xhr.response;\r\n const blob = new Blob([buffer]);\r\n const img = new Image();\r\n img.onload = () => {\r\n element.style.aspectRatio = `${img.width} / ${img.height}`;\r\n resolve({ width: img.width, height: img.height });\r\n URL.revokeObjectURL(img.src);\r\n };\r\n img.onerror = () => {\r\n reject(new Error('Failed to load image'));\r\n };\r\n img.src = URL.createObjectURL(blob);\r\n } else {\r\n reject(new Error('Failed to load image'));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('Network error'));\r\n };\r\n xhr.setRequestHeader('Range', 'bytes=0-');\r\n xhr.send();\r\n });\r\n }\r\n}\r\n","import { StringModule } from \"../../StringModule\";\r\nimport { StringData } from \"../../Utils/StringData\";\r\n\r\n\r\nexport class StringLoading extends StringModule{\r\n loadingTimeout: number = 0\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor)\r\n this._type = 2\r\n\r\n if (settings != null) {\r\n if (settings.timeout != null) {\r\n this.loadingTimeout = settings.timeout\r\n }\r\n }\r\n }\r\n onStart(): void {\r\n setTimeout(() => {\r\n const htmlElement = document.documentElement;\r\n htmlElement.classList.add('-loaded');\r\n }, this.loadingTimeout);\r\n \r\n }\r\n}","import { StringObject } from \"../../Objects/StringObject\";\r\nimport { StringModule } from \"../../StringModule\";\r\n\r\nexport class StringVideoAutoplay extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = \"autoplay\";\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const videoSrc = this.attribute.process(videoElement, \"string-src\", \"\");\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (videoElement.tagName.toLowerCase() === \"video\" && videoSrc && started == false) {\r\n videoElement.setAttribute(\"muted\", \"muted\");\r\n videoElement.setAttribute(\"playsinline\", \"\");\r\n videoElement.setAttribute(\"loop\", \"\");\r\n videoElement.setAttribute(\"autoplay\", \"\");\r\n videoElement.src = videoSrc;\r\n videoElement.muted = true;\r\n videoElement.addEventListener(\"canplaythrough\", () => {\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (started == false) {\r\n this.tryPlay(object, videoElement); \r\n }\r\n }, { once: true });\r\n videoElement.load();\r\n } else {\r\n console.warn(\r\n \"StringVideoAutoplay: Element is not a <video> tag or string-src is missing.\",\r\n object.el\r\n );\r\n }\r\n }\r\n\r\n private tryPlay(object: StringObject, element: HTMLVideoElement) {\r\n element.play().catch((err) => {\r\n console.warn(\"Autoplay failed:\", err);\r\n object.started = false;\r\n }).then(() => {\r\n object.started = true;\r\n element.setAttribute(`string-started`, '')\r\n });\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringCursor extends StringModule {\r\n private lerpFactor: number = 0.2;\r\n private oldX = 0;\r\n private oldY = 0;\r\n protected enterObjectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected enterObjects: Array<StringObject> = new Array<StringObject>();\r\n cursor: any;\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor);\r\n this.htmlKey = 'cursor';\r\n this.cursor = document.querySelector('[string-cursor]') as HTMLElement;\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n if (this.virtualCursor.smoothX != this.oldX || this.virtualCursor.smoothY != this.oldY) {\r\n let cursorData = {\r\n lerpX: this.virtualCursor.lerpX,\r\n lerpY: this.virtualCursor.lerpY,\r\n x: this.virtualCursor.x,\r\n y: this.virtualCursor.y,\r\n };\r\n this.events.emit('cursor', cursorData);\r\n\r\n this.cursor.style.setProperty('--x', this.virtualCursor.smoothX);\r\n this.cursor.style.setProperty('--y', this.virtualCursor.smoothY);\r\n\r\n this.oldX = this.virtualCursor.smoothX;\r\n this.oldY = this.virtualCursor.smoothY;\r\n }\r\n\r\n this.objects.forEach((object) => {\r\n if (object.isMouseMove) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', this.virtualCursor.x - rect.left, rect.width);\r\n const offsetY = this.calculateOffset('center', this.virtualCursor.y - rect.top, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n } else {\r\n if (object.mouseX != 0 || object.mouseY != 0) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', object.halfWidth, rect.width);\r\n const offsetY = this.calculateOffset('center', object.halfHeight, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n }\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n\r\n let onMouseEnterEventBind = () => {\r\n element.addEventListener('mousemove', onMouseMoveEventBind);\r\n element.addEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = true;\r\n if (object.cursorTarget != null) {\r\n object.cursorTarget.classList.add('-show');\r\n }\r\n };\r\n let onMouseMoveEventBind = (event: MouseEvent) => {};\r\n let onMouseLeaveEventBind = () => {\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = false;\r\n if (object.cursorTarget != null) {\r\n object.cursorTarget.classList.remove('-show');\r\n }\r\n };\r\n\r\n object.onEnter = () => {\r\n element.addEventListener('mouseenter', onMouseEnterEventBind);\r\n };\r\n object.onLeave = () => {\r\n element.removeEventListener('mouseenter', onMouseEnterEventBind);\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n };\r\n }\r\n\r\n private setMouseCoordinates(object: StringObject, x: number, y: number) {\r\n if (object.selfDisable == false) {\r\n object.el.style.setProperty('--mouse-x', x.toFixed(2));\r\n object.el.style.setProperty('--mouse-y', y.toFixed(2));\r\n }\r\n object.connects.forEach((element) => {\r\n element.style.setProperty('--mouse-x', x.toFixed(2));\r\n element.style.setProperty('--mouse-y', y.toFixed(2));\r\n });\r\n }\r\n\r\n private calculateOffset(position: string, mousePos: number, size: number): number {\r\n switch (position) {\r\n case 'start':\r\n return mousePos / size;\r\n case 'end':\r\n return (mousePos - size) / size;\r\n case 'center':\r\n default:\r\n return (mousePos - size / 2) / (size / 2);\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringMagnetic extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'magnetic';\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLElement;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-strength'] != null) {\r\n object.strength = this.settings['string-strength'];\r\n }\r\n if (this.settings['string-radius'] != null) {\r\n object.radius = this.settings['string-radius'];\r\n }\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.objects.forEach((object) => {\r\n const element = object.el as HTMLElement;\r\n const rect = element.getBoundingClientRect();\r\n const elementCenterX = rect.left + object.halfWidth;\r\n const elementCenterY = rect.top + object.halfHeight;\r\n const distX = e.clientX - elementCenterX;\r\n const distY = e.clientY - elementCenterY;\r\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\r\n\r\n if (distance < object.radius) {\r\n object.magneticTargetX = distX * object.strength * ((object.radius - distance) / object.radius);\r\n object.magneticTargetY = distY * object.strength * ((object.radius - distance) / object.radius);\r\n object.isMagneting = true;\r\n } else {\r\n object.magneticTargetX = 0;\r\n object.magneticTargetY = 0;\r\n }\r\n });\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n if (object.isMagneting) {\r\n let lerpX = this.lerp.process(object.magneticX, object.magneticTargetX, object.lerp);\r\n let lerpY = this.lerp.process(object.magneticY, object.magneticTargetY, object.lerp);\r\n if (lerpX > -0.01 && lerpX < 0.01) {\r\n lerpX = 0;\r\n object.magneticX = object.magneticTargetX;\r\n }\r\n if (lerpY > -0.01 && lerpY < 0.01) {\r\n lerpY = 0;\r\n object.magneticY = object.magneticTargetY;\r\n }\r\n object.magneticX += lerpX;\r\n object.magneticY += lerpY;\r\n object.el.style.setProperty('--magnetic-x', object.magneticX.toString());\r\n object.el.style.setProperty('--magnetic-y', object.magneticY.toString());\r\n if (object.magneticTargetX == object.magneticX || object.magneticTargetY == object.magneticY) {\r\n object.isMagneting = false;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export class StringLerp{\r\n process(start: number, end: number, amt: number) {\r\n return amt * (end - start);\r\n }\r\n}","import { IStringModule } from \"../IStringModule\"\r\nimport { StringModule } from \"../StringModule\";\r\nimport { StringLerp } from \"../Utils/StringLerp\";\r\n\r\nexport class StringVirtualCursor{\r\n private _lF = .1\r\n private lerp = new StringLerp()\r\n \r\n private _x: number = 0\r\n private _y: number = 0\r\n private _lerpX: number = 0\r\n private _lerpY: number = 0\r\n\r\n private targetX: number = 0\r\n private targetY: number = 0\r\n\r\n public get x(){\r\n return this.targetX\r\n }\r\n public get y(){\r\n return this.targetY\r\n }\r\n public get smoothX(){\r\n return this._x\r\n }\r\n public get smoothY(){\r\n return this._y\r\n }\r\n public get lerpX(){\r\n return this._lerpX\r\n }\r\n public get lerpY(){\r\n return this._lerpY\r\n }\r\n\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.targetX = e.clientX;\r\n this.targetY = e.clientY;\r\n }\r\n onUpdate(): void {\r\n this._lerpX = this.lerp.process(this._x, this.targetX, this._lF)\r\n this._lerpY = this.lerp.process(this._y, this.targetY, this._lF)\r\n \r\n this._x = Math.floor(this._x + this._lerpX);\r\n this._y = Math.floor(this._y + this._lerpY);\r\n }\r\n\r\n\r\n}","import { IStringModule } from '../IStringModule';\r\n\r\nconst tS = 'top';\r\nconst bS = 'bottom';\r\nconst lS = 'left';\r\nconst rS = 'right';\r\n\r\nexport class StringObject {\r\n public el: HTMLElement;\r\n public id: string = '';\r\n public oStart: number = 0;\r\n public oEnd: number = 0;\r\n public size: number = 0;\r\n\r\n public startPos: number = 0;\r\n public endPos: number = 0;\r\n public differencePos: number = 0;\r\n public factor: number = 1;\r\n\r\n public inviewTop: number = 1;\r\n public inviewBottom: number = 1;\r\n\r\n public sElPos: string = '';\r\n public sScrPos: string = '';\r\n public eElPos: string = '';\r\n public eScrPos: string = '';\r\n\r\n public halfWidth: number = 0;\r\n public halfHeight: number = 0;\r\n\r\n public start: number = 0;\r\n public end: number = 0;\r\n\r\n public mouseX: number = 0;\r\n public mouseY: number = 0;\r\n\r\n public magneticTargetX: number = 0;\r\n public magneticTargetY: number = 0;\r\n\r\n public magneticX: number = 0;\r\n public magneticY: number = 0;\r\n\r\n public lerp: number = 0;\r\n public strength: number = 0;\r\n public radius: number = 0;\r\n public parallaxPositionStart: number = 0;\r\n public parallaxPositionEnd: number = 0;\r\n\r\n public connects: Array<HTMLElement> = new Array<HTMLElement>();\r\n public cursorTarget: any = null;\r\n\r\n public key: string = '--progress';\r\n\r\n public showObserver: IntersectionObserver | null = null;\r\n public progressObserver: IntersectionObserver | null = null;\r\n public inviewObserver: IntersectionObserver | null = null;\r\n\r\n public repeat: boolean = false;\r\n public selfDisable: boolean = false;\r\n public active: boolean = false;\r\n public abs: boolean = false;\r\n public isMouseMove: boolean = false;\r\n public started: boolean = false;\r\n public isMagneting: boolean = false;\r\n\r\n public onEnter = () => {};\r\n public onLeave = () => {};\r\n\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n\r\n constructor(element: HTMLElement) {\r\n this.el = element;\r\n }\r\n\r\n enter() {\r\n this.active = true;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.addObject(this.id, this);\r\n });\r\n this.onEnter();\r\n }\r\n leave() {\r\n this.active = false;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.removeObject(this.id);\r\n });\r\n this.onLeave();\r\n }\r\n show() {\r\n this.el.classList.add('-inview');\r\n }\r\n hide() {\r\n if (this.repeat) {\r\n this.el.classList.remove('-inview');\r\n }\r\n }\r\n\r\n connect(module: IStringModule) {\r\n this.modules.push(module);\r\n }\r\n\r\n \r\n public calculatePositions(windowSize: number) {\r\n if ((this.sElPos === tS && this.sScrPos === tS) || (this.sElPos === lS && this.sScrPos === lS)) {\r\n this.startPos = this.start - this.oEnd;\r\n } else if ((this.sElPos === tS && this.sScrPos === bS) || (this.sElPos === lS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === tS) || (this.sElPos === rS && this.sScrPos === lS)) {\r\n this.startPos = this.start + this.size - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === bS) || (this.sElPos === rS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd + this.size;\r\n }\r\n\r\n if ((this.eElPos === tS && this.eScrPos === tS) || (this.eElPos === lS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.oStart;\r\n } else if ((this.eElPos === tS && this.eScrPos === bS) || (this.eElPos === lS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === tS) || (this.eElPos === rS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.size + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === bS) || (this.eElPos === rS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.size + this.oStart;\r\n }\r\n this.differencePos = this.endPos - this.startPos;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\n\nenum DeviceType {\n Mobile,\n Tablet,\n Laptop,\n Desktop,\n}\n\ninterface DeviceQueryConfig {\n min?: number;\n max?: number;\n enable?: boolean;\n}\n\ninterface QueryConfig {\n mobile?: DeviceQueryConfig;\n tablet?: DeviceQueryConfig;\n laptop?: DeviceQueryConfig;\n desktop?: DeviceQueryConfig;\n}\n\nclass StringResponsiveQueryDevice {\n public min?: number = undefined;\n public max?: number = undefined;\n public enable: boolean = true;\n\n constructor(config?: DeviceQueryConfig) {\n this.min = config?.min;\n this.max = config?.max;\n this.enable = config?.enable ?? true;\n }\n\n setEnable(enable: boolean = true) {\n this.enable = enable;\n }\n setRange(min?: number, max?: number) {\n this.min = min ?? undefined;\n this.max = max ?? undefined;\n }\n\n get mediaQuery(): string {\n let query = 'screen';\n if (this.min) {\n query += ` and (min-width: ${this.min}px)`;\n }\n if (this.max) {\n query += ` and (max-width: ${this.max}px)`;\n }\n return query;\n }\n}\n\nexport class StringResponsive extends StringModule {\n private queries: { [key in DeviceType]: StringResponsiveQueryDevice } = {\n [DeviceType.Mobile]: new StringResponsiveQueryDevice({ max: 359 }),\n [DeviceType.Tablet]: new StringResponsiveQueryDevice({ min: 360, max: 1079 }),\n [DeviceType.Laptop]: new StringResponsiveQueryDevice({ min: 1080, max: 1365 }),\n [DeviceType.Desktop]: new StringResponsiveQueryDevice({ min: 1366 }),\n };\n\n private matchMedias: { [key in DeviceType]: MediaQueryList } = {\n [DeviceType.Mobile]: window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery),\n [DeviceType.Tablet]: window.matchMedia(this.queries[DeviceType.Tablet].mediaQuery),\n [DeviceType.Laptop]: window.matchMedia(this.queries[DeviceType.Laptop].mediaQuery),\n [DeviceType.Desktop]: window.matchMedia(this.queries[DeviceType.Desktop].mediaQuery),\n };\n\n constructor(visitor: any) {\n super(visitor);\n this._type = 2;\n }\n\n onConnect() {\n if (this.settings != null) {\n if (this.settings['settings'] != null) {\n let config = this.settings['settings']\n if (config.mobile) {\n this.queries[DeviceType.Mobile].enable = true\n this.queries[DeviceType.Mobile].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Mobile] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery)\n } else {\n this.queries[DeviceType.Mobile].enable = false\n }\n\n if (config.tablet) {\n this.queries[DeviceType.Tablet].enable = true\n this.queries[DeviceType.Tablet].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Tablet] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery)\n } else {\n this.queries[DeviceType.Tablet].enable = false\n }\n\n if (config.laptop) {\n this.queries[DeviceType.Laptop].enable = true\n this.queries[DeviceType.Laptop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Laptop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery)\n } else {\n this.queries[DeviceType.Laptop].enable = false\n }\n\n if (config.desktop) {\n this.queries[DeviceType.Desktop].enable = true\n this.queries[DeviceType.Desktop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Desktop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery)\n } else {\n this.queries[DeviceType.Desktop].enable = false\n }\n\n }\n }\n }\n\n onStart(): void {\n this.updateElements();\n }\n\n onResize(): void {\n this.updateElements();\n }\n\n private updateElements() {\n const isMobileMedia = this.matchMedias[DeviceType.Mobile].matches && this.queries[DeviceType.Mobile].enable;\n const isTabletMedia = this.matchMedias[DeviceType.Tablet].matches && this.queries[DeviceType.Tablet].enable;\n const isLaptopMedia = this.matchMedias[DeviceType.Laptop].matches && this.queries[DeviceType.Laptop].enable;\n const isDesktopMedia = this.matchMedias[DeviceType.Desktop].matches && this.queries[DeviceType.Desktop].enable;\n\n const elements = document.querySelectorAll('[string-mobile], [string-tablet], [string-laptop], [string-desktop]');\n\n elements.forEach((element: any) => {\n let showElement = false;\n\n if (element.hasAttribute('string-mobile') && isMobileMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-tablet') && isTabletMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-laptop') && isLaptopMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-desktop') && isDesktopMedia) {\n showElement = true;\n }\n\n if (showElement) {\n element.classList.add('-show');\n } else {\n element.classList.remove('-show');\n }\n });\n }\n}\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarHorizontal {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startY: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psH;\r\n const visibleSize = this.data.wS;\r\n\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentHeight = this.data.psH;\r\n const visibleHeight = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentHeight) * visibleHeight + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startY = e.clientY;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaY = e.clientY - this.startY;\r\n const newScrollPosition = this.startScrollPosition + (deltaY / this.data.wS) * this.data.psH;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarVertical {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startCoordinate: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psW;\r\n const visibleSize = this.data.wS;\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentWidth = this.data.psW;\r\n const visibleWidth = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentWidth) * visibleWidth + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startCoordinate = e.clientX;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaX = e.clientX - this.startCoordinate;\r\n const newScrollPosition = this.startScrollPosition + (deltaX / this.data.wS) * this.data.psW;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringModule } from '../../../StringModule';\r\nimport { StringData } from '../../../Utils/StringData';\r\nimport { StringScrollbarHorizontal } from './StringScrollbarHorizontal';\r\nimport { StringScrollbarVertical } from './StringScrollbarVertical';\r\n\r\nexport class StringScrollbar extends StringModule {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private scrollTimeout: any;\r\n\r\n private isDragging = false;\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n\r\n private mouseUpEventBind: any;\r\n private mouseDownEventBind: any;\r\n private mouseMoveEventBind: any;\r\n\r\n private scrollbarState: any;\r\n private scrollbarStateHorizontal: any;\r\n private scrollbarStateVertical: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n\r\n this.mouseUpEventBind = this.mouseUpEvent.bind(this);\r\n this.mouseDownEventBind = this.mouseDownEvent.bind(this);\r\n this.mouseMoveEventBind = this.mouseMoveEvent.bind(this);\r\n }\r\n destructor(): void {\r\n document.removeEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.removeEventListener('mousedown', this.mouseDownEventBind);\r\n document.removeEventListener('mousemove', this.mouseMoveEventBind);\r\n }\r\n\r\n onStart(): void {\r\n this.createScrollbar();\r\n this.updateThumb();\r\n this.addCustomStyles();\r\n document.addEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.addEventListener('mousedown', this.mouseDownEventBind);\r\n document.addEventListener('mousemove', this.mouseMoveEventBind);\r\n document.documentElement.classList.add(`-no-scrollbar`);\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.updateThumb();\r\n this.showScrollbar();\r\n this.hideScrollbar();\r\n }\r\n\r\n onResize(): void {\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n onChangeScrollParams(): void {\r\n if (this.data.sM == 'disable' && this.scrollMode != 'disable') {\r\n this.scrollbar.classList.add('-hide');\r\n }\r\n if ((this.data.sM == 'smooth' && this.scrollMode == 'disable') || (this.data.sM == 'default' && this.scrollMode == 'disable')) {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n this.scrollMode = this.data.sM;\r\n }\r\n\r\n onChangeScrollDirection() {\r\n if (this.data.sD == 'horizontal') {\r\n this.scrollbarState = this.scrollbarStateVertical;\r\n } else {\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n private addCustomStyles() {\r\n const style = document.createElement('style');\r\n style.textContent = `\r\n ::-webkit-scrollbar {\r\n display: none;\r\n width: 0;\r\n height: 0;\r\n -webkit-appearance: none;\r\n }\r\n body {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n .-without-scrollbar::-webkit-scrollbar {\r\n display: none;\r\n }\r\n .-without-scrollbar {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n\r\n private createScrollbar() {\r\n this.scrollbar = document.createElement('div');\r\n this.scrollbar.classList.add('scrollbar');\r\n this.thumb = document.createElement('div');\r\n this.thumb.classList.add('thumb');\r\n this.scrollbar.appendChild(this.thumb);\r\n document.body.appendChild(this.scrollbar);\r\n\r\n this.scrollbarStateHorizontal = new StringScrollbarHorizontal(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarStateVertical = new StringScrollbarVertical(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n\r\n private updateThumb() {\r\n this.scrollbarState.updateThumb();\r\n }\r\n\r\n private mouseDownEvent(e: MouseEvent) {\r\n this.isDragging = true;\r\n this.scrollbarState.mouseDownEvent(e);\r\n document.body.style.userSelect = 'none';\r\n this.scrollbar.classList.add('-touch');\r\n }\r\n\r\n private mouseMoveEvent(e: MouseEvent) {\r\n if (!this.isDragging) return;\r\n\r\n this.scrollbarState.mouseMoveEvent(e);\r\n }\r\n\r\n private mouseUpEvent() {\r\n this.isDragging = false;\r\n document.body.style.userSelect = '';\r\n this.hideScrollbar();\r\n this.scrollbar.classList.remove('-touch');\r\n }\r\n\r\n private showScrollbar() {\r\n this.scrollbar.classList.add('-scroll');\r\n }\r\n\r\n private hideScrollbar() {\r\n if (this.scrollTimeout) {\r\n clearTimeout(this.scrollTimeout);\r\n }\r\n this.scrollTimeout = setTimeout(() => {\r\n this.scrollbar.classList.remove('-scroll');\r\n }, 1000);\r\n }\r\n}\r\n","import { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringDisplacement extends StringModule {\r\n oldLerp: number = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'displacement.';\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n if (this.oldLerp != 0 && data.v == 0) {\r\n this.oldLerp = 0\r\n document.documentElement.style.setProperty('--lerp', \"0\");\r\n }\r\n if (data.v > 0) {\r\n document.documentElement.style.setProperty('--lerp', data.v.toString());\r\n this.oldLerp = data.v\r\n }\r\n \r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringParallax extends StringModule {\r\n private setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n\r\n private onScrollDesktopEvent = () => {\r\n this.objects.forEach((object) => {\r\n let progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\r\n object.el.style.setProperty(object.key, progress.toString());\r\n this.setupParallax(object, progress);\r\n });\r\n }\r\n private onScrollMobileEvent = () => {}\r\n private onScrollEvent = this.onScrollDesktopEvent\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'parallax';\r\n }\r\n\r\n onConnect(object: StringObject): void {\r\n if (this.settings != null) {\r\n if (this.settings['string-parallax-bias'] != null) {\r\n let parallaxPosition = this.attribute.process(object.el, 'string-parallax-bias', this.settings['string-parallax-bias']);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n }\r\n if (this.settings['string-parallax'] != null) {\r\n object.factor = this.settings['string-parallax'];\r\n }\r\n }\r\n \r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.onScrollEvent()\r\n }\r\n onChangeScrollDirection(): void {\r\n if (this.data.sD == 'vertical') {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n } else {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n }\r\n }\r\n\r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.onScrollEvent = this.onScrollDesktopEvent\r\n } else {\r\n this.onScrollEvent = this.onScrollMobileEvent \r\n this.objects.forEach((object) => {\r\n this.setupParallax(object, .5);\r\n })\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringProgress extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'progress';\r\n }\r\n onScroll(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n this.setUpObject(object, this.data.c);\r\n });\r\n }\r\n onConnect(object: StringObject) {\r\n object.onEnter = () => {\r\n this.setUpObject(object, this.data.c);\r\n };\r\n }\r\n\r\n private setUpObject(object: StringObject, currentTop: number) {\r\n let progress = Math.min(1, Math.max(0, (currentTop - object.startPos) / object.differencePos));\r\n //TODO BUG\r\n this.events.emit(`progress_${object.id}`, progress);\r\n object.el.style.setProperty(object.key, progress.toString());\r\n object.connects.forEach((element) => {\r\n element.style.setProperty(object.key, progress.toString());\r\n });\r\n }\r\n}\r\n","import { StringData } from '../../Utils/StringData';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScroll {\r\n public data: StringData;\r\n public isProg: boolean = false;\r\n public isParallaxEnabled: boolean = false;\r\n public name: string = '';\r\n public settings: StringTypeSettings;\r\n public v = 0;\r\n protected vT: number = 0;\r\n protected d: any;\r\n\r\n public scrollContainer: any;\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n this.d = document;\r\n this.settings = settings;\r\n this.data = data;\r\n this.scrollContainer = window;\r\n }\r\n\r\n onCalcUpdate: any = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n onUpdate(): void {}\r\n onWheel(e: any): void {}\r\n onScroll(e: any): void {}\r\n\r\n protected _scrollDirection: 'vertical' | 'horizontal' = 'vertical';\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this._scrollDirection = scrollDirection;\r\n if (this._scrollDirection == 'vertical') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n } else if (this._scrollDirection == 'horizontal') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(this.data.c, 0);\r\n };\r\n }\r\n }\r\n}\r\n","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDefault extends StringScroll {\r\n private animateC: number = 0;\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'mobile';\r\n }\r\n public onUpdate() {\r\n this.vT = this.d.documentElement.scrollTop - this.animateC;\r\n this.animateC = this.d.documentElement.scrollTop;\r\n this.v = this.vT;\r\n }\r\n public onScroll(e: any) {\r\n this.data.c = this.d.documentElement.scrollTop;\r\n this.data.t = this.d.documentElement.scrollTop;\r\n this.data.d = 0;\r\n }\r\n}","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDisable extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'disable';\r\n }\r\n\r\n public onUpdate() {}\r\n\r\n public onWheel(e: any) {\r\n e.preventDefault();\r\n }\r\n\r\n public onScroll(e: any) {\r\n e.preventDefault();\r\n }\r\n}","import { StringData } from '../../Utils/StringData';\r\nimport { StringScroll } from './StringScroll';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScrollSmooth extends StringScroll {\r\n public name: string = 'desktop';\r\n private isScroll: boolean = false;\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'desktop';\r\n }\r\n\r\n public onUpdate() {\r\n this.data.v = (this.data.t - this.data.c) * this.settings.speed;\r\n if (this.data.v != 0) {\r\n this.isScroll = true;\r\n\r\n let newC;\r\n if (this.data.v > 0) {\r\n newC = Math.ceil(this.data.c + this.data.v);\r\n document.documentElement.classList.add('-scroll-forward');\r\n document.documentElement.classList.remove('-scroll-back');\r\n } else {\r\n newC = Math.floor(this.data.c + this.data.v);\r\n document.documentElement.classList.add('-scroll-back');\r\n document.documentElement.classList.remove('-scroll-forward');\r\n }\r\n\r\n if (this.data.c != newC) {\r\n this.data.c = newC;\r\n this.isProg = true;\r\n this.onCalcUpdate();\r\n } else {\r\n this.data.c = newC;\r\n }\r\n } else if (this.isScroll) {\r\n this.isScroll = false;\r\n this.data.v = 0;\r\n this.data.c = this.data.t;\r\n this.isProg = false;\r\n document.documentElement.classList.remove('-scroll-back');\r\n document.documentElement.classList.remove('-scroll-forward');\r\n document.documentElement.style.setProperty('--lerp', '0');\r\n }\r\n }\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n e.preventDefault();\r\n this.data.d = e.deltaY;\r\n this.data.t += this.data.d;\r\n this.data.t = Math.min(Math.max(this.data.t, 0), this.data.bS);\r\n }\r\n }\r\n}\r\n","export class StringTypeSettings{\r\n private sC: number = 0.0\r\n private sA: number = 0.13\r\n private sD: number = 0.04\r\n\r\n public get speed() {\r\n return this.sC\r\n }\r\n public get speedAccelerate() {\r\n return this.sA\r\n }\r\n public get speedDecelerate() { \r\n return this.sD\r\n }\r\n\r\n public set speedAccelerate(speed: number) {\r\n this.sA = speed\r\n this.updateScrollParams()\r\n }\r\n public set speedDecelerate(speed: number) { \r\n this.sD = speed\r\n this.updateScrollParams()\r\n }\r\n \r\n private updateScrollParams() {\r\n this.sC = this.sA * (1 - this.sD)\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\ninterface ISplitOptions {\r\n line?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n word?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n char?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n charLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n charWord?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n wordLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n}\r\n\r\nexport class StringSplit extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'split';\r\n }\r\n\r\n onStart(): void {}\r\n onResize(): void {\r\n document.querySelectorAll(`[string=\"split\"].-splited`).forEach((element) => {\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n element.innerHTML = this.split(splitOptions, element).html;\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n if (!element.classList.contains('-splited')) {\r\n element.classList.add('-splited');\r\n element.setAttribute('string-split-original', element.innerHTML);\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n element.innerHTML = this.split(splitOptions, element).html;\r\n }\r\n }\r\n\r\n private parseSplitOptions(attributeValue: string | null): ISplitOptions {\r\n const options: ISplitOptions = {\r\n line: [],\r\n word: [],\r\n char: [],\r\n charLine: [],\r\n charWord: [],\r\n wordLine: [],\r\n };\r\n\r\n if (attributeValue) {\r\n const parts = attributeValue.split('|');\r\n\r\n parts.forEach((part) => {\r\n const match = part.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\r\n\r\n if (match) {\r\n const prefix = match[1] || '';\r\n const option = match[2];\r\n const params = match[4] ? match[4].split(',') : [];\r\n switch (prefix + option) {\r\n case 'char-line':\r\n (options.charLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char-word':\r\n (options.charWord as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word-line':\r\n (options.wordLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'line':\r\n (options.line as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word':\r\n (options.word as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char':\r\n (options.char as any[]).push(this.parseParam(params));\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private parseParam(params: string[]): { align: string; random?: { min: number; max: number }; abs?: boolean } {\r\n const result: { align: string; random?: { min: number; max: number }; abs?: boolean } = { align: 'start' };\r\n\r\n params.forEach((param) => {\r\n if (param === 'abs') {\r\n result.abs = true;\r\n } else if (param.startsWith('random')) {\r\n const match = param.match(/random\\((\\d+),(\\d+)\\)/);\r\n if (match) {\r\n result.random = { min: parseInt(match[1]), max: parseInt(match[2]) };\r\n result.align = 'random';\r\n } else {\r\n result.align = 'random';\r\n }\r\n } else if (['start', 'center', 'end'].includes(param)) {\r\n result.align = param;\r\n } else {\r\n result.align = 'start';\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public split(options: ISplitOptions, elementRoot: any): any {\r\n //let text = elementRoot.innerHTML;\r\n let text = elementRoot.getAttribute('string-split-original');\r\n if (text.length === 0) return '';\r\n\r\n text = this.decodeHtmlEntity(text);\r\n const element = document.createElement('span');\r\n const words = text.split(/\\s+/);\r\n let globalCharIndex = 0;\r\n let globalWordIndex = 0;\r\n const totalChars = text.replace(/\\s/g, '').length;\r\n\r\n const tempSpan = document.createElement('span');\r\n const compStyles = window.getComputedStyle(elementRoot);\r\n\r\n tempSpan.style.fontFamily = compStyles.fontFamily;\r\n tempSpan.style.fontSize = compStyles.fontSize;\r\n tempSpan.style.letterSpacing = compStyles.letterSpacing;\r\n tempSpan.style.lineHeight = compStyles.lineHeight;\r\n tempSpan.style.fontWeight = compStyles.fontWeight;\r\n tempSpan.classList.add('-s-char');\r\n document.body.appendChild(tempSpan);\r\n\r\n let virtualLines: any[] = [];\r\n let virtualLine: any[] = [];\r\n let currentLineWidth = 0;\r\n words.forEach((word: any, wordIndex: any) => {\r\n tempSpan.textContent = word;\r\n if (word.length > 0) {\r\n tempSpan.textContent += '\\u00a0';\r\n }\r\n\r\n const wordWidth = tempSpan.offsetWidth;\r\n\r\n const virtualWordSpan = {\r\n text: word,\r\n width: wordWidth,\r\n chars: new Array<any>(),\r\n };\r\n const chars = Array.from(word);\r\n chars.forEach((char, charIndex) => {\r\n const virtualCharSpan = {\r\n text: char,\r\n };\r\n\r\n virtualWordSpan.chars.push(virtualCharSpan);\r\n });\r\n if (currentLineWidth + wordWidth > elementRoot.offsetWidth) {\r\n virtualLines.push(virtualLine);\r\n virtualLine = [];\r\n currentLineWidth = 0;\r\n globalCharIndex += virtualLine.length;\r\n }\r\n virtualLine.push(virtualWordSpan);\r\n currentLineWidth += wordWidth;\r\n });\r\n\r\n virtualLines.push(virtualLine);\r\n\r\n let hasLineOptions = false;\r\n if (options.line != null) {\r\n if (options.line.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.wordLine != null) {\r\n if (options.wordLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.charLine != null) {\r\n if (options.charLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n\r\n let addedWordsCount = 0;\r\n if (hasLineOptions) {\r\n // for (let i = 0; i < virtualLines.length; i++) {\r\n // addedWordsCount += virtualLines[i].length;\r\n // }\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n this.appendVirtualLineToDOM(\r\n i,\r\n virtualLines.length,\r\n words.length,\r\n element,\r\n virtualLines[i],\r\n options,\r\n globalCharIndex,\r\n totalChars,\r\n addedWordsCount\r\n );\r\n addedWordsCount += virtualLines[i].length;\r\n }\r\n } else {\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n virtualLines[i].forEach((virtualWordSpan: any, wordIndex: any) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n });\r\n this.applyOptions(wordSpan, options.word, globalWordIndex, 'word', wordIndex, words.length);\r\n if (virtualWordSpan.chars.length > 0) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n element.appendChild(wordSpan);\r\n globalWordIndex++;\r\n }\r\n });\r\n }\r\n }\r\n\r\n document.body.removeChild(tempSpan);\r\n return { html: element.innerHTML };\r\n }\r\n\r\n // TODO: remove line - char,word\r\n private appendVirtualLineToDOM(\r\n lineIndex: number,\r\n length: number,\r\n totalWords: number,\r\n element: HTMLSpanElement,\r\n virtualLine: any[],\r\n options: ISplitOptions,\r\n globalCharIndex: number,\r\n totalChars: number,\r\n addedWordsCount: number\r\n ) {\r\n const lineSpan = document.createElement('span');\r\n lineSpan.classList.add('-s-line');\r\n\r\n this.applyOptions(lineSpan, options.line, lineIndex, 'line', 0, length);\r\n\r\n let lineCharIndex = 0;\r\n let globalWordIndex = 0;\r\n let totalLineChars = 0;\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n totalLineChars += virtualWordSpan.text.length;\r\n });\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charLine, lineCharIndex, 'char-line', charIndex, totalLineChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n lineCharIndex++;\r\n });\r\n\r\n this.applyOptions(\r\n wordSpan,\r\n options.word,\r\n addedWordsCount + globalWordIndex,\r\n 'word',\r\n addedWordsCount + globalWordIndex,\r\n totalWords - 1\r\n );\r\n this.applyOptions(wordSpan, options.wordLine, wordIndex, 'word-line', wordIndex, virtualLine.length);\r\n\r\n if (wordIndex < virtualLine.length - 1) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n // +'\\u00a0';\r\n\r\n lineSpan.appendChild(wordSpan);\r\n // if (wordIndex < virtualLine.length - 1) {\r\n // lineSpan.appendChild(this.createSpaceSpan());\r\n // }\r\n globalWordIndex++;\r\n }\r\n });\r\n\r\n element.appendChild(lineSpan);\r\n }\r\n\r\n private applyOptions(\r\n span: HTMLSpanElement,\r\n optionArray: any[] | undefined,\r\n globalIndex: number,\r\n type: string,\r\n localIndex: number,\r\n parentLength: number\r\n ) {\r\n if (optionArray) {\r\n optionArray.forEach((option, optionIndex) => {\r\n let index = this.calculateIndex(option, globalIndex, localIndex, parentLength);\r\n\r\n const variableName = this.generateVariableName(type, option, optionIndex);\r\n span.style.setProperty(variableName, String(index));\r\n });\r\n }\r\n }\r\n\r\n private createSpaceSpan(): HTMLSpanElement {\r\n const spaceSpan = document.createElement('span');\r\n spaceSpan.innerHTML = '\\u00a0';\r\n return spaceSpan;\r\n }\r\n\r\n private decodeHtmlEntity(str: string) {\r\n return str.replace(/&amp;/g, '&');\r\n }\r\n\r\n private calculateIndex(\r\n options: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n globalIndex: number,\r\n localIndex: number,\r\n parentLength: number\r\n ): number {\r\n let index = globalIndex;\r\n if (options.align === 'random') {\r\n if (options.random === undefined) {\r\n options.random = { min: 0, max: parentLength };\r\n }\r\n const min = options.random.min || 0;\r\n const max = options.random.max || parentLength;\r\n index = Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n if (options.align === 'end') {\r\n index = parentLength - index - 1;\r\n } else if (options.align === 'center') {\r\n index = index - Math.floor(parentLength / 2);\r\n }\r\n\r\n if (options.abs) {\r\n index = Math.abs(index);\r\n }\r\n return index;\r\n }\r\n\r\n private generateVariableName(\r\n type: string,\r\n option: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n index: number\r\n ): string {\r\n let variableName = `--${type}`;\r\n if (option.align) {\r\n variableName += `-${option.align}`;\r\n }\r\n return variableName;\r\n }\r\n}\r\n","export class StringFPS{\r\n private isAnimationStarted: boolean = false\r\n private fpsInterval: any\r\n private now: any\r\n private then: any\r\n private elapsed: any;\r\n private requestAnimationId: number = 0\r\n public onFrame = ()=>{}\r\n public start(fps: number) {\r\n if (this.isAnimationStarted) { return }\r\n this.fpsInterval = 1000 / fps;\r\n this.then = Date.now();\r\n this.animate();\r\n this.isAnimationStarted = true\r\n }\r\n public stop() {\r\n if (!this.isAnimationStarted) { return }\r\n cancelAnimationFrame(this.requestAnimationId)\r\n this.isAnimationStarted = false\r\n }\r\n private animate() {\r\n this.requestAnimationId = requestAnimationFrame(() => { this.animate() })\r\n this.now = Date.now();\r\n this.elapsed = this.now - this.then;\r\n if (this.elapsed > this.fpsInterval) {\r\n this.then = this.now - (this.elapsed % this.fpsInterval);\r\n this.onFrame()\r\n }\r\n }\r\n}","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringFPSTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.right = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-fps', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-fps]::after {\r\n content: 'FPS: ' attr(fps);\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n this.intervalId = setInterval(() => {\r\n this.displayElement.setAttribute('fps', `${this.callCount}`);\r\n this.callCount = 0;\r\n }, 1000);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n clearInterval(this.intervalId);\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringPositionTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.left = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-position', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-position]::after {\r\n content: attr(direction) 'Top: ' attr(value) 'px';\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n let dirSymbol = ``;\r\n if (data.c < data.t) {\r\n dirSymbol = `↓`;\r\n }\r\n if (data.c > data.t) {\r\n dirSymbol = `↑`;\r\n }\r\n this.displayElement.setAttribute('direction', dirSymbol);\r\n this.displayElement.setAttribute('value', `${this.data.c}`);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","export class StringAttribute{\r\n process(e: any, n: string, d: any = null) {\r\n return e.getAttribute(n) == null ? d : e.getAttribute(n)\r\n }\r\n}","export class StringBoundingClientRect {\r\n process(e: any) {\r\n return e.getBoundingClientRect();\r\n }\r\n}\r\n","export class StringData {\r\n t: number = 0;\r\n c: number = 0;\r\n d: number = 0;\r\n v: number = 0;\r\n bS: number = 0;\r\n cF: number = 1;\r\n wS: number = 0;\r\n hnwS: number = 0;\r\n\r\n psW: number = 0;\r\n psH: number = 0;\r\n\r\n scsW: number = 1;\r\n scsH: number = 1;\r\n sD: 'vertical' | 'horizontal' = 'vertical';\r\n sC: any;\r\n sM: 'smooth' | 'disable' | 'default' = 'smooth';\r\n}\r\n","export class StringEvent{\r\n\r\n private eventsByKey: Map<string, Array<Function>> = new Map<string, Array<Function>>()\r\n private events: Array<Function> = new Array<Function>()\r\n on(id: string, event: Function){\r\n if ( this.eventsByKey.has(id) == false) { \r\n this.eventsByKey.set(id, [])\r\n }\r\n this.eventsByKey.get(id)?.push(event)\r\n this.updateAllEvents()\r\n }\r\n public has(id: string) {\r\n return this.eventsByKey.has(id)\r\n }\r\n public emit(id: string, value: any) {\r\n if (this.eventsByKey.has(id)) {\r\n this.eventsByKey.get(id)?.forEach((event: any) => {\r\n event(value)\r\n });\r\n }\r\n }\r\n public off(id: string, event: Function) {\r\n let ea = this.eventsByKey.get(id)\r\n if (ea!=null) {\r\n this.eventsByKey.set(id, ea.filter((h: any) => h !== event))\r\n }\r\n this.updateAllEvents()\r\n }\r\n public all(value: any) {\r\n this.events.forEach(event => {\r\n event(value)\r\n });\r\n }\r\n private updateAllEvents() {\r\n Array.from(this.eventsByKey.values()).forEach(listOfEvents => {\r\n listOfEvents.forEach(event => {\r\n this.events.push(event)\r\n });\r\n });\r\n }\r\n}","export class StringParser{\r\n public parseSingle(v: string, element: any, wH: any, baseRem: number): number {\r\n let isNegative = v.startsWith('-');\r\n if (isNegative) {\r\n v = v.slice(1);\r\n }\r\n let pV;\r\n if (v === 'selfHeight') {\r\n pV = element.offsetHeight;\r\n } else if (v.endsWith('px')) {\r\n pV = parseFloat(v);\r\n } else if (v.endsWith('%')) {\r\n pV = parseFloat(v) * wH / 100;\r\n } else if (v.endsWith('rem')) {\r\n pV = parseFloat(v) * baseRem;\r\n }\r\n return isNegative ? -pV : pV;\r\n }\r\n}","function nullifyTransforms(el: any) {\r\n let { top, left, width, height } = el.getBoundingClientRect();\r\n let transformArr = parseTransform(el);\r\n if (transformArr.length == 6) {\r\n var t = transformArr;\r\n let det = t[0] * t[3] - t[1] * t[2];\r\n return {\r\n width: width / t[0] == 0 ? 1 : t[0],\r\n height: height / t[3] == 0 ? 1 : t[3],\r\n left: (left * t[3] - top * t[2] + t[2] * t[5] - t[4] * t[3]) / det,\r\n top: (-left * t[1] + top * t[0] + t[4] * t[1] - t[0] * t[5]) / det,\r\n };\r\n } else {\r\n return { top, left, width, height };\r\n }\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n}\r\n\r\nexport class StringPosition {\r\n process(e: any, container: any = document.body) {\r\n let br;\r\n try {\r\n br = container.getBoundingClientRect();\r\n } catch (error) {\r\n br = document.body.getBoundingClientRect();\r\n }\r\n let er = nullifyTransforms(e);\r\n let o = er.top - br.top;\r\n let oL = er.left - br.left;\r\n return { top: o, left: oL };\r\n }\r\n}\r\n","import { IStringModule } from './IStringModule';\r\nimport { StringLazy } from './Loading/Modules/StringLazy';\r\nimport { StringLoading } from './Loading/Modules/StringLoading';\r\nimport { StringVideoAutoplay } from './Loading/Modules/StringVideoAutoplay';\r\nimport { StringCursor } from './Mouse/Modules/StringCursor';\r\nimport { StringMagnetic } from './Mouse/Modules/StringMagnetic';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringResponsive } from './Screen/StringResponsive';\r\nimport { StringScrollbar } from './Scroll/Modules/Scrollbar/StringScrollbar';\r\nimport { StringDisplacement } from './Scroll/Modules/StringDisplacement';\r\nimport { StringParallax } from './Scroll/Modules/StringParallax';\r\nimport { StringProgress } from './Scroll/Modules/StringProgress';\r\nimport { StringScroll } from './Scroll/Types/StringScroll';\r\nimport { StringScrollDefault } from './Scroll/Types/StringScrollDefault';\r\nimport { StringScrollDisable } from './Scroll/Types/StringScrollDisable';\r\nimport { StringScrollSmooth } from './Scroll/Types/StringScrollSmooth';\r\nimport { StringTypeSettings } from './Scroll/Types/StringTypeSettings';\r\nimport { StringSplit } from './Split/Modules/StringSplit';\r\nimport { StringFPS } from './StringFPS';\r\nimport { StringModule } from './StringModule';\r\nimport { StringFPSTracker } from './Tracker/StringFPSTracker';\r\nimport { StringPositionTracker } from './Tracker/StringPositionTracker';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerp } from './Utils/StringLerp';\r\nimport { StringParser } from './Utils/StringParser';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nfunction isTouchDevice() {\r\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n}\r\n\r\nclass StringTune {\r\n private static i: StringTune;\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n private modulesUI: Array<IStringModule> = new Array<IStringModule>();\r\n private events: StringEvent = new StringEvent();\r\n private loop: StringFPS = new StringFPS();\r\n\r\n private onWheelBind: any;\r\n private onScrollBind: any;\r\n private onResizeBind: any;\r\n private onMouseMoveBind: any;\r\n\r\n private wW: number = 0;\r\n private wH: number = 0;\r\n\r\n private root: any;\r\n private window: any;\r\n\r\n private _virtualCursor: StringVirtualCursor = new StringVirtualCursor();\r\n private _lerp: StringLerp = new StringLerp();\r\n private _attribute: StringAttribute = new StringAttribute();\r\n private _boundingClientRect: StringBoundingClientRect = new StringBoundingClientRect();\r\n private _position: StringPosition = new StringPosition();\r\n\r\n private sEn: StringScroll;\r\n private sEnSmooth: StringScrollSmooth;\r\n private sEnDefault: StringScrollDefault;\r\n private sEnDisable: StringScrollDisable;\r\n\r\n private settings: StringTypeSettings;\r\n private data: StringData;\r\n\r\n protected objects: Map<string, StringObject> = new Map<string, StringObject>();\r\n\r\n protected connectQueue: Array<any> = new Array<any>();\r\n\r\n private globalId: number = 1;\r\n\r\n private _parser = new StringParser();\r\n\r\n get scrollDirection() {\r\n return this.data.sD;\r\n }\r\n\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this.data.sD = scrollDirection;\r\n\r\n this.sEn.scrollDirection = scrollDirection;\r\n this.sEnSmooth.scrollDirection = scrollDirection;\r\n this.sEnDefault.scrollDirection = scrollDirection;\r\n this.sEnDisable.scrollDirection = scrollDirection;\r\n\r\n if (scrollDirection == 'horizontal') {\r\n document.documentElement.classList.add('-horizontal');\r\n document.documentElement.classList.remove('-vertical');\r\n } else {\r\n document.documentElement.classList.add('-vertical');\r\n document.documentElement.classList.remove('-horizontal');\r\n }\r\n\r\n this.rebuild();\r\n this.initObjects();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onChangeScrollDirection();\r\n });\r\n }\r\n get speedAccelerate() {\r\n return this.settings.speedAccelerate;\r\n }\r\n set speedAccelerate(speed: number) {\r\n this.settings.speedAccelerate = speed;\r\n }\r\n get speedDecelerate() {\r\n return this.settings.speedDecelerate;\r\n }\r\n set speedDecelerate(speed: number) {\r\n this.settings.speedDecelerate = speed;\r\n }\r\n\r\n get scrollPosition() {\r\n return this.data.c;\r\n }\r\n set scrollPosition(scrollPosition: number) {\r\n this.data.c = scrollPosition;\r\n this.data.t = scrollPosition;\r\n window.scrollTo(0, this.data.c);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\r\n });\r\n }\r\n set scrollContainer(container: any) {\r\n let isUpdateEvents = this.data.sC != null;\r\n if (isUpdateEvents) {\r\n this.data.sC.removeEventListener('scroll', this.onScrollBind);\r\n this.data.sC.removeEventListener('resize', this.onResizeBind);\r\n }\r\n this.sEn.scrollContainer = container;\r\n this.sEnSmooth.scrollContainer = container;\r\n this.sEnDefault.scrollContainer = container;\r\n this.sEnDisable.scrollContainer = container;\r\n this.data.sC = container;\r\n if (isUpdateEvents) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n }\r\n this.rebuild();\r\n this.initObjects();\r\n }\r\n\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n private mMode: 'disable' | 'default' = 'default';\r\n set scrollMobileMode(mobileMode: 'disable' | 'default') {\r\n this.mMode = mobileMode;\r\n this.updateModeParams();\r\n }\r\n private dMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n set scrollDesktopMode(desktopMode: 'smooth' | 'disable' | 'default') {\r\n this.dMode = desktopMode;\r\n this.updateModeParams();\r\n }\r\n private updateModeParams() {\r\n if (this.window.innerWidth < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n switch (this.scrollMode) {\r\n case 'disable':\r\n this.data.sM = 'disable';\r\n this.sEn = this.sEnDisable;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'hidden';\r\n break;\r\n case 'default':\r\n this.data.sM = 'default';\r\n this.sEn = this.sEnDefault;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n case 'smooth':\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n default:\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n }\r\n }\r\n\r\n private constructor() {\r\n this.root = document.body;\r\n this.window = window;\r\n\r\n this.settings = new StringTypeSettings();\r\n this.data = new StringData();\r\n this.settings.speedAccelerate = 0.13;\r\n this.settings.speedDecelerate = 0.04;\r\n\r\n this.sEnSmooth = new StringScrollSmooth(document, this.settings, this.data);\r\n this.sEnDefault = new StringScrollDefault(document, this.settings, this.data);\r\n this.sEnDisable = new StringScrollDisable(document, this.settings, this.data);\r\n this.sEn = this.sEnSmooth;\r\n this.scrollContainer = window;\r\n this.data.sC = this.window;\r\n\r\n this.data.sD = 'vertical';\r\n document.documentElement.classList.add('-vertical');\r\n\r\n this.onWheelBind = this.onWheelEvent.bind(this);\r\n this.onScrollBind = this.onScrollEvent.bind(this);\r\n this.onResizeBind = this.onResizeEvent.bind(this);\r\n this.onMouseMoveBind = this.onMouseMoveEvent.bind(this);\r\n this.loop.onFrame = () => {\r\n this.onUpdateEvent();\r\n };\r\n this.rebuild();\r\n }\r\n\r\n public static getInstance(): StringTune {\r\n if (!StringTune.i) {\r\n StringTune.i = new StringTune();\r\n }\r\n return StringTune.i;\r\n }\r\n\r\n public use(objectClass: typeof StringModule, settings: any = null) {\r\n const module = new objectClass(\r\n {\r\n data: this.data,\r\n lerp: this._lerp,\r\n attribute: this._attribute,\r\n boundingClientRect: this._boundingClientRect,\r\n position: this._position,\r\n virtualCursor: this._virtualCursor,\r\n events: this.events,\r\n },\r\n settings\r\n );\r\n\r\n if (module.type == 1) {\r\n this.modules.push(module);\r\n }\r\n if (module.type == 2) {\r\n this.modulesUI.push(module);\r\n }\r\n }\r\n public start(fps: number) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n\r\n this.root.addEventListener('wheel', this.onWheelBind, { passive: false });\r\n this.root.addEventListener('mousemove', this.onMouseMoveBind);\r\n\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n Array.from(this.objects.values()).forEach((object) => {\r\n this.setupObject(object.el, object);\r\n });\r\n });\r\n resizeObserver.observe(document.body);\r\n\r\n this.loop.start(fps);\r\n document.documentElement.classList.add('-string');\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onStart();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onStart();\r\n });\r\n\r\n this.initObjects();\r\n this.initMutationObserver();\r\n }\r\n\r\n private onChangeScrollParams() {\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onChangeScrollParams();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onChangeScrollParams();\r\n });\r\n }\r\n\r\n private initObjects() {\r\n document.querySelectorAll('[string]').forEach((element) => {\r\n this.addObject(element as any);\r\n });\r\n document.querySelectorAll('[string-copy-from]').forEach((element) => {\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null && this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n }\r\n });\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n module.onScroll(this.data);\r\n module.onUpdate(this.data);\r\n });\r\n }\r\n\r\n public destroy() {\r\n this.window.removeEventListener('scroll', this.onScrollBind);\r\n this.root.removeEventListener('wheel', this.onScrollBind);\r\n this.window.removeEventListener('resize', this.onResizeBind);\r\n this.root.removeEventListener('mousemove', this.onMouseMoveBind);\r\n this.loop.stop();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n }\r\n\r\n public on(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id: string = '') {\r\n switch (key) {\r\n case 'scroll':\r\n this.events.on(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.on(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.on(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.on(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.on(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.on(`cursor`, event);\r\n break;\r\n }\r\n }\r\n public off(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id: string = '') {\r\n switch (key) {\r\n case 'scroll':\r\n this.events.off(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.off(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.off(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.off(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.off(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.off(`cursor`, event);\r\n break;\r\n }\r\n }\r\n\r\n private defaultSettings: any = {\r\n stringOffsetStart: '0%',\r\n stringOffsetEnd: '0%',\r\n\r\n stringEnterEl: 'top',\r\n stringExitEl: 'bottom',\r\n stringEnterVp: 'bottom',\r\n stringExitVp: 'top',\r\n\r\n stringInviewTop: '0%',\r\n stringInviewBottom: '0%',\r\n\r\n stringKey: '--progress',\r\n\r\n stringStrength: 0.3,\r\n stringRadius: 150,\r\n stringLerp: 0.2,\r\n stringParallaxBias: 0.0,\r\n stringParallax: 0.2,\r\n };\r\n\r\n public setupSettings(settings: any) {\r\n if (settings['string-offset-top'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-top'];\r\n }\r\n if (settings['string-offset-bottom'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-bottom'];\r\n }\r\n if (settings['string-offset-left'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-left'];\r\n }\r\n if (settings['string-offset-right'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-right'];\r\n }\r\n\r\n if (settings[`string-inview-top`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-top`];\r\n }\r\n if (settings[`string-inview-left`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-left`];\r\n }\r\n if (settings[`string-inview-bottom`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-bottom'];\r\n }\r\n if (settings[`string-inview-right`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-right'];\r\n }\r\n\r\n if (settings['string-enter-el'] != null) {\r\n this.defaultSettings.stringEnterEl = settings['string-enter-el'];\r\n }\r\n if (settings['string-enter-vp'] != null) {\r\n this.defaultSettings.stringEnterVp = settings['string-enter-vp'];\r\n }\r\n if (settings['string-exit-el'] != null) {\r\n this.defaultSettings.stringExitEl = settings['string-exit-el'];\r\n }\r\n if (settings['string-exit-vp'] != null) {\r\n this.defaultSettings.stringExitVp = settings['string-exit-vp'];\r\n }\r\n if (settings['string-key'] != null) {\r\n this.defaultSettings.stringKey = settings['string-key'];\r\n }\r\n\r\n if (settings['string-strength'] != null) {\r\n this.defaultSettings.stringStrength = settings['string-strength'];\r\n }\r\n if (settings['string-radius'] != null) {\r\n this.defaultSettings.stringRadius = settings['string-radius'];\r\n }\r\n if (settings['string-lerp'] != null) {\r\n this.defaultSettings.stringLerp = settings['string-lerp'];\r\n }\r\n\r\n if (settings['string-parallax-bias'] != null) {\r\n this.defaultSettings.stringParallaxBias = settings['string-parallax-bias'];\r\n }\r\n if (settings['string-parallax'] != null) {\r\n this.defaultSettings.stringParallax = settings['string-parallax'];\r\n }\r\n }\r\n\r\n protected setupObject(el: HTMLElement, object: StringObject) {\r\n object.showObserver?.disconnect();\r\n object.progressObserver?.disconnect();\r\n object.inviewObserver?.disconnect();\r\n\r\n let r = this._boundingClientRect.process(el);\r\n let rW = r.width / this.data.scsW;\r\n let rH = r.height / this.data.scsH;\r\n\r\n let startElementPosition = this._attribute.process(el, `string-enter-el`) || this.defaultSettings.stringEnterEl;\r\n let endElementPosition = this._attribute.process(el, `string-exit-el`) || this.defaultSettings.stringExitEl;\r\n \r\n let startSourcePosition = this._attribute.process(el, `string-enter-vp`) || this.defaultSettings.stringEnterVp;\r\n let endSourcePosition = this._attribute.process(el, `string-exit-vp`) || this.defaultSettings.stringExitVp;\r\n\r\n object.inviewTop = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview-top`,\r\n this._attribute.process(el, `string-inview-left`, this.defaultSettings.stringInviewTop)\r\n ),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n object.inviewBottom = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview`,this._attribute.process(\r\n el,\r\n `string-inview-bottom`,\r\n this._attribute.process(el, `string-inview-right`, this.defaultSettings.stringInviewBottom)\r\n )),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n //console.log(r);\r\n\r\n object.selfDisable = this._attribute.process(el, `string-self-disable`) == null ? false : true;\r\n object.abs = this._attribute.process(el, `string-abs`) == null ? false : true;\r\n\r\n let targetQuery = this._attribute.process(el, `string-cursor-target`);\r\n\r\n if (targetQuery != null) {\r\n object.cursorTarget = document.querySelector(`[string-cursor-content=\"${targetQuery}\"]`);\r\n }\r\n\r\n object.id = this._attribute.process(el, `string-id`, `string-${this.globalId}`);\r\n object.key = this._attribute.process(el, `string-key`, this.defaultSettings.stringKey);\r\n\r\n object.strength = this._attribute.process(el, 'string-strength', this.defaultSettings.stringStrength);\r\n object.radius = this._attribute.process(el, 'string-radius', this.defaultSettings.stringRadius);\r\n object.lerp = this._attribute.process(el, 'string-lerp', this.defaultSettings.stringLerp);\r\n\r\n let parallaxPosition = this._attribute.process(el, 'string-parallax-bias', this.defaultSettings.stringParallaxBias);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n\r\n el.setAttribute(`string-id`, object.id);\r\n if (this.data.sD == 'vertical') {\r\n object.size = rH;\r\n } else {\r\n object.size = rW;\r\n }\r\n\r\n object.oStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n object.oEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let observerStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n let observerEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let stringModuleKeys = this._attribute.process(object.el, 'string', '').split('|');\r\n if (stringModuleKeys.includes('parallax')) {\r\n observerStart = 0;\r\n observerEnd = 0;\r\n object.oStart = 0;\r\n object.oEnd = 0;\r\n }\r\n object.factor = Math.min(1, this._attribute.process(el, `string-parallax`, this.defaultSettings.stringParallax));\r\n\r\n object.oStart += object.factor * this.data.wS * 0.5;\r\n object.oEnd += object.factor * this.data.wS * 0.5;\r\n\r\n object.repeat = this._attribute.process(el, `string-repeat`) == null ? false : true;\r\n object.sElPos = startElementPosition;\r\n object.sScrPos = startSourcePosition;\r\n object.eElPos = endElementPosition;\r\n object.eScrPos = endSourcePosition;\r\n\r\n object.halfWidth = rW / 2;\r\n object.halfHeight = rH / 2;\r\n\r\n let windowSize = this.data.wS;\r\n if (this.data.sD == 'vertical') {\r\n let startPos = this._position.process(el, this.data.sC).top / this.data.scsH;\r\n object.start = startPos;\r\n object.end = startPos + rH;\r\n } else {\r\n let startPos = this._position.process(el, this.data.sC).left / this.data.scsW;\r\n object.start = startPos;\r\n object.end = startPos + rW;\r\n }\r\n object.calculatePositions(windowSize);\r\n\r\n let connectItems = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id == object.id;\r\n });\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id != object.id;\r\n });\r\n\r\n connectItems.forEach((connectItem) => {\r\n object.connects.push(connectItem.element);\r\n });\r\n\r\n let callbackProgress = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n if (object.active == false) {\r\n this.events.emit(`activate_object_${object.id}`, true);\r\n object.enter();\r\n }\r\n } else {\r\n if (object.active == true) {\r\n this.events.emit(`activate_object_${object.id}`, false);\r\n object.leave();\r\n }\r\n }\r\n });\r\n };\r\n let callbackInview = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`inview_${object.id}`, true);\r\n object.show();\r\n } else {\r\n this.events.emit(`inview_${object.id}`, false);\r\n object.hide();\r\n }\r\n });\r\n };\r\n let callbackIntersection = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`intersection_${object.id}`, true);\r\n } else {\r\n this.events.emit(`intersection_${object.id}`, false);\r\n }\r\n });\r\n };\r\n\r\n let optionsProgress: any;\r\n let optionsInview: any;\r\n if (this.data.sD == 'vertical') {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `${observerStart + this.data.wS}px 0px ${observerEnd + this.data.wS}px 0px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `${observerStart + object.inviewTop}px 0px ${observerEnd + object.inviewBottom}px 0px`,\r\n threshold: 0.001,\r\n };\r\n } else {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `0px ${observerStart + this.data.wS}px 0px ${observerEnd + this.data.wS}px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `0px ${observerStart + object.inviewTop}px 0px ${observerEnd + object.inviewBottom}px`,\r\n threshold: 0.001,\r\n };\r\n }\r\n\r\n let optionsIntersection = {\r\n root: null,\r\n rootMargin: `0px 0px 0px 0px`,\r\n threshold: 0.001,\r\n };\r\n\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obIntersection = new IntersectionObserver(callbackIntersection, optionsIntersection);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n obProgress.observe(el);\r\n obIntersection.observe(el);\r\n obInview.observe(el);\r\n\r\n object.showObserver = obIntersection;\r\n object.progressObserver = obProgress;\r\n object.inviewObserver = obInview;\r\n }\r\n\r\n addObject(el: HTMLElement) {\r\n let isInit = this._attribute.process(el, 'string-inited');\r\n let object: any;\r\n if (isInit == null) {\r\n object = new StringObject(el);\r\n } else {\r\n if (this.objects.has(this._attribute.process(el, 'string-id'))) {\r\n object = this.objects.get(this._attribute.process(el, 'string-id'));\r\n } else {\r\n object = new StringObject(el);\r\n }\r\n }\r\n el.setAttribute(`string-inited`, '');\r\n this.setupObject(el, object);\r\n this.modules.forEach((module: IStringModule) => {\r\n if (module.tryConnect(object)) {\r\n module.connect(object);\r\n }\r\n });\r\n this.objects.set(object.id, object);\r\n this.globalId++;\r\n }\r\n\r\n public removeObject(id: string) {\r\n let removedObject = this.objects.get(id);\r\n if (removedObject?.showObserver != null) {\r\n removedObject?.showObserver.disconnect();\r\n }\r\n if (removedObject?.progressObserver != null) {\r\n removedObject?.progressObserver.disconnect();\r\n }\r\n if (removedObject?.inviewObserver != null) {\r\n removedObject?.inviewObserver.disconnect();\r\n }\r\n this.objects.delete(id);\r\n removedObject?.el.removeAttribute(`string-inited`);\r\n removedObject?.leave();\r\n removedObject = undefined;\r\n }\r\n\r\n private onMouseMoveEvent(e: MouseEvent) {\r\n this._virtualCursor.onMouseMove(e);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onMouseMove(e);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onMouseMove(e);\r\n });\r\n }\r\n private onWheelEvent(e: WheelEvent) {\r\n this.sEn.onWheel(e);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onWheel(e);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onWheel(e);\r\n });\r\n }\r\n private onScrollEvent(e: Event) {\r\n this.sEn.onScroll(e);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\r\n });\r\n this.events.emit(`lerp`, this.data.v);\r\n this.events.emit(`scroll`, this.data.c);\r\n }\r\n private onUpdateEvent() {\r\n this._virtualCursor.onUpdate();\r\n this.sEn.onUpdate();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onUpdate(this.data);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onUpdate(this.data);\r\n });\r\n }\r\n private onResizeEvent() {\r\n try {\r\n let rect = this.sEn.scrollContainer.getBoundingClientRect();\r\n this.wW = rect.width;\r\n this.wH = rect.height;\r\n } catch (error) {\r\n this.wW = this.sEn.scrollContainer.innerWidth;\r\n this.wH = this.sEn.scrollContainer.innerHeight;\r\n }\r\n if (\r\n (this.data.sD == 'vertical' && this.wW != this.data.wS) ||\r\n this.window.innerWidth > 1024 ||\r\n (this.data.sD == 'horizontal' && this.wW != this.data.wS) ||\r\n this.window.innerWidth > 1024\r\n ) {\r\n this.rebuild();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n }\r\n }\r\n private initMutationObserver() {\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.type === 'childList') {\r\n if (mutation.addedNodes.length > 0) {\r\n mutation.addedNodes.forEach((addedNode) => {\r\n if (addedNode.nodeType === Node.ELEMENT_NODE) {\r\n (addedNode as Element).querySelectorAll('[string]:not([string-inited])').forEach((element) => {\r\n this.addObject(element as any);\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n if (this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n } else {\r\n this.connectQueue.push({\r\n id: connectTargetId,\r\n element,\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (mutation.removedNodes.length > 0) {\r\n mutation.removedNodes.forEach((removedNode) => {\r\n if (removedNode.nodeType === Node.ELEMENT_NODE) {\r\n (removedNode as Element).querySelectorAll('[string]').forEach((element) => {\r\n let removeId = element.getAttribute('string-id');\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id != connectTargetId;\r\n });\r\n }\r\n if (removeId != null) {\r\n this.removeObject(removeId);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0) {\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onRebuild();\r\n });\r\n }\r\n }\r\n });\r\n });\r\n const config = {\r\n attributes: false,\r\n childList: true,\r\n subtree: true,\r\n };\r\n observer.observe(document.body, config);\r\n }\r\n private rebuild() {\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n\r\n try {\r\n let transformContainer: any = parseTransform(this.data.sC);\r\n this.data.scsW = transformContainer[0];\r\n this.data.scsH = transformContainer[3];\r\n } catch (error) {\r\n this.data.scsW = 1;\r\n this.data.scsH = 1;\r\n }\r\n\r\n try {\r\n let rect = this.data.sC.getBoundingClientRect();\r\n this.wW = rect.width / this.data.scsW;\r\n this.wH = rect.height / this.data.scsH;\r\n } catch (error) {\r\n this.wW = this.data.sC.innerWidth;\r\n this.wH = this.data.sC.innerHeight;\r\n }\r\n\r\n if (this.wW < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n\r\n let b = document.body,\r\n h = document.documentElement;\r\n\r\n this.data.psW = this.data.sC.scrollWidth;\r\n this.data.psH = this.data.sC.scrollHeight;\r\n if (this.data.psW == undefined) {\r\n this.data.psW = Math.max(b.scrollWidth, b.offsetWidth, h.clientWidth, h.scrollWidth, h.offsetWidth);\r\n }\r\n if (this.data.psH == undefined) {\r\n this.data.psH = Math.max(b.scrollHeight, b.offsetHeight, h.clientHeight, h.scrollHeight, h.offsetHeight);\r\n }\r\n\r\n if (this.data.sD == 'vertical') {\r\n this.data.bS = this.data.psH - this.wH;\r\n this.data.wS = this.wH;\r\n } else {\r\n this.data.bS = this.data.psW - this.wW;\r\n this.data.wS = this.wW;\r\n }\r\n\r\n this.data.hnwS = this.data.wS * -0.5;\r\n this.updateModeParams();\r\n }\r\n}\r\n\r\n\r\n \r\nexport {\r\n StringTune as default,\r\n StringCursor, StringDisplacement, StringFPSTracker, StringLazy, StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, StringResponsive, StringScrollbar, StringSplit, StringTune as StringTune, StringVideoAutoplay\r\n};\r\n\r\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","StringModule","type","_type","constructor","visitor","settings","objectsMap","Map","objects","Array","htmlKey","data","lerp","attribute","boundingClientRect","position","virtualCursor","events","destructor","onChangeScrollParams","tryConnect","object","stringModuleKeys","process","el","split","forEach","connect","onConnect","addObject","id","set","from","map","name","removeObject","delete","onStart","onUpdate","onResize","onRebuild","onScroll","onMouseMove","e","onWheel","onChangeDevice","onChangeScrollDirection","onMutationObserver","added","removed","StringLazy","super","document","querySelectorAll","element","getImageSize","getAttribute","classList","add","src","addEventListener","url","Promise","resolve","reject","xhr","XMLHttpRequest","open","responseType","onload","status","buffer","response","blob","Blob","img","Image","style","aspectRatio","width","height","URL","revokeObjectURL","onerror","Error","createObjectURL","setRequestHeader","send","StringLoading","loadingTimeout","timeout","setTimeout","documentElement","StringVideoAutoplay","videoElement","videoSrc","started","tagName","toLowerCase","setAttribute","muted","tryPlay","once","load","console","warn","play","catch","err","then","StringCursor","lerpFactor","oldX","oldY","enterObjectsMap","enterObjects","cursor","querySelector","smoothX","smoothY","cursorData","lerpX","lerpY","x","y","emit","setProperty","isMouseMove","rect","getBoundingClientRect","offsetX","calculateOffset","left","offsetY","top","mouseX","mouseY","setMouseCoordinates","halfWidth","halfHeight","onMouseEnterEventBind","onMouseMoveEventBind","onMouseLeaveEventBind","cursorTarget","event","removeEventListener","remove","onEnter","onLeave","selfDisable","toFixed","connects","mousePos","size","StringMagnetic","strength","radius","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","Math","sqrt","magneticTargetX","magneticTargetY","isMagneting","magneticX","magneticY","toString","StringLerp","start","end","amt","StringVirtualCursor","_lF","_x","_y","_lerpX","_lerpY","targetX","targetY","floor","tS","bS","lS","rS","StringObject","oStart","oEnd","startPos","endPos","differencePos","factor","inviewTop","inviewBottom","sElPos","sScrPos","eElPos","eScrPos","parallaxPositionStart","parallaxPositionEnd","showObserver","progressObserver","inviewObserver","repeat","active","abs","modules","enter","leave","show","hide","push","calculatePositions","windowSize","DeviceType","StringResponsiveQueryDevice","config","min","undefined","max","enable","setEnable","setRange","mediaQuery","query","StringResponsive","queries","Mobile","Tablet","Laptop","Desktop","matchMedias","window","matchMedia","mobile","tablet","laptop","desktop","updateElements","isMobileMedia","matches","isTabletMedia","isLaptopMedia","isDesktopMedia","showElement","hasAttribute","StringScrollbarHorizontal","scrollbar","thumb","isDragging","startY","startScrollPosition","contentSize","psH","visibleSize","wS","thumbSize","updateThumb","contentHeight","visibleHeight","c","mouseDownEvent","mouseMoveEvent","deltaY","newScrollPosition","t","scrollTo","StringScrollbarVertical","startCoordinate","psW","contentWidth","visibleWidth","deltaX","StringScrollbar","scrollMode","mouseUpEventBind","mouseUpEvent","bind","mouseDownEventBind","mouseMoveEventBind","createScrollbar","addCustomStyles","showScrollbar","hideScrollbar","scrollbarState","sM","sD","scrollbarStateVertical","scrollbarStateHorizontal","createElement","textContent","head","appendChild","body","userSelect","scrollTimeout","clearTimeout","StringDisplacement","oldLerp","v","StringParallax","setupParallax","progress","transformCompute","transform","onScrollDesktopEvent","onScrollMobileEvent","onScrollEvent","parallaxPosition","innerWidth","StringProgress","setUpObject","currentTop","StringScroll","isProg","isParallaxEnabled","vT","onCalcUpdate","scrollContainer","_scrollDirection","d","scrollDirection","StringScrollDefault","animateC","scrollTop","StringScrollDisable","preventDefault","StringScrollSmooth","isScroll","speed","newC","ceil","StringTypeSettings","sC","sA","speedAccelerate","speedDecelerate","updateScrollParams","StringSplit","splitOptions","parseSplitOptions","innerHTML","html","contains","attributeValue","options","line","word","char","charLine","charWord","wordLine","part","match","prefix","option","params","parseParam","result","align","param","startsWith","random","parseInt","includes","elementRoot","text","length","decodeHtmlEntity","words","globalCharIndex","globalWordIndex","totalChars","replace","tempSpan","compStyles","getComputedStyle","fontFamily","fontSize","letterSpacing","lineHeight","fontWeight","virtualLines","virtualLine","currentLineWidth","wordIndex","wordWidth","offsetWidth","virtualWordSpan","chars","charIndex","virtualCharSpan","hasLineOptions","addedWordsCount","i","appendVirtualLineToDOM","wordSpan","charSpan","applyOptions","removeChild","lineIndex","totalWords","lineSpan","lineCharIndex","totalLineChars","span","optionArray","globalIndex","localIndex","parentLength","optionIndex","index","calculateIndex","variableName","generateVariableName","String","createSpaceSpan","spaceSpan","str","StringFPS","isAnimationStarted","requestAnimationId","onFrame","fps","fpsInterval","Date","now","animate","stop","cancelAnimationFrame","requestAnimationFrame","elapsed","StringFPSTracker","callCount","createDisplayElement","displayElement","bottom","right","backgroundColor","border","zIndex","intervalId","setInterval","clearInterval","StringPositionTracker","dirSymbol","StringAttribute","n","StringBoundingClientRect","StringData","cF","hnwS","scsW","scsH","StringEvent","eventsByKey","on","has","updateAllEvents","off","ea","filter","h","all","values","listOfEvents","StringParser","parseSingle","wH","baseRem","pV","isNegative","slice","offsetHeight","endsWith","parseFloat","StringPosition","container","br","error","er","transformArr","parseTransform","det","nullifyTransforms","isTouchDevice","navigator","maxTouchPoints","StringTune","sEn","sEnSmooth","sEnDefault","sEnDisable","rebuild","initObjects","scrollPosition","isUpdateEvents","onScrollBind","onResizeBind","scrollMobileMode","mobileMode","mMode","updateModeParams","scrollDesktopMode","desktopMode","dMode","overflow","modulesUI","loop","wW","_virtualCursor","_lerp","_attribute","_boundingClientRect","_position","connectQueue","globalId","_parser","defaultSettings","stringOffsetStart","stringOffsetEnd","stringEnterEl","stringExitEl","stringEnterVp","stringExitVp","stringInviewTop","stringInviewBottom","stringKey","stringStrength","stringRadius","stringLerp","stringParallaxBias","stringParallax","onWheelBind","onWheelEvent","onResizeEvent","onMouseMoveBind","onMouseMoveEvent","onUpdateEvent","getInstance","use","objectClass","passive","ResizeObserver","entries","setupObject","observe","initMutationObserver","connectTargetId","connectTargetObject","destroy","setupSettings","disconnect","r","rW","rH","startElementPosition","endElementPosition","startSourcePosition","endSourcePosition","targetQuery","observerStart","observerEnd","optionsProgress","optionsInview","connectItems","connectQueueItem","connectItem","rootMargin","threshold","obProgress","IntersectionObserver","es","isIntersecting","obIntersection","obInview","isInit","removedObject","removeAttribute","innerHeight","MutationObserver","mutations","mutation","addedNodes","addedNode","nodeType","Node","ELEMENT_NODE","removedNodes","removedNode","removeId","attributes","childList","subtree","transformContainer","b","scrollWidth","scrollHeight","clientWidth","clientHeight"],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://StringTune/webpack/universalModuleDefinition","webpack://StringTune/webpack/bootstrap","webpack://StringTune/webpack/runtime/define property getters","webpack://StringTune/webpack/runtime/hasOwnProperty shorthand","webpack://StringTune/webpack/runtime/make namespace object","webpack://StringTune/./src/StringModule.ts","webpack://StringTune/./src/Loading/Modules/StringLazy.ts","webpack://StringTune/./src/Loading/Modules/StringLoading.ts","webpack://StringTune/./src/Loading/Modules/StringVideoAutoplay.ts","webpack://StringTune/./src/Mouse/Modules/StringCursor.ts","webpack://StringTune/./src/Mouse/Modules/StringMagnetic.ts","webpack://StringTune/./src/Utils/StringLerp.ts","webpack://StringTune/./src/Mouse/StringVirtualCursor.ts","webpack://StringTune/./src/Objects/StringObject.ts","webpack://StringTune/./src/Screen/StringResponsive.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarHorizontal.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarVertical.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbar.ts","webpack://StringTune/./src/Scroll/Modules/StringDisplacement.ts","webpack://StringTune/./src/Scroll/Modules/StringParallax.ts","webpack://StringTune/./src/Scroll/Modules/StringProgress.ts","webpack://StringTune/./src/Scroll/Types/StringScroll.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDefault.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDisable.ts","webpack://StringTune/./src/Scroll/Types/StringScrollSmooth.ts","webpack://StringTune/./src/Scroll/Types/StringTypeSettings.ts","webpack://StringTune/./src/Split/Modules/StringSplit.ts","webpack://StringTune/./src/StringFPS.ts","webpack://StringTune/./src/Tracker/StringFPSTracker.ts","webpack://StringTune/./src/Tracker/StringPositionTracker.ts","webpack://StringTune/./src/Utils/StringAttribute.ts","webpack://StringTune/./src/Utils/StringBoundingClientRect.ts","webpack://StringTune/./src/Utils/StringData.ts","webpack://StringTune/./src/Utils/StringEvent.ts","webpack://StringTune/./src/Utils/StringParser.ts","webpack://StringTune/./src/Utils/StringPosition.ts","webpack://StringTune/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"StringTune\"] = factory();\n\telse\n\t\troot[\"StringTune\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { IStringModule } from './IStringModule';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerp } from './Utils/StringLerp';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nexport class StringModule implements IStringModule {\r\n lerp: StringLerp;\r\n attribute: StringAttribute;\r\n boundingClientRect: StringBoundingClientRect;\r\n position: StringPosition;\r\n events: StringEvent;\r\n data: StringData;\r\n virtualCursor: StringVirtualCursor;\r\n settings: any = null;\r\n protected objectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected objects: Array<StringObject> = new Array<StringObject>();\r\n protected htmlKey: string = '';\r\n protected _type: number = 1;\r\n public get type() {\r\n return this._type;\r\n }\r\n constructor(visitor: any, settings: any = null) {\r\n this.data = visitor.data;\r\n this.lerp = visitor.lerp;\r\n this.attribute = visitor.attribute;\r\n this.boundingClientRect = visitor.boundingClientRect;\r\n this.position = visitor.position;\r\n this.virtualCursor = visitor.virtualCursor;\r\n this.events = visitor.events;\r\n this.settings = settings;\r\n }\r\n destructor() { }\r\n \r\n onChangeScrollParams(): void {}\r\n\r\n tryConnect(object: StringObject): boolean {\r\n let stringModuleKeys = this.attribute.process(object.el, 'string', '').split('|');\r\n\r\n let value = false;\r\n stringModuleKeys.forEach((key: string) => {\r\n if (key == this.htmlKey) {\r\n value = true;\r\n }\r\n });\r\n return value;\r\n }\r\n connect(object: StringObject) {\r\n object.connect(this);\r\n this.onConnect(object);\r\n }\r\n addObject(id: string, object: StringObject) {\r\n this.objectsMap.set(id, object);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n removeObject(id: string) {\r\n this.objectsMap.delete(id);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n\r\n onStart(): void {}\r\n onUpdate(data: StringData): void {}\r\n onResize(): void {}\r\n onConnect(object: StringObject): void {}\r\n onRebuild(): void {}\r\n onScroll(data: StringData): void {}\r\n onMouseMove(e: MouseEvent): void {}\r\n onWheel(e: WheelEvent): void {}\r\n onChangeDevice(): void {}\r\n onChangeScrollDirection(): void {}\r\n onMutationObserver(added: NodeList, removed: NodeList): void {}\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\nexport class StringLazy extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'lazy';\r\n }\r\n\r\n onStart(): void {\r\n const imagesEls = document.querySelectorAll('img[string-lazy]');\r\n imagesEls.forEach((element: any) => {\r\n this.getImageSize(element, element.getAttribute('string-lazy'));\r\n element.classList.add(`lazyLoad`);\r\n element.src = element.getAttribute('string-lazy') as any;\r\n element.addEventListener('load', () => {\r\n element.classList.add(`-loaded`);\r\n });\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLVideoElement;\r\n }\r\n\r\n private getImageSize(element: HTMLElement, url: string) {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = () => {\r\n if (xhr.status === 206 || xhr.status === 200) {\r\n const buffer = xhr.response;\r\n const blob = new Blob([buffer]);\r\n const img = new Image();\r\n img.onload = () => {\r\n element.style.aspectRatio = `${img.width} / ${img.height}`;\r\n resolve({ width: img.width, height: img.height });\r\n URL.revokeObjectURL(img.src);\r\n };\r\n img.onerror = () => {\r\n reject(new Error('Failed to load image'));\r\n };\r\n img.src = URL.createObjectURL(blob);\r\n } else {\r\n reject(new Error('Failed to load image'));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('Network error'));\r\n };\r\n xhr.setRequestHeader('Range', 'bytes=0-');\r\n xhr.send();\r\n });\r\n }\r\n}\r\n","import { StringModule } from \"../../StringModule\";\r\nimport { StringData } from \"../../Utils/StringData\";\r\n\r\n\r\nexport class StringLoading extends StringModule{\r\n loadingTimeout: number = 0\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor)\r\n this._type = 2\r\n\r\n if (settings != null) {\r\n if (settings.timeout != null) {\r\n this.loadingTimeout = settings.timeout\r\n }\r\n }\r\n }\r\n onStart(): void {\r\n setTimeout(() => {\r\n const htmlElement = document.documentElement;\r\n htmlElement.classList.add('-loaded');\r\n }, this.loadingTimeout);\r\n \r\n }\r\n}","import { StringObject } from \"../../Objects/StringObject\";\r\nimport { StringModule } from \"../../StringModule\";\r\n\r\nexport class StringVideoAutoplay extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = \"autoplay\";\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const videoSrc = this.attribute.process(videoElement, \"string-src\", \"\");\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (videoElement.tagName.toLowerCase() === \"video\" && videoSrc && started == false) {\r\n videoElement.setAttribute(\"muted\", \"muted\");\r\n videoElement.setAttribute(\"playsinline\", \"\");\r\n videoElement.setAttribute(\"loop\", \"\");\r\n videoElement.setAttribute(\"autoplay\", \"\");\r\n videoElement.src = videoSrc;\r\n videoElement.muted = true;\r\n videoElement.addEventListener(\"canplaythrough\", () => {\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (started == false) {\r\n this.tryPlay(object, videoElement); \r\n }\r\n }, { once: true });\r\n videoElement.load();\r\n } else {\r\n console.warn(\r\n \"StringVideoAutoplay: Element is not a <video> tag or string-src is missing.\",\r\n object.el\r\n );\r\n }\r\n }\r\n\r\n private tryPlay(object: StringObject, element: HTMLVideoElement) {\r\n element.play().catch((err) => {\r\n console.warn(\"Autoplay failed:\", err);\r\n object.started = false;\r\n }).then(() => {\r\n object.started = true;\r\n element.setAttribute(`string-started`, '')\r\n });\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringCursor extends StringModule {\r\n private lerpFactor: number = 0.2;\r\n private oldX = 0;\r\n private oldY = 0;\r\n protected enterObjectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected enterObjects: Array<StringObject> = new Array<StringObject>();\r\n cursor: any;\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor);\r\n this.htmlKey = 'cursor';\r\n this.cursor = document.querySelector('[string-cursor]') as HTMLElement;\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n if (this.virtualCursor.smoothX != this.oldX || this.virtualCursor.smoothY != this.oldY) {\r\n let cursorData = {\r\n lerpX: this.virtualCursor.lerpX,\r\n lerpY: this.virtualCursor.lerpY,\r\n x: this.virtualCursor.x,\r\n y: this.virtualCursor.y,\r\n };\r\n this.events.emit('cursor', cursorData);\r\n\r\n this.cursor.style.setProperty('--x', this.virtualCursor.smoothX);\r\n this.cursor.style.setProperty('--y', this.virtualCursor.smoothY);\r\n\r\n this.oldX = this.virtualCursor.smoothX;\r\n this.oldY = this.virtualCursor.smoothY;\r\n }\r\n\r\n this.objects.forEach((object) => {\r\n if (object.isMouseMove) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', this.virtualCursor.x - rect.left, rect.width);\r\n const offsetY = this.calculateOffset('center', this.virtualCursor.y - rect.top, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n } else {\r\n if (object.mouseX != 0 || object.mouseY != 0) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', object.halfWidth, rect.width);\r\n const offsetY = this.calculateOffset('center', object.halfHeight, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n }\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n\r\n let onMouseEnterEventBind = () => {\r\n element.addEventListener('mousemove', onMouseMoveEventBind);\r\n element.addEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = true;\r\n if (object.cursorTarget != null) {\r\n object.cursorTarget.classList.add('-show');\r\n }\r\n };\r\n let onMouseMoveEventBind = (event: MouseEvent) => {};\r\n let onMouseLeaveEventBind = () => {\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = false;\r\n if (object.cursorTarget != null) {\r\n object.cursorTarget.classList.remove('-show');\r\n }\r\n };\r\n\r\n object.onEnter = () => {\r\n element.addEventListener('mouseenter', onMouseEnterEventBind);\r\n };\r\n object.onLeave = () => {\r\n element.removeEventListener('mouseenter', onMouseEnterEventBind);\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n };\r\n }\r\n\r\n private setMouseCoordinates(object: StringObject, x: number, y: number) {\r\n if (object.selfDisable == false) {\r\n object.el.style.setProperty('--mouse-x', x.toFixed(2));\r\n object.el.style.setProperty('--mouse-y', y.toFixed(2));\r\n }\r\n object.connects.forEach((element) => {\r\n element.style.setProperty('--mouse-x', x.toFixed(2));\r\n element.style.setProperty('--mouse-y', y.toFixed(2));\r\n });\r\n }\r\n\r\n private calculateOffset(position: string, mousePos: number, size: number): number {\r\n switch (position) {\r\n case 'start':\r\n return mousePos / size;\r\n case 'end':\r\n return (mousePos - size) / size;\r\n case 'center':\r\n default:\r\n return (mousePos - size / 2) / (size / 2);\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringMagnetic extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'magnetic';\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLElement;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-strength'] != null) {\r\n object.strength = this.settings['string-strength'];\r\n }\r\n if (this.settings['string-radius'] != null) {\r\n object.radius = this.settings['string-radius'];\r\n }\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.objects.forEach((object) => {\r\n const element = object.el as HTMLElement;\r\n const rect = element.getBoundingClientRect();\r\n const elementCenterX = rect.left + object.halfWidth;\r\n const elementCenterY = rect.top + object.halfHeight;\r\n const distX = e.clientX - elementCenterX;\r\n const distY = e.clientY - elementCenterY;\r\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\r\n\r\n if (distance < object.radius) {\r\n object.magneticTargetX = distX * object.strength * ((object.radius - distance) / object.radius);\r\n object.magneticTargetY = distY * object.strength * ((object.radius - distance) / object.radius);\r\n object.isMagneting = true;\r\n } else {\r\n object.magneticTargetX = 0;\r\n object.magneticTargetY = 0;\r\n }\r\n });\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n if (object.isMagneting) {\r\n let lerpX = this.lerp.process(object.magneticX, object.magneticTargetX, object.lerp);\r\n let lerpY = this.lerp.process(object.magneticY, object.magneticTargetY, object.lerp);\r\n if (lerpX > -0.01 && lerpX < 0.01) {\r\n lerpX = 0;\r\n object.magneticX = object.magneticTargetX;\r\n }\r\n if (lerpY > -0.01 && lerpY < 0.01) {\r\n lerpY = 0;\r\n object.magneticY = object.magneticTargetY;\r\n }\r\n object.magneticX += lerpX;\r\n object.magneticY += lerpY;\r\n object.el.style.setProperty('--magnetic-x', object.magneticX.toString());\r\n object.el.style.setProperty('--magnetic-y', object.magneticY.toString());\r\n if (object.magneticTargetX == object.magneticX || object.magneticTargetY == object.magneticY) {\r\n object.isMagneting = false;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export class StringLerp{\r\n process(start: number, end: number, amt: number) {\r\n return amt * (end - start);\r\n }\r\n}","import { IStringModule } from \"../IStringModule\"\r\nimport { StringModule } from \"../StringModule\";\r\nimport { StringLerp } from \"../Utils/StringLerp\";\r\n\r\nexport class StringVirtualCursor{\r\n private _lF = .1\r\n private lerp = new StringLerp()\r\n \r\n private _x: number = 0\r\n private _y: number = 0\r\n private _lerpX: number = 0\r\n private _lerpY: number = 0\r\n\r\n private targetX: number = 0\r\n private targetY: number = 0\r\n\r\n public get x(){\r\n return this.targetX\r\n }\r\n public get y(){\r\n return this.targetY\r\n }\r\n public get smoothX(){\r\n return this._x\r\n }\r\n public get smoothY(){\r\n return this._y\r\n }\r\n public get lerpX(){\r\n return this._lerpX\r\n }\r\n public get lerpY(){\r\n return this._lerpY\r\n }\r\n\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.targetX = e.clientX;\r\n this.targetY = e.clientY;\r\n }\r\n onUpdate(): void {\r\n this._lerpX = this.lerp.process(this._x, this.targetX, this._lF)\r\n this._lerpY = this.lerp.process(this._y, this.targetY, this._lF)\r\n \r\n this._x = Math.floor(this._x + this._lerpX);\r\n this._y = Math.floor(this._y + this._lerpY);\r\n }\r\n\r\n\r\n}","import { IStringModule } from '../IStringModule';\r\n\r\nconst tS = 'top';\r\nconst bS = 'bottom';\r\nconst lS = 'left';\r\nconst rS = 'right';\r\n\r\nexport class StringObject {\r\n public el: HTMLElement;\r\n public id: string = '';\r\n public oStart: number = 0;\r\n public oEnd: number = 0;\r\n public size: number = 0;\r\n\r\n public startPos: number = 0;\r\n public endPos: number = 0;\r\n public differencePos: number = 0;\r\n public factor: number = 1;\r\n\r\n public inviewTop: number = 1;\r\n public inviewBottom: number = 1;\r\n\r\n public sElPos: string = '';\r\n public sScrPos: string = '';\r\n public eElPos: string = '';\r\n public eScrPos: string = '';\r\n\r\n public halfWidth: number = 0;\r\n public halfHeight: number = 0;\r\n\r\n public start: number = 0;\r\n public end: number = 0;\r\n\r\n public mouseX: number = 0;\r\n public mouseY: number = 0;\r\n\r\n public magneticTargetX: number = 0;\r\n public magneticTargetY: number = 0;\r\n\r\n public magneticX: number = 0;\r\n public magneticY: number = 0;\r\n\r\n public lerp: number = 0;\r\n public strength: number = 0;\r\n public radius: number = 0;\r\n public parallaxPositionStart: number = 0;\r\n public parallaxPositionEnd: number = 0;\r\n\r\n public connects: Array<HTMLElement> = new Array<HTMLElement>();\r\n public cursorTarget: any = null;\r\n\r\n public key: string = '--progress';\r\n\r\n public showObserver: IntersectionObserver | null = null;\r\n public progressObserver: IntersectionObserver | null = null;\r\n public inviewObserver: IntersectionObserver | null = null;\r\n\r\n public repeat: boolean = false;\r\n public selfDisable: boolean = false;\r\n public active: boolean = false;\r\n public abs: boolean = false;\r\n public isMouseMove: boolean = false;\r\n public started: boolean = false;\r\n public isMagneting: boolean = false;\r\n\r\n public onEnter = () => {};\r\n public onLeave = () => {};\r\n\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n\r\n constructor(element: HTMLElement) {\r\n this.el = element;\r\n }\r\n\r\n enter() {\r\n this.active = true;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.addObject(this.id, this);\r\n });\r\n this.onEnter();\r\n }\r\n leave() {\r\n this.active = false;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.removeObject(this.id);\r\n });\r\n this.onLeave();\r\n }\r\n show() {\r\n this.el.classList.add('-inview');\r\n }\r\n hide() {\r\n if (this.repeat) {\r\n this.el.classList.remove('-inview');\r\n }\r\n }\r\n\r\n connect(module: IStringModule) {\r\n this.modules.push(module);\r\n }\r\n\r\n \r\n public calculatePositions(windowSize: number) {\r\n if ((this.sElPos === tS && this.sScrPos === tS) || (this.sElPos === lS && this.sScrPos === lS)) {\r\n this.startPos = this.start - this.oEnd;\r\n } else if ((this.sElPos === tS && this.sScrPos === bS) || (this.sElPos === lS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === tS) || (this.sElPos === rS && this.sScrPos === lS)) {\r\n this.startPos = this.start + this.size - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === bS) || (this.sElPos === rS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd + this.size;\r\n }\r\n\r\n if ((this.eElPos === tS && this.eScrPos === tS) || (this.eElPos === lS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.oStart;\r\n } else if ((this.eElPos === tS && this.eScrPos === bS) || (this.eElPos === lS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === tS) || (this.eElPos === rS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.size + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === bS) || (this.eElPos === rS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.size + this.oStart;\r\n }\r\n this.differencePos = this.endPos - this.startPos;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\n\nenum DeviceType {\n Mobile,\n Tablet,\n Laptop,\n Desktop,\n}\n\ninterface DeviceQueryConfig {\n min?: number;\n max?: number;\n enable?: boolean;\n}\n\ninterface QueryConfig {\n mobile?: DeviceQueryConfig;\n tablet?: DeviceQueryConfig;\n laptop?: DeviceQueryConfig;\n desktop?: DeviceQueryConfig;\n}\n\nclass StringResponsiveQueryDevice {\n public min?: number = undefined;\n public max?: number = undefined;\n public enable: boolean = true;\n\n constructor(config?: DeviceQueryConfig) {\n this.min = config?.min;\n this.max = config?.max;\n this.enable = config?.enable ?? true;\n }\n\n setEnable(enable: boolean = true) {\n this.enable = enable;\n }\n setRange(min?: number, max?: number) {\n this.min = min ?? undefined;\n this.max = max ?? undefined;\n }\n\n get mediaQuery(): string {\n let query = 'screen';\n if (this.min) {\n query += ` and (min-width: ${this.min}px)`;\n }\n if (this.max) {\n query += ` and (max-width: ${this.max}px)`;\n }\n return query;\n }\n}\n\nexport class StringResponsive extends StringModule {\n private queries: { [key in DeviceType]: StringResponsiveQueryDevice } = {\n [DeviceType.Mobile]: new StringResponsiveQueryDevice({ max: 359 }),\n [DeviceType.Tablet]: new StringResponsiveQueryDevice({ min: 360, max: 1079 }),\n [DeviceType.Laptop]: new StringResponsiveQueryDevice({ min: 1080, max: 1365 }),\n [DeviceType.Desktop]: new StringResponsiveQueryDevice({ min: 1366 }),\n };\n\n private matchMedias: { [key in DeviceType]: MediaQueryList } = {\n [DeviceType.Mobile]: window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery),\n [DeviceType.Tablet]: window.matchMedia(this.queries[DeviceType.Tablet].mediaQuery),\n [DeviceType.Laptop]: window.matchMedia(this.queries[DeviceType.Laptop].mediaQuery),\n [DeviceType.Desktop]: window.matchMedia(this.queries[DeviceType.Desktop].mediaQuery),\n };\n\n constructor(visitor: any, settings: any) {\n super(visitor, settings);\n this._type = 2;\n }\n\n onConnect() {}\n\n onStart(): void {\n if (this.settings != null) {\n if (this.settings['settings'] != null) {\n let config = this.settings['settings'];\n if (config.mobile) {\n this.queries[DeviceType.Mobile].enable = true;\n this.queries[DeviceType.Mobile].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Mobile] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Mobile].enable = false;\n }\n\n if (config.tablet) {\n this.queries[DeviceType.Tablet].enable = true;\n this.queries[DeviceType.Tablet].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Tablet] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Tablet].enable = false;\n }\n\n if (config.laptop) {\n this.queries[DeviceType.Laptop].enable = true;\n this.queries[DeviceType.Laptop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Laptop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Laptop].enable = false;\n }\n\n if (config.desktop) {\n this.queries[DeviceType.Desktop].enable = true;\n this.queries[DeviceType.Desktop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Desktop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Desktop].enable = false;\n }\n }\n }\n this.updateElements();\n }\n\n onResize(): void {\n this.updateElements();\n }\n\n private updateElements() {\n const isMobileMedia = this.matchMedias[DeviceType.Mobile].matches && this.queries[DeviceType.Mobile].enable;\n const isTabletMedia = this.matchMedias[DeviceType.Tablet].matches && this.queries[DeviceType.Tablet].enable;\n const isLaptopMedia = this.matchMedias[DeviceType.Laptop].matches && this.queries[DeviceType.Laptop].enable;\n const isDesktopMedia = this.matchMedias[DeviceType.Desktop].matches && this.queries[DeviceType.Desktop].enable;\n\n const elements = document.querySelectorAll('[string-mobile], [string-tablet], [string-laptop], [string-desktop]');\n\n elements.forEach((element: any) => {\n let showElement = false;\n\n if (element.hasAttribute('string-mobile') && isMobileMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-tablet') && isTabletMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-laptop') && isLaptopMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-desktop') && isDesktopMedia) {\n showElement = true;\n }\n\n if (showElement) {\n element.style.display = null;\n } else {\n element.style.display = `none`;\n }\n });\n }\n}\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarHorizontal {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startY: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psH;\r\n const visibleSize = this.data.wS;\r\n\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentHeight = this.data.psH;\r\n const visibleHeight = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentHeight) * visibleHeight + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startY = e.clientY;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaY = e.clientY - this.startY;\r\n const newScrollPosition = this.startScrollPosition + (deltaY / this.data.wS) * this.data.psH;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarVertical {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startCoordinate: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psW;\r\n const visibleSize = this.data.wS;\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentWidth = this.data.psW;\r\n const visibleWidth = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentWidth) * visibleWidth + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startCoordinate = e.clientX;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaX = e.clientX - this.startCoordinate;\r\n const newScrollPosition = this.startScrollPosition + (deltaX / this.data.wS) * this.data.psW;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringModule } from '../../../StringModule';\r\nimport { StringData } from '../../../Utils/StringData';\r\nimport { StringScrollbarHorizontal } from './StringScrollbarHorizontal';\r\nimport { StringScrollbarVertical } from './StringScrollbarVertical';\r\n\r\nexport class StringScrollbar extends StringModule {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private scrollTimeout: any;\r\n\r\n private isDragging = false;\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n\r\n private mouseUpEventBind: any;\r\n private mouseDownEventBind: any;\r\n private mouseMoveEventBind: any;\r\n\r\n private scrollbarState: any;\r\n private scrollbarStateHorizontal: any;\r\n private scrollbarStateVertical: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n\r\n this.mouseUpEventBind = this.mouseUpEvent.bind(this);\r\n this.mouseDownEventBind = this.mouseDownEvent.bind(this);\r\n this.mouseMoveEventBind = this.mouseMoveEvent.bind(this);\r\n }\r\n destructor(): void {\r\n document.removeEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.removeEventListener('mousedown', this.mouseDownEventBind);\r\n document.removeEventListener('mousemove', this.mouseMoveEventBind);\r\n }\r\n\r\n onStart(): void {\r\n this.createScrollbar();\r\n this.updateThumb();\r\n this.addCustomStyles();\r\n document.addEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.addEventListener('mousedown', this.mouseDownEventBind);\r\n document.addEventListener('mousemove', this.mouseMoveEventBind);\r\n document.documentElement.classList.add(`-no-scrollbar`);\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.updateThumb();\r\n this.showScrollbar();\r\n this.hideScrollbar();\r\n }\r\n\r\n onResize(): void {\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n onChangeScrollParams(): void {\r\n if (this.data.sM == 'disable' && this.scrollMode != 'disable') {\r\n this.scrollbar.classList.add('-hide');\r\n }\r\n if ((this.data.sM == 'smooth' && this.scrollMode == 'disable') || (this.data.sM == 'default' && this.scrollMode == 'disable')) {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n this.scrollMode = this.data.sM;\r\n }\r\n\r\n onChangeScrollDirection() {\r\n if (this.data.sD == 'horizontal') {\r\n this.scrollbarState = this.scrollbarStateVertical;\r\n } else {\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n private addCustomStyles() {\r\n const style = document.createElement('style');\r\n style.textContent = `\r\n ::-webkit-scrollbar {\r\n display: none;\r\n width: 0;\r\n height: 0;\r\n -webkit-appearance: none;\r\n }\r\n body {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n .-without-scrollbar::-webkit-scrollbar {\r\n display: none;\r\n }\r\n .-without-scrollbar {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n\r\n private createScrollbar() {\r\n this.scrollbar = document.createElement('div');\r\n this.scrollbar.classList.add('scrollbar');\r\n this.thumb = document.createElement('div');\r\n this.thumb.classList.add('thumb');\r\n this.scrollbar.appendChild(this.thumb);\r\n document.body.appendChild(this.scrollbar);\r\n\r\n this.scrollbarStateHorizontal = new StringScrollbarHorizontal(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarStateVertical = new StringScrollbarVertical(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n\r\n private updateThumb() {\r\n this.scrollbarState.updateThumb();\r\n }\r\n\r\n private mouseDownEvent(e: MouseEvent) {\r\n this.isDragging = true;\r\n this.scrollbarState.mouseDownEvent(e);\r\n document.body.style.userSelect = 'none';\r\n this.scrollbar.classList.add('-touch');\r\n }\r\n\r\n private mouseMoveEvent(e: MouseEvent) {\r\n if (!this.isDragging) return;\r\n\r\n this.scrollbarState.mouseMoveEvent(e);\r\n }\r\n\r\n private mouseUpEvent() {\r\n this.isDragging = false;\r\n document.body.style.userSelect = '';\r\n this.hideScrollbar();\r\n this.scrollbar.classList.remove('-touch');\r\n }\r\n\r\n private showScrollbar() {\r\n this.scrollbar.classList.add('-scroll');\r\n }\r\n\r\n private hideScrollbar() {\r\n if (this.scrollTimeout) {\r\n clearTimeout(this.scrollTimeout);\r\n }\r\n this.scrollTimeout = setTimeout(() => {\r\n this.scrollbar.classList.remove('-scroll');\r\n }, 1000);\r\n }\r\n}\r\n","import { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringDisplacement extends StringModule {\r\n oldLerp: number = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'displacement.';\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n if (this.oldLerp != 0 && data.v == 0) {\r\n this.oldLerp = 0\r\n document.documentElement.style.setProperty('--lerp', \"0\");\r\n }\r\n if (data.v > 0) {\r\n document.documentElement.style.setProperty('--lerp', data.v.toString());\r\n this.oldLerp = data.v\r\n }\r\n \r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringParallax extends StringModule {\r\n private setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n\r\n private onScrollDesktopEvent = () => {\r\n this.objects.forEach((object) => {\r\n let progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\r\n object.el.style.setProperty(object.key, progress.toString());\r\n this.setupParallax(object, progress);\r\n });\r\n }\r\n private onScrollMobileEvent = () => {}\r\n private onScrollEvent = this.onScrollDesktopEvent\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'parallax';\r\n }\r\n\r\n onConnect(object: StringObject): void {\r\n if (this.settings != null) {\r\n if (this.settings['string-parallax-bias'] != null) {\r\n let parallaxPosition = this.attribute.process(object.el, 'string-parallax-bias', this.settings['string-parallax-bias']);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n }\r\n if (this.settings['string-parallax'] != null) {\r\n object.factor = this.settings['string-parallax'];\r\n }\r\n }\r\n \r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.onScrollEvent()\r\n }\r\n onChangeScrollDirection(): void {\r\n if (this.data.sD == 'vertical') {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n } else {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n }\r\n }\r\n\r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.onScrollEvent = this.onScrollDesktopEvent\r\n } else {\r\n this.onScrollEvent = this.onScrollMobileEvent \r\n this.objects.forEach((object) => {\r\n this.setupParallax(object, .5);\r\n })\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringProgress extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'progress';\r\n }\r\n onScroll(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n this.setUpObject(object, this.data.c);\r\n });\r\n }\r\n onConnect(object: StringObject) {\r\n object.onEnter = () => {\r\n this.setUpObject(object, this.data.c);\r\n };\r\n }\r\n\r\n private setUpObject(object: StringObject, currentTop: number) {\r\n let progress = Math.min(1, Math.max(0, (currentTop - object.startPos) / object.differencePos));\r\n //TODO BUG\r\n this.events.emit(`progress_${object.id}`, progress);\r\n object.el.style.setProperty(object.key, progress.toString());\r\n object.connects.forEach((element) => {\r\n element.style.setProperty(object.key, progress.toString());\r\n });\r\n }\r\n}\r\n","import { StringData } from '../../Utils/StringData';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScroll {\r\n public data: StringData;\r\n public isProg: boolean = false;\r\n public isParallaxEnabled: boolean = false;\r\n public name: string = '';\r\n public settings: StringTypeSettings;\r\n public v = 0;\r\n protected vT: number = 0;\r\n protected d: any;\r\n\r\n public scrollContainer: any;\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n this.d = document;\r\n this.settings = settings;\r\n this.data = data;\r\n this.scrollContainer = window;\r\n }\r\n\r\n onCalcUpdate: any = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n onUpdate(): void {}\r\n onWheel(e: any): void {}\r\n onScroll(e: any): void {}\r\n\r\n protected _scrollDirection: 'vertical' | 'horizontal' = 'vertical';\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this._scrollDirection = scrollDirection;\r\n if (this._scrollDirection == 'vertical') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n } else if (this._scrollDirection == 'horizontal') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(this.data.c, 0);\r\n };\r\n }\r\n }\r\n}\r\n","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDefault extends StringScroll {\r\n private animateC: number = 0;\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'mobile';\r\n }\r\n public onUpdate() {\r\n this.vT = this.d.documentElement.scrollTop - this.animateC;\r\n this.animateC = this.d.documentElement.scrollTop;\r\n this.v = this.vT;\r\n }\r\n public onScroll(e: any) {\r\n this.data.c = this.d.documentElement.scrollTop;\r\n this.data.t = this.d.documentElement.scrollTop;\r\n this.data.d = 0;\r\n }\r\n}","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDisable extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'disable';\r\n }\r\n\r\n public onUpdate() {}\r\n\r\n public onWheel(e: any) {\r\n e.preventDefault();\r\n }\r\n\r\n public onScroll(e: any) {\r\n e.preventDefault();\r\n }\r\n}","import { StringData } from '../../Utils/StringData';\r\nimport { StringScroll } from './StringScroll';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScrollSmooth extends StringScroll {\r\n public name: string = 'desktop';\r\n private isScroll: boolean = false;\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'desktop';\r\n }\r\n\r\n public onUpdate() {\r\n this.data.v = (this.data.t - this.data.c) * this.settings.speed;\r\n if (this.data.v != 0) {\r\n this.isScroll = true;\r\n\r\n let newC;\r\n if (this.data.v > 0) {\r\n newC = Math.ceil(this.data.c + this.data.v);\r\n document.documentElement.classList.add('-scroll-forward');\r\n document.documentElement.classList.remove('-scroll-back');\r\n } else {\r\n newC = Math.floor(this.data.c + this.data.v);\r\n document.documentElement.classList.add('-scroll-back');\r\n document.documentElement.classList.remove('-scroll-forward');\r\n }\r\n\r\n if (this.data.c != newC) {\r\n this.data.c = newC;\r\n this.isProg = true;\r\n this.onCalcUpdate();\r\n } else {\r\n this.data.c = newC;\r\n }\r\n } else if (this.isScroll) {\r\n this.isScroll = false;\r\n this.data.v = 0;\r\n this.data.c = this.data.t;\r\n this.isProg = false;\r\n document.documentElement.classList.remove('-scroll-back');\r\n document.documentElement.classList.remove('-scroll-forward');\r\n document.documentElement.style.setProperty('--lerp', '0');\r\n }\r\n }\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n e.preventDefault();\r\n this.data.d = e.deltaY;\r\n this.data.t += this.data.d;\r\n this.data.t = Math.min(Math.max(this.data.t, 0), this.data.bS);\r\n }\r\n }\r\n}\r\n","export class StringTypeSettings{\r\n private sC: number = 0.0\r\n private sA: number = 0.13\r\n private sD: number = 0.04\r\n\r\n public get speed() {\r\n return this.sC\r\n }\r\n public get speedAccelerate() {\r\n return this.sA\r\n }\r\n public get speedDecelerate() { \r\n return this.sD\r\n }\r\n\r\n public set speedAccelerate(speed: number) {\r\n this.sA = speed\r\n this.updateScrollParams()\r\n }\r\n public set speedDecelerate(speed: number) { \r\n this.sD = speed\r\n this.updateScrollParams()\r\n }\r\n \r\n private updateScrollParams() {\r\n this.sC = this.sA * (1 - this.sD)\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\ninterface ISplitOptions {\r\n line?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n word?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n char?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n charLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n charWord?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n wordLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n}\r\n\r\nexport class StringSplit extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'split';\r\n }\r\n\r\n onStart(): void {}\r\n onResize(): void {\r\n document.querySelectorAll(`[string=\"split\"].-splited`).forEach((element) => {\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n element.innerHTML = this.split(splitOptions, element).html;\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n if (!element.classList.contains('-splited')) {\r\n element.classList.add('-splited');\r\n element.setAttribute('string-split-original', element.innerHTML);\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n element.innerHTML = this.split(splitOptions, element).html;\r\n }\r\n }\r\n\r\n private parseSplitOptions(attributeValue: string | null): ISplitOptions {\r\n const options: ISplitOptions = {\r\n line: [],\r\n word: [],\r\n char: [],\r\n charLine: [],\r\n charWord: [],\r\n wordLine: [],\r\n };\r\n\r\n if (attributeValue) {\r\n const parts = attributeValue.split('|');\r\n\r\n parts.forEach((part) => {\r\n const match = part.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\r\n\r\n if (match) {\r\n const prefix = match[1] || '';\r\n const option = match[2];\r\n const params = match[4] ? match[4].split(',') : [];\r\n switch (prefix + option) {\r\n case 'char-line':\r\n (options.charLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char-word':\r\n (options.charWord as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word-line':\r\n (options.wordLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'line':\r\n (options.line as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word':\r\n (options.word as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char':\r\n (options.char as any[]).push(this.parseParam(params));\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private parseParam(params: string[]): { align: string; random?: { min: number; max: number }; abs?: boolean } {\r\n const result: { align: string; random?: { min: number; max: number }; abs?: boolean } = { align: 'start' };\r\n\r\n params.forEach((param) => {\r\n if (param === 'abs') {\r\n result.abs = true;\r\n } else if (param.startsWith('random')) {\r\n const match = param.match(/random\\((\\d+),(\\d+)\\)/);\r\n if (match) {\r\n result.random = { min: parseInt(match[1]), max: parseInt(match[2]) };\r\n result.align = 'random';\r\n } else {\r\n result.align = 'random';\r\n }\r\n } else if (['start', 'center', 'end'].includes(param)) {\r\n result.align = param;\r\n } else {\r\n result.align = 'start';\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public split(options: ISplitOptions, elementRoot: any): any {\r\n //let text = elementRoot.innerHTML;\r\n let text = elementRoot.getAttribute('string-split-original');\r\n if (text.length === 0) return '';\r\n\r\n text = this.decodeHtmlEntity(text);\r\n const element = document.createElement('span');\r\n const words = text.split(/\\s+/);\r\n let globalCharIndex = 0;\r\n let globalWordIndex = 0;\r\n const totalChars = text.replace(/\\s/g, '').length;\r\n\r\n const tempSpan = document.createElement('span');\r\n const compStyles = window.getComputedStyle(elementRoot);\r\n\r\n tempSpan.style.fontFamily = compStyles.fontFamily;\r\n tempSpan.style.fontSize = compStyles.fontSize;\r\n tempSpan.style.letterSpacing = compStyles.letterSpacing;\r\n tempSpan.style.lineHeight = compStyles.lineHeight;\r\n tempSpan.style.fontWeight = compStyles.fontWeight;\r\n tempSpan.classList.add('-s-char');\r\n document.body.appendChild(tempSpan);\r\n\r\n let virtualLines: any[] = [];\r\n let virtualLine: any[] = [];\r\n let currentLineWidth = 0;\r\n words.forEach((word: any, wordIndex: any) => {\r\n tempSpan.textContent = word;\r\n if (word.length > 0) {\r\n tempSpan.textContent += '\\u00a0';\r\n }\r\n\r\n const wordWidth = tempSpan.offsetWidth;\r\n\r\n const virtualWordSpan = {\r\n text: word,\r\n width: wordWidth,\r\n chars: new Array<any>(),\r\n };\r\n const chars = Array.from(word);\r\n chars.forEach((char, charIndex) => {\r\n const virtualCharSpan = {\r\n text: char,\r\n };\r\n\r\n virtualWordSpan.chars.push(virtualCharSpan);\r\n });\r\n if (currentLineWidth + wordWidth > elementRoot.offsetWidth) {\r\n virtualLines.push(virtualLine);\r\n virtualLine = [];\r\n currentLineWidth = 0;\r\n globalCharIndex += virtualLine.length;\r\n }\r\n virtualLine.push(virtualWordSpan);\r\n currentLineWidth += wordWidth;\r\n });\r\n\r\n virtualLines.push(virtualLine);\r\n\r\n let hasLineOptions = false;\r\n if (options.line != null) {\r\n if (options.line.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.wordLine != null) {\r\n if (options.wordLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.charLine != null) {\r\n if (options.charLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n\r\n let addedWordsCount = 0;\r\n if (hasLineOptions) {\r\n // for (let i = 0; i < virtualLines.length; i++) {\r\n // addedWordsCount += virtualLines[i].length;\r\n // }\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n this.appendVirtualLineToDOM(\r\n i,\r\n virtualLines.length,\r\n words.length,\r\n element,\r\n virtualLines[i],\r\n options,\r\n globalCharIndex,\r\n totalChars,\r\n addedWordsCount\r\n );\r\n addedWordsCount += virtualLines[i].length;\r\n }\r\n } else {\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n virtualLines[i].forEach((virtualWordSpan: any, wordIndex: any) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n });\r\n this.applyOptions(wordSpan, options.word, globalWordIndex, 'word', wordIndex, words.length);\r\n if (virtualWordSpan.chars.length > 0) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n element.appendChild(wordSpan);\r\n globalWordIndex++;\r\n }\r\n });\r\n }\r\n }\r\n\r\n document.body.removeChild(tempSpan);\r\n return { html: element.innerHTML };\r\n }\r\n\r\n // TODO: remove line - char,word\r\n private appendVirtualLineToDOM(\r\n lineIndex: number,\r\n length: number,\r\n totalWords: number,\r\n element: HTMLSpanElement,\r\n virtualLine: any[],\r\n options: ISplitOptions,\r\n globalCharIndex: number,\r\n totalChars: number,\r\n addedWordsCount: number\r\n ) {\r\n const lineSpan = document.createElement('span');\r\n lineSpan.classList.add('-s-line');\r\n\r\n this.applyOptions(lineSpan, options.line, lineIndex, 'line', 0, length);\r\n\r\n let lineCharIndex = 0;\r\n let globalWordIndex = 0;\r\n let totalLineChars = 0;\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n totalLineChars += virtualWordSpan.text.length;\r\n });\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charLine, lineCharIndex, 'char-line', charIndex, totalLineChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n lineCharIndex++;\r\n });\r\n\r\n this.applyOptions(\r\n wordSpan,\r\n options.word,\r\n addedWordsCount + globalWordIndex,\r\n 'word',\r\n addedWordsCount + globalWordIndex,\r\n totalWords - 1\r\n );\r\n this.applyOptions(wordSpan, options.wordLine, wordIndex, 'word-line', wordIndex, virtualLine.length);\r\n\r\n if (wordIndex < virtualLine.length - 1) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n // +'\\u00a0';\r\n\r\n lineSpan.appendChild(wordSpan);\r\n // if (wordIndex < virtualLine.length - 1) {\r\n // lineSpan.appendChild(this.createSpaceSpan());\r\n // }\r\n globalWordIndex++;\r\n }\r\n });\r\n\r\n element.appendChild(lineSpan);\r\n }\r\n\r\n private applyOptions(\r\n span: HTMLSpanElement,\r\n optionArray: any[] | undefined,\r\n globalIndex: number,\r\n type: string,\r\n localIndex: number,\r\n parentLength: number\r\n ) {\r\n if (optionArray) {\r\n optionArray.forEach((option, optionIndex) => {\r\n let index = this.calculateIndex(option, globalIndex, localIndex, parentLength);\r\n\r\n const variableName = this.generateVariableName(type, option, optionIndex);\r\n span.style.setProperty(variableName, String(index));\r\n });\r\n }\r\n }\r\n\r\n private createSpaceSpan(): HTMLSpanElement {\r\n const spaceSpan = document.createElement('span');\r\n spaceSpan.innerHTML = '\\u00a0';\r\n return spaceSpan;\r\n }\r\n\r\n private decodeHtmlEntity(str: string) {\r\n return str.replace(/&amp;/g, '&');\r\n }\r\n\r\n private calculateIndex(\r\n options: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n globalIndex: number,\r\n localIndex: number,\r\n parentLength: number\r\n ): number {\r\n let index = globalIndex;\r\n if (options.align === 'random') {\r\n if (options.random === undefined) {\r\n options.random = { min: 0, max: parentLength };\r\n }\r\n const min = options.random.min || 0;\r\n const max = options.random.max || parentLength;\r\n index = Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n if (options.align === 'end') {\r\n index = parentLength - index - 1;\r\n } else if (options.align === 'center') {\r\n index = index - Math.floor(parentLength / 2);\r\n }\r\n\r\n if (options.abs) {\r\n index = Math.abs(index);\r\n }\r\n return index;\r\n }\r\n\r\n private generateVariableName(\r\n type: string,\r\n option: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n index: number\r\n ): string {\r\n let variableName = `--${type}`;\r\n if (option.align) {\r\n variableName += `-${option.align}`;\r\n }\r\n return variableName;\r\n }\r\n}\r\n","export class StringFPS{\r\n private isAnimationStarted: boolean = false\r\n private fpsInterval: any\r\n private now: any\r\n private then: any\r\n private elapsed: any;\r\n private requestAnimationId: number = 0\r\n public onFrame = ()=>{}\r\n public start(fps: number) {\r\n if (this.isAnimationStarted) { return }\r\n this.fpsInterval = 1000 / fps;\r\n this.then = Date.now();\r\n this.animate();\r\n this.isAnimationStarted = true\r\n }\r\n public stop() {\r\n if (!this.isAnimationStarted) { return }\r\n cancelAnimationFrame(this.requestAnimationId)\r\n this.isAnimationStarted = false\r\n }\r\n private animate() {\r\n this.requestAnimationId = requestAnimationFrame(() => { this.animate() })\r\n this.now = Date.now();\r\n this.elapsed = this.now - this.then;\r\n if (this.elapsed > this.fpsInterval) {\r\n this.then = this.now - (this.elapsed % this.fpsInterval);\r\n this.onFrame()\r\n }\r\n }\r\n}","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringFPSTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.right = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-fps', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-fps]::after {\r\n content: 'FPS: ' attr(fps);\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n this.intervalId = setInterval(() => {\r\n this.displayElement.setAttribute('fps', `${this.callCount}`);\r\n this.callCount = 0;\r\n }, 1000);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n clearInterval(this.intervalId);\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringPositionTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.left = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-position', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-position]::after {\r\n content: attr(direction) 'Top: ' attr(value) 'px';\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n let dirSymbol = ``;\r\n if (data.c < data.t) {\r\n dirSymbol = `↓`;\r\n }\r\n if (data.c > data.t) {\r\n dirSymbol = `↑`;\r\n }\r\n this.displayElement.setAttribute('direction', dirSymbol);\r\n this.displayElement.setAttribute('value', `${this.data.c}`);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","export class StringAttribute{\r\n process(e: any, n: string, d: any = null) {\r\n return e.getAttribute(n) == null ? d : e.getAttribute(n)\r\n }\r\n}","export class StringBoundingClientRect {\r\n process(e: any) {\r\n return e.getBoundingClientRect();\r\n }\r\n}\r\n","export class StringData {\r\n t: number = 0;\r\n c: number = 0;\r\n d: number = 0;\r\n v: number = 0;\r\n bS: number = 0;\r\n cF: number = 1;\r\n wS: number = 0;\r\n hnwS: number = 0;\r\n\r\n psW: number = 0;\r\n psH: number = 0;\r\n\r\n scsW: number = 1;\r\n scsH: number = 1;\r\n sD: 'vertical' | 'horizontal' = 'vertical';\r\n sC: any;\r\n sM: 'smooth' | 'disable' | 'default' = 'smooth';\r\n}\r\n","export class StringEvent{\r\n\r\n private eventsByKey: Map<string, Array<Function>> = new Map<string, Array<Function>>()\r\n private events: Array<Function> = new Array<Function>()\r\n on(id: string, event: Function){\r\n if ( this.eventsByKey.has(id) == false) { \r\n this.eventsByKey.set(id, [])\r\n }\r\n this.eventsByKey.get(id)?.push(event)\r\n this.updateAllEvents()\r\n }\r\n public has(id: string) {\r\n return this.eventsByKey.has(id)\r\n }\r\n public emit(id: string, value: any) {\r\n if (this.eventsByKey.has(id)) {\r\n this.eventsByKey.get(id)?.forEach((event: any) => {\r\n event(value)\r\n });\r\n }\r\n }\r\n public off(id: string, event: Function) {\r\n let ea = this.eventsByKey.get(id)\r\n if (ea!=null) {\r\n this.eventsByKey.set(id, ea.filter((h: any) => h !== event))\r\n }\r\n this.updateAllEvents()\r\n }\r\n public all(value: any) {\r\n this.events.forEach(event => {\r\n event(value)\r\n });\r\n }\r\n private updateAllEvents() {\r\n Array.from(this.eventsByKey.values()).forEach(listOfEvents => {\r\n listOfEvents.forEach(event => {\r\n this.events.push(event)\r\n });\r\n });\r\n }\r\n}","export class StringParser{\r\n public parseSingle(v: string, element: any, wH: any, baseRem: number): number {\r\n let isNegative = v.startsWith('-');\r\n if (isNegative) {\r\n v = v.slice(1);\r\n }\r\n let pV;\r\n if (v === 'selfHeight') {\r\n pV = element.offsetHeight;\r\n } else if (v.endsWith('px')) {\r\n pV = parseFloat(v);\r\n } else if (v.endsWith('%')) {\r\n pV = parseFloat(v) * wH / 100;\r\n } else if (v.endsWith('rem')) {\r\n pV = parseFloat(v) * baseRem;\r\n }\r\n return isNegative ? -pV : pV;\r\n }\r\n}","function nullifyTransforms(el: any) {\r\n let { top, left, width, height } = el.getBoundingClientRect();\r\n let transformArr = parseTransform(el);\r\n if (transformArr.length == 6) {\r\n var t = transformArr;\r\n let det = t[0] * t[3] - t[1] * t[2];\r\n return {\r\n width: width / t[0] == 0 ? 1 : t[0],\r\n height: height / t[3] == 0 ? 1 : t[3],\r\n left: (left * t[3] - top * t[2] + t[2] * t[5] - t[4] * t[3]) / det,\r\n top: (-left * t[1] + top * t[0] + t[4] * t[1] - t[0] * t[5]) / det,\r\n };\r\n } else {\r\n return { top, left, width, height };\r\n }\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n}\r\n\r\nexport class StringPosition {\r\n process(e: any, container: any = document.body) {\r\n let br;\r\n try {\r\n br = container.getBoundingClientRect();\r\n } catch (error) {\r\n br = document.body.getBoundingClientRect();\r\n }\r\n let er = nullifyTransforms(e);\r\n let o = er.top - br.top;\r\n let oL = er.left - br.left;\r\n return { top: o, left: oL };\r\n }\r\n}\r\n","import { IStringModule } from './IStringModule';\r\nimport { StringLazy } from './Loading/Modules/StringLazy';\r\nimport { StringLoading } from './Loading/Modules/StringLoading';\r\nimport { StringVideoAutoplay } from './Loading/Modules/StringVideoAutoplay';\r\nimport { StringCursor } from './Mouse/Modules/StringCursor';\r\nimport { StringMagnetic } from './Mouse/Modules/StringMagnetic';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringResponsive } from './Screen/StringResponsive';\r\nimport { StringScrollbar } from './Scroll/Modules/Scrollbar/StringScrollbar';\r\nimport { StringDisplacement } from './Scroll/Modules/StringDisplacement';\r\nimport { StringParallax } from './Scroll/Modules/StringParallax';\r\nimport { StringProgress } from './Scroll/Modules/StringProgress';\r\nimport { StringScroll } from './Scroll/Types/StringScroll';\r\nimport { StringScrollDefault } from './Scroll/Types/StringScrollDefault';\r\nimport { StringScrollDisable } from './Scroll/Types/StringScrollDisable';\r\nimport { StringScrollSmooth } from './Scroll/Types/StringScrollSmooth';\r\nimport { StringTypeSettings } from './Scroll/Types/StringTypeSettings';\r\nimport { StringSplit } from './Split/Modules/StringSplit';\r\nimport { StringFPS } from './StringFPS';\r\nimport { StringModule } from './StringModule';\r\nimport { StringFPSTracker } from './Tracker/StringFPSTracker';\r\nimport { StringPositionTracker } from './Tracker/StringPositionTracker';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerp } from './Utils/StringLerp';\r\nimport { StringParser } from './Utils/StringParser';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nfunction isTouchDevice() {\r\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n}\r\n\r\nclass StringTune {\r\n private static i: StringTune;\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n private modulesUI: Array<IStringModule> = new Array<IStringModule>();\r\n private events: StringEvent = new StringEvent();\r\n private loop: StringFPS = new StringFPS();\r\n\r\n private onWheelBind: any;\r\n private onScrollBind: any;\r\n private onResizeBind: any;\r\n private onMouseMoveBind: any;\r\n\r\n private wW: number = 0;\r\n private wH: number = 0;\r\n\r\n private root: any;\r\n private window: any;\r\n\r\n private _virtualCursor: StringVirtualCursor = new StringVirtualCursor();\r\n private _lerp: StringLerp = new StringLerp();\r\n private _attribute: StringAttribute = new StringAttribute();\r\n private _boundingClientRect: StringBoundingClientRect = new StringBoundingClientRect();\r\n private _position: StringPosition = new StringPosition();\r\n\r\n private sEn: StringScroll;\r\n private sEnSmooth: StringScrollSmooth;\r\n private sEnDefault: StringScrollDefault;\r\n private sEnDisable: StringScrollDisable;\r\n\r\n private settings: StringTypeSettings;\r\n private data: StringData;\r\n\r\n protected objects: Map<string, StringObject> = new Map<string, StringObject>();\r\n\r\n protected connectQueue: Array<any> = new Array<any>();\r\n\r\n private globalId: number = 1;\r\n\r\n private _parser = new StringParser();\r\n\r\n get scrollDirection() {\r\n return this.data.sD;\r\n }\r\n\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this.data.sD = scrollDirection;\r\n\r\n this.sEn.scrollDirection = scrollDirection;\r\n this.sEnSmooth.scrollDirection = scrollDirection;\r\n this.sEnDefault.scrollDirection = scrollDirection;\r\n this.sEnDisable.scrollDirection = scrollDirection;\r\n\r\n if (scrollDirection == 'horizontal') {\r\n document.documentElement.classList.add('-horizontal');\r\n document.documentElement.classList.remove('-vertical');\r\n } else {\r\n document.documentElement.classList.add('-vertical');\r\n document.documentElement.classList.remove('-horizontal');\r\n }\r\n\r\n this.rebuild();\r\n this.initObjects();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onChangeScrollDirection();\r\n });\r\n }\r\n get speedAccelerate() {\r\n return this.settings.speedAccelerate;\r\n }\r\n set speedAccelerate(speed: number) {\r\n this.settings.speedAccelerate = speed;\r\n }\r\n get speedDecelerate() {\r\n return this.settings.speedDecelerate;\r\n }\r\n set speedDecelerate(speed: number) {\r\n this.settings.speedDecelerate = speed;\r\n }\r\n\r\n get scrollPosition() {\r\n return this.data.c;\r\n }\r\n set scrollPosition(scrollPosition: number) {\r\n this.data.c = scrollPosition;\r\n this.data.t = scrollPosition;\r\n window.scrollTo(0, this.data.c);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\r\n });\r\n }\r\n set scrollContainer(container: any) {\r\n let isUpdateEvents = this.data.sC != null;\r\n if (isUpdateEvents) {\r\n this.data.sC.removeEventListener('scroll', this.onScrollBind);\r\n this.data.sC.removeEventListener('resize', this.onResizeBind);\r\n }\r\n this.sEn.scrollContainer = container;\r\n this.sEnSmooth.scrollContainer = container;\r\n this.sEnDefault.scrollContainer = container;\r\n this.sEnDisable.scrollContainer = container;\r\n this.data.sC = container;\r\n if (isUpdateEvents) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n }\r\n this.rebuild();\r\n this.initObjects();\r\n }\r\n\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n private mMode: 'disable' | 'default' = 'default';\r\n set scrollMobileMode(mobileMode: 'disable' | 'default') {\r\n this.mMode = mobileMode;\r\n this.updateModeParams();\r\n }\r\n private dMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n set scrollDesktopMode(desktopMode: 'smooth' | 'disable' | 'default') {\r\n this.dMode = desktopMode;\r\n this.updateModeParams();\r\n }\r\n private updateModeParams() {\r\n if (this.window.innerWidth < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n switch (this.scrollMode) {\r\n case 'disable':\r\n this.data.sM = 'disable';\r\n this.sEn = this.sEnDisable;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'hidden';\r\n break;\r\n case 'default':\r\n this.data.sM = 'default';\r\n this.sEn = this.sEnDefault;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n case 'smooth':\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n default:\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n }\r\n }\r\n\r\n private constructor() {\r\n this.root = document.body;\r\n this.window = window;\r\n\r\n this.settings = new StringTypeSettings();\r\n this.data = new StringData();\r\n this.settings.speedAccelerate = 0.13;\r\n this.settings.speedDecelerate = 0.04;\r\n\r\n this.sEnSmooth = new StringScrollSmooth(document, this.settings, this.data);\r\n this.sEnDefault = new StringScrollDefault(document, this.settings, this.data);\r\n this.sEnDisable = new StringScrollDisable(document, this.settings, this.data);\r\n this.sEn = this.sEnSmooth;\r\n this.scrollContainer = window;\r\n this.data.sC = this.window;\r\n\r\n this.data.sD = 'vertical';\r\n document.documentElement.classList.add('-vertical');\r\n\r\n this.onWheelBind = this.onWheelEvent.bind(this);\r\n this.onScrollBind = this.onScrollEvent.bind(this);\r\n this.onResizeBind = this.onResizeEvent.bind(this);\r\n this.onMouseMoveBind = this.onMouseMoveEvent.bind(this);\r\n this.loop.onFrame = () => {\r\n this.onUpdateEvent();\r\n };\r\n this.rebuild();\r\n }\r\n\r\n public static getInstance(): StringTune {\r\n if (!StringTune.i) {\r\n StringTune.i = new StringTune();\r\n }\r\n return StringTune.i;\r\n }\r\n\r\n public use(objectClass: typeof StringModule, settings: any = null) {\r\n const module = new objectClass(\r\n {\r\n data: this.data,\r\n lerp: this._lerp,\r\n attribute: this._attribute,\r\n boundingClientRect: this._boundingClientRect,\r\n position: this._position,\r\n virtualCursor: this._virtualCursor,\r\n events: this.events,\r\n },\r\n settings\r\n );\r\n\r\n if (module.type == 1) {\r\n this.modules.push(module);\r\n }\r\n if (module.type == 2) {\r\n this.modulesUI.push(module);\r\n }\r\n }\r\n public start(fps: number) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n\r\n this.root.addEventListener('wheel', this.onWheelBind, { passive: false });\r\n this.root.addEventListener('mousemove', this.onMouseMoveBind);\r\n\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n Array.from(this.objects.values()).forEach((object) => {\r\n this.setupObject(object.el, object);\r\n });\r\n });\r\n resizeObserver.observe(document.body);\r\n\r\n this.loop.start(fps);\r\n document.documentElement.classList.add('-string');\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onStart();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onStart();\r\n });\r\n\r\n this.initObjects();\r\n this.initMutationObserver();\r\n }\r\n\r\n private onChangeScrollParams() {\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onChangeScrollParams();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onChangeScrollParams();\r\n });\r\n }\r\n\r\n private initObjects() {\r\n document.querySelectorAll('[string]').forEach((element) => {\r\n this.addObject(element as any);\r\n });\r\n document.querySelectorAll('[string-copy-from]').forEach((element) => {\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null && this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n }\r\n });\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n module.onScroll(this.data);\r\n module.onUpdate(this.data);\r\n });\r\n }\r\n\r\n public destroy() {\r\n this.window.removeEventListener('scroll', this.onScrollBind);\r\n this.root.removeEventListener('wheel', this.onScrollBind);\r\n this.window.removeEventListener('resize', this.onResizeBind);\r\n this.root.removeEventListener('mousemove', this.onMouseMoveBind);\r\n this.loop.stop();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n }\r\n\r\n public on(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id: string = '') {\r\n switch (key) {\r\n case 'scroll':\r\n this.events.on(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.on(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.on(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.on(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.on(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.on(`cursor`, event);\r\n break;\r\n }\r\n }\r\n public off(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id: string = '') {\r\n switch (key) {\r\n case 'scroll':\r\n this.events.off(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.off(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.off(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.off(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.off(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.off(`cursor`, event);\r\n break;\r\n }\r\n }\r\n\r\n private defaultSettings: any = {\r\n stringOffsetStart: '0%',\r\n stringOffsetEnd: '0%',\r\n\r\n stringEnterEl: 'top',\r\n stringExitEl: 'bottom',\r\n stringEnterVp: 'bottom',\r\n stringExitVp: 'top',\r\n\r\n stringInviewTop: '0%',\r\n stringInviewBottom: '0%',\r\n\r\n stringKey: '--progress',\r\n\r\n stringStrength: 0.3,\r\n stringRadius: 150,\r\n stringLerp: 0.2,\r\n stringParallaxBias: 0.0,\r\n stringParallax: 0.2,\r\n };\r\n\r\n public setupSettings(settings: any) {\r\n if (settings['string-offset-top'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-top'];\r\n }\r\n if (settings['string-offset-bottom'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-bottom'];\r\n }\r\n if (settings['string-offset-left'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-left'];\r\n }\r\n if (settings['string-offset-right'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-right'];\r\n }\r\n\r\n if (settings[`string-inview-top`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-top`];\r\n }\r\n if (settings[`string-inview-left`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-left`];\r\n }\r\n if (settings[`string-inview-bottom`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-bottom'];\r\n }\r\n if (settings[`string-inview-right`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-right'];\r\n }\r\n\r\n if (settings['string-enter-el'] != null) {\r\n this.defaultSettings.stringEnterEl = settings['string-enter-el'];\r\n }\r\n if (settings['string-enter-vp'] != null) {\r\n this.defaultSettings.stringEnterVp = settings['string-enter-vp'];\r\n }\r\n if (settings['string-exit-el'] != null) {\r\n this.defaultSettings.stringExitEl = settings['string-exit-el'];\r\n }\r\n if (settings['string-exit-vp'] != null) {\r\n this.defaultSettings.stringExitVp = settings['string-exit-vp'];\r\n }\r\n if (settings['string-key'] != null) {\r\n this.defaultSettings.stringKey = settings['string-key'];\r\n }\r\n\r\n if (settings['string-strength'] != null) {\r\n this.defaultSettings.stringStrength = settings['string-strength'];\r\n }\r\n if (settings['string-radius'] != null) {\r\n this.defaultSettings.stringRadius = settings['string-radius'];\r\n }\r\n if (settings['string-lerp'] != null) {\r\n this.defaultSettings.stringLerp = settings['string-lerp'];\r\n }\r\n\r\n if (settings['string-parallax-bias'] != null) {\r\n this.defaultSettings.stringParallaxBias = settings['string-parallax-bias'];\r\n }\r\n if (settings['string-parallax'] != null) {\r\n this.defaultSettings.stringParallax = settings['string-parallax'];\r\n }\r\n }\r\n\r\n protected setupObject(el: HTMLElement, object: StringObject) {\r\n object.showObserver?.disconnect();\r\n object.progressObserver?.disconnect();\r\n object.inviewObserver?.disconnect();\r\n\r\n let r = this._boundingClientRect.process(el);\r\n let rW = r.width / this.data.scsW;\r\n let rH = r.height / this.data.scsH;\r\n\r\n let startElementPosition = this._attribute.process(el, `string-enter-el`) || this.defaultSettings.stringEnterEl;\r\n let endElementPosition = this._attribute.process(el, `string-exit-el`) || this.defaultSettings.stringExitEl;\r\n \r\n let startSourcePosition = this._attribute.process(el, `string-enter-vp`) || this.defaultSettings.stringEnterVp;\r\n let endSourcePosition = this._attribute.process(el, `string-exit-vp`) || this.defaultSettings.stringExitVp;\r\n\r\n object.inviewTop = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview-top`,\r\n this._attribute.process(el, `string-inview-left`, this.defaultSettings.stringInviewTop)\r\n ),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n object.inviewBottom = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview`,this._attribute.process(\r\n el,\r\n `string-inview-bottom`,\r\n this._attribute.process(el, `string-inview-right`, this.defaultSettings.stringInviewBottom)\r\n )),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n //console.log(r);\r\n\r\n object.selfDisable = this._attribute.process(el, `string-self-disable`) == null ? false : true;\r\n object.abs = this._attribute.process(el, `string-abs`) == null ? false : true;\r\n\r\n let targetQuery = this._attribute.process(el, `string-cursor-target`);\r\n\r\n if (targetQuery != null) {\r\n object.cursorTarget = document.querySelector(`[string-cursor-content=\"${targetQuery}\"]`);\r\n }\r\n\r\n object.id = this._attribute.process(el, `string-id`, `string-${this.globalId}`);\r\n object.key = this._attribute.process(el, `string-key`, this.defaultSettings.stringKey);\r\n\r\n object.strength = this._attribute.process(el, 'string-strength', this.defaultSettings.stringStrength);\r\n object.radius = this._attribute.process(el, 'string-radius', this.defaultSettings.stringRadius);\r\n object.lerp = this._attribute.process(el, 'string-lerp', this.defaultSettings.stringLerp);\r\n\r\n let parallaxPosition = this._attribute.process(el, 'string-parallax-bias', this.defaultSettings.stringParallaxBias);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n\r\n el.setAttribute(`string-id`, object.id);\r\n if (this.data.sD == 'vertical') {\r\n object.size = rH;\r\n } else {\r\n object.size = rW;\r\n }\r\n\r\n object.oStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n object.oEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let observerStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n let observerEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let stringModuleKeys = this._attribute.process(object.el, 'string', '').split('|');\r\n if (stringModuleKeys.includes('parallax')) {\r\n observerStart = 0;\r\n observerEnd = 0;\r\n object.oStart = 0;\r\n object.oEnd = 0;\r\n }\r\n object.factor = Math.min(1, this._attribute.process(el, `string-parallax`, this.defaultSettings.stringParallax));\r\n\r\n object.oStart += object.factor * this.data.wS * 0.5;\r\n object.oEnd += object.factor * this.data.wS * 0.5;\r\n\r\n object.repeat = this._attribute.process(el, `string-repeat`) == null ? false : true;\r\n object.sElPos = startElementPosition;\r\n object.sScrPos = startSourcePosition;\r\n object.eElPos = endElementPosition;\r\n object.eScrPos = endSourcePosition;\r\n\r\n object.halfWidth = rW / 2;\r\n object.halfHeight = rH / 2;\r\n\r\n let windowSize = this.data.wS;\r\n if (this.data.sD == 'vertical') {\r\n let startPos = this._position.process(el, this.data.sC).top / this.data.scsH;\r\n object.start = startPos;\r\n object.end = startPos + rH;\r\n } else {\r\n let startPos = this._position.process(el, this.data.sC).left / this.data.scsW;\r\n object.start = startPos;\r\n object.end = startPos + rW;\r\n }\r\n object.calculatePositions(windowSize);\r\n\r\n let connectItems = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id == object.id;\r\n });\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id != object.id;\r\n });\r\n\r\n connectItems.forEach((connectItem) => {\r\n object.connects.push(connectItem.element);\r\n });\r\n\r\n let callbackProgress = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n if (object.active == false) {\r\n this.events.emit(`activate_object_${object.id}`, true);\r\n object.enter();\r\n }\r\n } else {\r\n if (object.active == true) {\r\n this.events.emit(`activate_object_${object.id}`, false);\r\n object.leave();\r\n }\r\n }\r\n });\r\n };\r\n let callbackInview = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`inview_${object.id}`, true);\r\n object.show();\r\n } else {\r\n this.events.emit(`inview_${object.id}`, false);\r\n object.hide();\r\n }\r\n });\r\n };\r\n let callbackIntersection = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`intersection_${object.id}`, true);\r\n } else {\r\n this.events.emit(`intersection_${object.id}`, false);\r\n }\r\n });\r\n };\r\n\r\n let optionsProgress: any;\r\n let optionsInview: any;\r\n if (this.data.sD == 'vertical') {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `${observerStart + this.data.wS}px 0px ${observerEnd + this.data.wS}px 0px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `${observerStart + object.inviewTop}px 0px ${observerEnd + object.inviewBottom}px 0px`,\r\n threshold: 0.001,\r\n };\r\n } else {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `0px ${observerStart + this.data.wS}px 0px ${observerEnd + this.data.wS}px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `0px ${observerStart + object.inviewTop}px 0px ${observerEnd + object.inviewBottom}px`,\r\n threshold: 0.001,\r\n };\r\n }\r\n\r\n let optionsIntersection = {\r\n root: null,\r\n rootMargin: `0px 0px 0px 0px`,\r\n threshold: 0.001,\r\n };\r\n\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obIntersection = new IntersectionObserver(callbackIntersection, optionsIntersection);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n obProgress.observe(el);\r\n obIntersection.observe(el);\r\n obInview.observe(el);\r\n\r\n object.showObserver = obIntersection;\r\n object.progressObserver = obProgress;\r\n object.inviewObserver = obInview;\r\n }\r\n\r\n addObject(el: HTMLElement) {\r\n let isInit = this._attribute.process(el, 'string-inited');\r\n let object: any;\r\n if (isInit == null) {\r\n object = new StringObject(el);\r\n } else {\r\n if (this.objects.has(this._attribute.process(el, 'string-id'))) {\r\n object = this.objects.get(this._attribute.process(el, 'string-id'));\r\n } else {\r\n object = new StringObject(el);\r\n }\r\n }\r\n el.setAttribute(`string-inited`, '');\r\n this.setupObject(el, object);\r\n this.modules.forEach((module: IStringModule) => {\r\n if (module.tryConnect(object)) {\r\n module.connect(object);\r\n }\r\n });\r\n this.objects.set(object.id, object);\r\n this.globalId++;\r\n }\r\n\r\n public removeObject(id: string) {\r\n let removedObject = this.objects.get(id);\r\n if (removedObject?.showObserver != null) {\r\n removedObject?.showObserver.disconnect();\r\n }\r\n if (removedObject?.progressObserver != null) {\r\n removedObject?.progressObserver.disconnect();\r\n }\r\n if (removedObject?.inviewObserver != null) {\r\n removedObject?.inviewObserver.disconnect();\r\n }\r\n this.objects.delete(id);\r\n removedObject?.el.removeAttribute(`string-inited`);\r\n removedObject?.leave();\r\n removedObject = undefined;\r\n }\r\n\r\n private onMouseMoveEvent(e: MouseEvent) {\r\n this._virtualCursor.onMouseMove(e);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onMouseMove(e);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onMouseMove(e);\r\n });\r\n }\r\n private onWheelEvent(e: WheelEvent) {\r\n this.sEn.onWheel(e);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onWheel(e);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onWheel(e);\r\n });\r\n }\r\n private onScrollEvent(e: Event) {\r\n this.sEn.onScroll(e);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\r\n });\r\n this.events.emit(`lerp`, this.data.v);\r\n this.events.emit(`scroll`, this.data.c);\r\n }\r\n private onUpdateEvent() {\r\n this._virtualCursor.onUpdate();\r\n this.sEn.onUpdate();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onUpdate(this.data);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onUpdate(this.data);\r\n });\r\n }\r\n private onResizeEvent() {\r\n try {\r\n let rect = this.sEn.scrollContainer.getBoundingClientRect();\r\n this.wW = rect.width;\r\n this.wH = rect.height;\r\n } catch (error) {\r\n this.wW = this.sEn.scrollContainer.innerWidth;\r\n this.wH = this.sEn.scrollContainer.innerHeight;\r\n }\r\n if (\r\n (this.data.sD == 'vertical' && this.wW != this.data.wS) ||\r\n this.window.innerWidth > 1024 ||\r\n (this.data.sD == 'horizontal' && this.wW != this.data.wS) ||\r\n this.window.innerWidth > 1024\r\n ) {\r\n this.rebuild();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n }\r\n }\r\n private initMutationObserver() {\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.type === 'childList') {\r\n if (mutation.addedNodes.length > 0) {\r\n mutation.addedNodes.forEach((addedNode) => {\r\n if (addedNode.nodeType === Node.ELEMENT_NODE) {\r\n (addedNode as Element).querySelectorAll('[string]:not([string-inited])').forEach((element) => {\r\n this.addObject(element as any);\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n if (this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n } else {\r\n this.connectQueue.push({\r\n id: connectTargetId,\r\n element,\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (mutation.removedNodes.length > 0) {\r\n mutation.removedNodes.forEach((removedNode) => {\r\n if (removedNode.nodeType === Node.ELEMENT_NODE) {\r\n (removedNode as Element).querySelectorAll('[string]').forEach((element) => {\r\n let removeId = element.getAttribute('string-id');\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id != connectTargetId;\r\n });\r\n }\r\n if (removeId != null) {\r\n this.removeObject(removeId);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0) {\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onRebuild();\r\n });\r\n }\r\n }\r\n });\r\n });\r\n const config = {\r\n attributes: false,\r\n childList: true,\r\n subtree: true,\r\n };\r\n observer.observe(document.body, config);\r\n }\r\n private rebuild() {\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n\r\n try {\r\n let transformContainer: any = parseTransform(this.data.sC);\r\n this.data.scsW = transformContainer[0];\r\n this.data.scsH = transformContainer[3];\r\n } catch (error) {\r\n this.data.scsW = 1;\r\n this.data.scsH = 1;\r\n }\r\n\r\n try {\r\n let rect = this.data.sC.getBoundingClientRect();\r\n this.wW = rect.width / this.data.scsW;\r\n this.wH = rect.height / this.data.scsH;\r\n } catch (error) {\r\n this.wW = this.data.sC.innerWidth;\r\n this.wH = this.data.sC.innerHeight;\r\n }\r\n\r\n if (this.wW < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n\r\n let b = document.body,\r\n h = document.documentElement;\r\n\r\n this.data.psW = this.data.sC.scrollWidth;\r\n this.data.psH = this.data.sC.scrollHeight;\r\n if (this.data.psW == undefined) {\r\n this.data.psW = Math.max(b.scrollWidth, b.offsetWidth, h.clientWidth, h.scrollWidth, h.offsetWidth);\r\n }\r\n if (this.data.psH == undefined) {\r\n this.data.psH = Math.max(b.scrollHeight, b.offsetHeight, h.clientHeight, h.scrollHeight, h.offsetHeight);\r\n }\r\n\r\n if (this.data.sD == 'vertical') {\r\n this.data.bS = this.data.psH - this.wH;\r\n this.data.wS = this.wH;\r\n } else {\r\n this.data.bS = this.data.psW - this.wW;\r\n this.data.wS = this.wW;\r\n }\r\n\r\n this.data.hnwS = this.data.wS * -0.5;\r\n this.updateModeParams();\r\n }\r\n}\r\n\r\n\r\n \r\nexport {\r\n StringTune as default,\r\n StringCursor, StringDisplacement, StringFPSTracker, StringLazy, StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, StringResponsive, StringScrollbar, StringSplit, StringTune as StringTune, StringVideoAutoplay\r\n};\r\n\r\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","StringModule","type","_type","constructor","visitor","settings","objectsMap","Map","objects","Array","htmlKey","data","lerp","attribute","boundingClientRect","position","virtualCursor","events","destructor","onChangeScrollParams","tryConnect","object","stringModuleKeys","process","el","split","forEach","connect","onConnect","addObject","id","set","from","map","name","removeObject","delete","onStart","onUpdate","onResize","onRebuild","onScroll","onMouseMove","e","onWheel","onChangeDevice","onChangeScrollDirection","onMutationObserver","added","removed","StringLazy","super","document","querySelectorAll","element","getImageSize","getAttribute","classList","add","src","addEventListener","url","Promise","resolve","reject","xhr","XMLHttpRequest","open","responseType","onload","status","buffer","response","blob","Blob","img","Image","style","aspectRatio","width","height","URL","revokeObjectURL","onerror","Error","createObjectURL","setRequestHeader","send","StringLoading","loadingTimeout","timeout","setTimeout","documentElement","StringVideoAutoplay","videoElement","videoSrc","started","tagName","toLowerCase","setAttribute","muted","tryPlay","once","load","console","warn","play","catch","err","then","StringCursor","lerpFactor","oldX","oldY","enterObjectsMap","enterObjects","cursor","querySelector","smoothX","smoothY","cursorData","lerpX","lerpY","x","y","emit","setProperty","isMouseMove","rect","getBoundingClientRect","offsetX","calculateOffset","left","offsetY","top","mouseX","mouseY","setMouseCoordinates","halfWidth","halfHeight","onMouseEnterEventBind","onMouseMoveEventBind","onMouseLeaveEventBind","cursorTarget","event","removeEventListener","remove","onEnter","onLeave","selfDisable","toFixed","connects","mousePos","size","StringMagnetic","strength","radius","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","Math","sqrt","magneticTargetX","magneticTargetY","isMagneting","magneticX","magneticY","toString","StringLerp","start","end","amt","StringVirtualCursor","_lF","_x","_y","_lerpX","_lerpY","targetX","targetY","floor","tS","bS","lS","rS","StringObject","oStart","oEnd","startPos","endPos","differencePos","factor","inviewTop","inviewBottom","sElPos","sScrPos","eElPos","eScrPos","parallaxPositionStart","parallaxPositionEnd","showObserver","progressObserver","inviewObserver","repeat","active","abs","modules","enter","leave","show","hide","push","calculatePositions","windowSize","DeviceType","StringResponsiveQueryDevice","config","min","undefined","max","enable","setEnable","setRange","mediaQuery","query","StringResponsive","queries","Mobile","Tablet","Laptop","Desktop","matchMedias","window","matchMedia","mobile","tablet","laptop","desktop","updateElements","isMobileMedia","matches","isTabletMedia","isLaptopMedia","isDesktopMedia","showElement","hasAttribute","display","StringScrollbarHorizontal","scrollbar","thumb","isDragging","startY","startScrollPosition","contentSize","psH","visibleSize","wS","thumbSize","updateThumb","contentHeight","visibleHeight","c","mouseDownEvent","mouseMoveEvent","deltaY","newScrollPosition","t","scrollTo","StringScrollbarVertical","startCoordinate","psW","contentWidth","visibleWidth","deltaX","StringScrollbar","scrollMode","mouseUpEventBind","mouseUpEvent","bind","mouseDownEventBind","mouseMoveEventBind","createScrollbar","addCustomStyles","showScrollbar","hideScrollbar","scrollbarState","sM","sD","scrollbarStateVertical","scrollbarStateHorizontal","createElement","textContent","head","appendChild","body","userSelect","scrollTimeout","clearTimeout","StringDisplacement","oldLerp","v","StringParallax","setupParallax","progress","transformCompute","transform","onScrollDesktopEvent","onScrollMobileEvent","onScrollEvent","parallaxPosition","innerWidth","StringProgress","setUpObject","currentTop","StringScroll","isProg","isParallaxEnabled","vT","onCalcUpdate","scrollContainer","_scrollDirection","d","scrollDirection","StringScrollDefault","animateC","scrollTop","StringScrollDisable","preventDefault","StringScrollSmooth","isScroll","speed","newC","ceil","StringTypeSettings","sC","sA","speedAccelerate","speedDecelerate","updateScrollParams","StringSplit","splitOptions","parseSplitOptions","innerHTML","html","contains","attributeValue","options","line","word","char","charLine","charWord","wordLine","part","match","prefix","option","params","parseParam","result","align","param","startsWith","random","parseInt","includes","elementRoot","text","length","decodeHtmlEntity","words","globalCharIndex","globalWordIndex","totalChars","replace","tempSpan","compStyles","getComputedStyle","fontFamily","fontSize","letterSpacing","lineHeight","fontWeight","virtualLines","virtualLine","currentLineWidth","wordIndex","wordWidth","offsetWidth","virtualWordSpan","chars","charIndex","virtualCharSpan","hasLineOptions","addedWordsCount","i","appendVirtualLineToDOM","wordSpan","charSpan","applyOptions","removeChild","lineIndex","totalWords","lineSpan","lineCharIndex","totalLineChars","span","optionArray","globalIndex","localIndex","parentLength","optionIndex","index","calculateIndex","variableName","generateVariableName","String","createSpaceSpan","spaceSpan","str","StringFPS","isAnimationStarted","requestAnimationId","onFrame","fps","fpsInterval","Date","now","animate","stop","cancelAnimationFrame","requestAnimationFrame","elapsed","StringFPSTracker","callCount","createDisplayElement","displayElement","bottom","right","backgroundColor","border","zIndex","intervalId","setInterval","clearInterval","StringPositionTracker","dirSymbol","StringAttribute","n","StringBoundingClientRect","StringData","cF","hnwS","scsW","scsH","StringEvent","eventsByKey","on","has","updateAllEvents","off","ea","filter","h","all","values","listOfEvents","StringParser","parseSingle","wH","baseRem","pV","isNegative","slice","offsetHeight","endsWith","parseFloat","StringPosition","container","br","error","er","transformArr","parseTransform","det","nullifyTransforms","isTouchDevice","navigator","maxTouchPoints","StringTune","sEn","sEnSmooth","sEnDefault","sEnDisable","rebuild","initObjects","scrollPosition","isUpdateEvents","onScrollBind","onResizeBind","scrollMobileMode","mobileMode","mMode","updateModeParams","scrollDesktopMode","desktopMode","dMode","overflow","modulesUI","loop","wW","_virtualCursor","_lerp","_attribute","_boundingClientRect","_position","connectQueue","globalId","_parser","defaultSettings","stringOffsetStart","stringOffsetEnd","stringEnterEl","stringExitEl","stringEnterVp","stringExitVp","stringInviewTop","stringInviewBottom","stringKey","stringStrength","stringRadius","stringLerp","stringParallaxBias","stringParallax","onWheelBind","onWheelEvent","onResizeEvent","onMouseMoveBind","onMouseMoveEvent","onUpdateEvent","getInstance","use","objectClass","passive","ResizeObserver","entries","setupObject","observe","initMutationObserver","connectTargetId","connectTargetObject","destroy","setupSettings","disconnect","r","rW","rH","startElementPosition","endElementPosition","startSourcePosition","endSourcePosition","targetQuery","observerStart","observerEnd","optionsProgress","optionsInview","connectItems","connectQueueItem","connectItem","rootMargin","threshold","obProgress","IntersectionObserver","es","isIntersecting","obIntersection","obInview","isInit","removedObject","removeAttribute","innerHeight","MutationObserver","mutations","mutation","addedNodes","addedNode","nodeType","Node","ELEMENT_NODE","removedNodes","removedNode","removeId","attributes","childList","subtree","transformContainer","b","scrollWidth","scrollHeight","clientWidth","clientHeight"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiddle-digital/string-tune",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "description": "StringTune is a cutting-edge JavaScript library designed to deliver high-performance, modular web effects. Whether you're looking to add smooth parallax scrolling, dynamic cursor interactions, progress tracking, or autoplay videos, StringTune empowers developers with a powerful, attribute-driven approach. It simplifies the creation of visually captivating websites while remaining intuitive for both beginner and advanced developers.",
5
5
  "keywords": [
6
6
  "scroll",