@fiddle-digital/string-tune 0.0.23 → 0.0.24

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.
@@ -3,8 +3,12 @@ import { StringModule } from '../../StringModule';
3
3
  import { StringData } from '../../Utils/StringData';
4
4
  export declare class StringParallax extends StringModule {
5
5
  private setupParallax;
6
+ private onScrollDesktopEvent;
7
+ private onScrollMobileEvent;
8
+ private onScrollEvent;
6
9
  constructor(visitor: any);
7
10
  onConnect(object: StringObject): void;
8
11
  onScroll(data: StringData): void;
9
12
  onChangeScrollDirection(): void;
13
+ onResize(): void;
10
14
  }
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(t,s){"object"==typeof exports&&"object"==typeof module?module.exports=s():"function"==typeof define&&define.amd?define([],s):"object"==typeof exports?exports.StringTune=s():t.StringTune=s()}(this,(()=>(()=>{"use strict";var t={d:(s,e)=>{for(var i in e)t.o(e,i)&&!t.o(s,i)&&Object.defineProperty(s,i,{enumerable:!0,get:e[i]})},o:(t,s)=>Object.prototype.hasOwnProperty.call(t,s),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},s={};t.r(s),t.d(s,{StringCursor:()=>o,StringDisplacement:()=>w,StringFPSTracker:()=>O,StringLazy:()=>i,StringLoading:()=>r,StringMagnetic:()=>a,StringParallax:()=>S,StringPositionTracker:()=>A,StringProgress:()=>x,StringResponsive:()=>v,StringScrollbar:()=>y,StringSplit:()=>T,StringTune:()=>R,StringVideoAutoplay:()=>n,default:()=>R});class e{get type(){return this._type}constructor(t,s=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=s}destructor(){}onChangeScrollParams(){}tryConnect(t){let s=this.attribute.process(t.el,"string","").split("|"),e=!1;return s.forEach((t=>{t==this.htmlKey&&(e=!0)})),e}connect(t){t.connect(this),this.onConnect(t)}addObject(t,s){this.objectsMap.set(t,s),this.objects=Array.from(this.objectsMap).map((([t,s])=>s))}removeObject(t){this.objectsMap.delete(t),this.objects=Array.from(this.objectsMap).map((([t,s])=>s))}onStart(){}onUpdate(t){}onResize(){}onConnect(t){}onRebuild(){}onScroll(t){}onMouseMove(t){}onWheel(t){}onChangeDevice(){}onChangeScrollDirection(){}onMutationObserver(t,s){}}class i extends e{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,s){return new Promise(((e,i)=>{const r=new XMLHttpRequest;r.open("GET",s,!0),r.responseType="arraybuffer",r.onload=()=>{if(206===r.status||200===r.status){const s=r.response,n=new Blob([s]),o=new Image;o.onload=()=>{t.style.aspectRatio=`${o.width} / ${o.height}`,e({width:o.width,height:o.height}),URL.revokeObjectURL(o.src)},o.onerror=()=>{i(new Error("Failed to load image"))},o.src=URL.createObjectURL(n)}else i(new Error("Failed to load image"))},r.onerror=()=>{i(new Error("Network error"))},r.setRequestHeader("Range","bytes=0-"),r.send()}))}}class r extends e{constructor(t,s=null){super(t),this.loadingTimeout=0,this._type=2,null!=s&&null!=s.timeout&&(this.loadingTimeout=s.timeout)}onStart(){setTimeout((()=>{document.documentElement.classList.add("-loaded")}),this.loadingTimeout)}}class n extends e{constructor(t){super(t),this.htmlKey="autoplay"}onConnect(t){const s=t.el,e=this.attribute.process(s,"string-src",""),i=null!=this.attribute.process(s,"string-started",null);"video"===s.tagName.toLowerCase()&&e&&0==i?(s.setAttribute("muted","muted"),s.setAttribute("playsinline",""),s.setAttribute("loop",""),s.setAttribute("autoplay",""),s.src=e,s.muted=!0,s.addEventListener("canplaythrough",(()=>{0==(null!=this.attribute.process(s,"string-started",null))&&this.tryPlay(t,s)}),{once:!0}),s.load()):console.warn("StringVideoAutoplay: Element is not a <video> tag or string-src is missing.",t.el)}tryPlay(t,s){s.play().catch((s=>{console.warn("Autoplay failed:",s),t.started=!1})).then((()=>{t.started=!0,s.setAttribute("string-started","")}))}}class o extends e{constructor(t,s=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 s=t.el.getBoundingClientRect();const e=this.calculateOffset("center",this.virtualCursor.x-s.left,s.width),i=this.calculateOffset("center",this.virtualCursor.y-s.top,s.height);t.mouseX+=this.lerp.process(t.mouseX,e,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 s=t.el.getBoundingClientRect();const e=this.calculateOffset("center",t.halfWidth,s.width),i=this.calculateOffset("center",t.halfHeight,s.height);t.mouseX+=this.lerp.process(t.mouseX,e,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}}))}onConnect(t){let s=t.el;null!=this.settings&&null!=this.settings["string-lerp"]&&(t.lerp=this.settings["string-lerp"]);let e=()=>{s.addEventListener("mousemove",i),s.addEventListener("mouseleave",r),t.isMouseMove=!0,null!=t.cursorTarget&&t.cursorTarget.classList.add("-show")},i=t=>{},r=()=>{s.removeEventListener("mousemove",i),s.removeEventListener("mouseleave",r),t.isMouseMove=!1,null!=t.cursorTarget&&t.cursorTarget.classList.remove("-show")};t.onEnter=()=>{s.addEventListener("mouseenter",e)},t.onLeave=()=>{s.removeEventListener("mouseenter",e),s.removeEventListener("mousemove",i),s.removeEventListener("mouseleave",r)}}setMouseCoordinates(t,s,e){0==t.selfDisable&&(t.el.style.setProperty("--mouse-x",s.toFixed(2)),t.el.style.setProperty("--mouse-y",e.toFixed(2))),t.connects.forEach((t=>{t.style.setProperty("--mouse-x",s.toFixed(2)),t.style.setProperty("--mouse-y",e.toFixed(2))}))}calculateOffset(t,s,e){switch(t){case"start":return s/e;case"end":return(s-e)/e;default:return(s-e/2)/(e/2)}}}class a extends e{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((s=>{const e=s.el.getBoundingClientRect(),i=e.left+s.halfWidth,r=e.top+s.halfHeight,n=t.clientX-i,o=t.clientY-r,a=Math.sqrt(n**2+o**2);a<s.radius?(s.magneticTargetX=n*s.strength*((s.radius-a)/s.radius),s.magneticTargetY=o*s.strength*((s.radius-a)/s.radius),s.isMagneting=!0):(s.magneticTargetX=0,s.magneticTargetY=0)}))}onUpdate(t){this.objects.forEach((t=>{if(t.isMagneting){let s=this.lerp.process(t.magneticX,t.magneticTargetX,t.lerp),e=this.lerp.process(t.magneticY,t.magneticTargetY,t.lerp);s>-.01&&s<.01&&(s=0,t.magneticX=t.magneticTargetX),e>-.01&&e<.01&&(e=0,t.magneticY=t.magneticTargetY),t.magneticX+=s,t.magneticY+=e,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,s,e){return e*(s-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 f{constructor(t){var s;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===(s=null==t?void 0:t.enable)||void 0===s||s}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 e{constructor(t){super(t),this.queries={[g.Mobile]:new f({max:359}),[g.Tablet]:new f({min:360,max:1079}),[g.Laptop]:new f({min:1080,max:1365}),[g.Desktop]:new f({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}onStart(){this.updateElements()}onResize(){this.updateElements()}updateElements(){const t=this.matchMedias[g.Mobile].matches,s=this.matchMedias[g.Tablet].matches,e=this.matchMedias[g.Laptop].matches,i=this.matchMedias[g.Desktop].matches;document.querySelectorAll("[string-mobile], [string-tablet], [string-laptop], [string-desktop]").forEach((r=>{let n=!1;r.hasAttribute("string-mobile")&&t&&(n=!0),r.hasAttribute("string-tablet")&&s&&(n=!0),r.hasAttribute("string-laptop")&&e&&(n=!0),r.hasAttribute("string-desktop")&&i&&(n=!0),n?r.classList.add("-show"):r.classList.remove("-show")}))}}class b{constructor(t,s,e){this.isDragging=!1,this.startY=0,this.startScrollPosition=0,this.data=t,this.scrollbar=s,this.thumb=e}onResize(){const t=this.data.psH,s=this.data.wS,e=s/t*s;this.thumb.style.setProperty("--size",e+"px"),t<=s?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psH,s=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*s+"px")}mouseDownEvent(t){this.startY=t.clientY,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const s=t.clientY-this.startY,e=this.startScrollPosition+s/this.data.wS*this.data.psH;this.data.c=e,this.data.t=e,window.scrollTo(0,e),this.updateThumb()}}class E{constructor(t,s,e){this.isDragging=!1,this.startCoordinate=0,this.startScrollPosition=0,this.data=t,this.scrollbar=s,this.thumb=e}onResize(){const t=this.data.psW,s=this.data.wS,e=s/t*s;this.thumb.style.setProperty("--size",e+"px"),t<=s?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psW,s=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*s+"px")}mouseDownEvent(t){this.startCoordinate=t.clientX,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const s=t.clientX-this.startCoordinate,e=this.startScrollPosition+s/this.data.wS*this.data.psW;this.data.c=e,this.data.t=e,window.scrollTo(0,e),this.updateThumb()}}class y extends e{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 b(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 e{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 e{constructor(t){super(t),this.setupParallax=(t,s)=>{let e=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))},this.htmlKey="parallax"}onConnect(t){if(null!=this.settings){if(null!=this.settings["string-parallax-bias"]){let s=this.attribute.process(t.el,"string-parallax-bias",this.settings["string-parallax-bias"]);t.parallaxPositionStart=.5*s-.5,t.parallaxPositionEnd=.5+.5*(1-s)}null!=this.settings["string-parallax"]&&(t.factor=this.settings["string-parallax"])}}onScroll(t){this.objects.forEach((t=>{let s=Math.min(1,Math.max(0,(this.data.c-t.startPos)/t.differencePos));t.el.style.setProperty(t.key,s.toString()),this.setupParallax(t,s)}))}onChangeScrollDirection(){"vertical"==this.data.sD?this.setupParallax=(t,s)=>{let e=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))}:this.setupParallax=(t,s)=>{let e=`translate3d(${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))}}}class x extends e{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,s){let e=Math.min(1,Math.max(0,(s-t.startPos)/t.differencePos));this.events.emit(`progress_${t.id}`,e),t.el.style.setProperty(t.key,e.toString()),t.connects.forEach((s=>{s.style.setProperty(t.key,e.toString())}))}}class M{constructor(t,s,e){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=s,this.data=e,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,s,e){super(t,s,e),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,s,e){super(t,s,e),this.name="disable"}onUpdate(){}onWheel(t){t.preventDefault()}onScroll(t){t.preventDefault()}}class L extends M{constructor(t,s,e){super(t,s,e),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 T extends e{constructor(t){super(t),this.htmlKey="split"}onStart(){}onResize(){document.querySelectorAll('[string="split"].-splited').forEach((t=>{const s=this.parseSplitOptions(t.getAttribute("string-split"));t.innerHTML=this.split(s,t).html}))}onConnect(t){let s=t.el;if(!s.classList.contains("-splited")){s.classList.add("-splited"),s.setAttribute("string-split-original",s.innerHTML);const t=this.parseSplitOptions(s.getAttribute("string-split"));s.innerHTML=this.split(t,s).html}}parseSplitOptions(t){const s={line:[],word:[],char:[],charLine:[],charWord:[],wordLine:[]};return t&&t.split("|").forEach((t=>{const e=t.match(/^(\w+-)?(\w+)(\[(.*?)\])?$/);if(e){const t=e[1]||"",i=e[2],r=e[4]?e[4].split(","):[];switch(t+i){case"char-line":s.charLine.push(this.parseParam(r));break;case"char-word":s.charWord.push(this.parseParam(r));break;case"word-line":s.wordLine.push(this.parseParam(r));break;case"line":s.line.push(this.parseParam(r));break;case"word":s.word.push(this.parseParam(r));break;case"char":s.char.push(this.parseParam(r))}}})),s}parseParam(t){const s={align:"start"};return t.forEach((t=>{if("abs"===t)s.abs=!0;else if(t.startsWith("random")){const e=t.match(/random\((\d+),(\d+)\)/);e?(s.random={min:parseInt(e[1]),max:parseInt(e[2])},s.align="random"):s.align="random"}else["start","center","end"].includes(t)?s.align=t:s.align="start"})),s}split(t,s){let e=s.getAttribute("string-split-original");if(0===e.length)return"";e=this.decodeHtmlEntity(e);const i=document.createElement("span"),r=e.split(/\s+/);let n=0,o=0;const a=e.replace(/\s/g,"").length,l=document.createElement("span"),h=window.getComputedStyle(s);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;r.forEach(((t,e)=>{l.textContent=t,t.length>0&&(l.textContent+=" ");const i=l.offsetWidth,r={text:t,width:i,chars:new Array};Array.from(t).forEach(((t,s)=>{const e={text:t};r.chars.push(e)})),u+i>s.offsetWidth&&(c.push(d),d=[],u=0,n+=d.length),d.push(r),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 s=0;s<c.length;s++)this.appendVirtualLineToDOM(s,c.length,r.length,i,c[s],t,n,a,m),m+=c[s].length;else for(let s=0;s<c.length;s++)c[s].forEach(((s,e)=>{if(s.chars.length>0){const l=document.createElement("span");l.classList.add("-s-word"),s.chars.forEach(((e,i)=>{const r=document.createElement("span");r.classList.add("-s-char"),r.textContent=e.text,this.applyOptions(r,t.char,n,"char",i,a),this.applyOptions(r,t.charWord,i,"char-word",i,s.text.length),l.appendChild(r),n++})),this.applyOptions(l,t.word,o,"word",e,r.length),s.chars.length>0&&(l.innerHTML+=" "),i.appendChild(l),o++}}));return document.body.removeChild(l),{html:i.innerHTML}}appendVirtualLineToDOM(t,s,e,i,r,n,o,a,l){const h=document.createElement("span");h.classList.add("-s-line"),this.applyOptions(h,n.line,t,"line",0,s);let c=0,d=0,u=0;r.forEach(((t,s)=>{u+=t.text.length})),r.forEach(((t,s)=>{if(t.chars.length>0){const i=document.createElement("span");i.classList.add("-s-word"),t.chars.forEach(((s,e)=>{const r=document.createElement("span");r.classList.add("-s-char"),r.textContent=s.text,this.applyOptions(r,n.char,o,"char",e,a),this.applyOptions(r,n.charLine,c,"char-line",e,u),this.applyOptions(r,n.charWord,e,"char-word",e,t.text.length),i.appendChild(r),o++,c++})),this.applyOptions(i,n.word,l+d,"word",l+d,e-1),this.applyOptions(i,n.wordLine,s,"word-line",s,r.length),s<r.length-1&&(i.innerHTML+=" "),h.appendChild(i),d++}})),i.appendChild(h)}applyOptions(t,s,e,i,r,n){s&&s.forEach(((s,o)=>{let a=this.calculateIndex(s,e,r,n);const l=this.generateVariableName(i,s,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,s,e,i){let r=s;if("random"===t.align){void 0===t.random&&(t.random={min:0,max:i});const s=t.random.min||0,e=t.random.max||i;r=Math.floor(Math.random()*(e-s+1))+s}return"end"===t.align?r=i-r-1:"center"===t.align&&(r-=Math.floor(i/2)),t.abs&&(r=Math.abs(r)),r}generateVariableName(t,s,e){let i=`--${t}`;return s.align&&(i+=`-${s.align}`),i}}class D{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 e{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 e{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 s="";t.c<t.t&&(s="↓"),t.c>t.t&&(s="↑"),this.displayElement.setAttribute("direction",s),this.displayElement.setAttribute("value",`${this.data.c}`)}onUpdate(t){this.callCount++}destructor(){document.body.removeChild(this.displayElement)}}class W{process(t,s,e=null){return null==t.getAttribute(s)?e:t.getAttribute(s)}}class j{process(t){return t.getBoundingClientRect()}}class B{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,s){var e;0==this.eventsByKey.has(t)&&this.eventsByKey.set(t,[]),null===(e=this.eventsByKey.get(t))||void 0===e||e.push(s),this.updateAllEvents()}has(t){return this.eventsByKey.has(t)}emit(t,s){var e;this.eventsByKey.has(t)&&(null===(e=this.eventsByKey.get(t))||void 0===e||e.forEach((t=>{t(s)})))}off(t,s){let e=this.eventsByKey.get(t);null!=e&&this.eventsByKey.set(t,e.filter((t=>t!==s))),this.updateAllEvents()}all(t){this.events.forEach((s=>{s(t)}))}updateAllEvents(){Array.from(this.eventsByKey.values()).forEach((t=>{t.forEach((t=>{this.events.push(t)}))}))}}class H{parseSingle(t,s,e,i){let r,n=t.startsWith("-");return n&&(t=t.slice(1)),"selfHeight"===t?r=s.offsetHeight:t.endsWith("px")?r=parseFloat(t):t.endsWith("%")?r=parseFloat(t)*e/100:t.endsWith("rem")&&(r=parseFloat(t)*i),n?-r:r}}class k{process(t,s=document.body){let e;try{e=s.getBoundingClientRect()}catch(t){e=document.body.getBoundingClientRect()}let i=function(t){let{top:s,left:e,width:i,height:r}=t.getBoundingClientRect(),n=function(t){return window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)}))}(t);if(6==n.length){var o=n;let t=o[0]*o[3]-o[1]*o[2];return{width:i/o[0]==0?1:o[0],height:r/o[3]==0?1:o[3],left:(e*o[3]-s*o[2]+o[2]*o[5]-o[4]*o[3])/t,top:(-e*o[1]+s*o[0]+o[4]*o[1]-o[0]*o[5])/t}}return{top:s,left:e,width:i,height:r}}(t);return{top:i.top-e.top,left:i.left-e.left}}}function I(){return"ontouchstart"in window||navigator.maxTouchPoints>0}class R{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 s=null!=this.data.sC;s&&(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,s&&(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||I()?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 D,this.wW=0,this.wH=0,this._virtualCursor=new h,this._lerp=new l,this._attribute=new W,this._boundingClientRect=new j,this._position=new k,this.objects=new Map,this.connectQueue=new Array,this.globalId=1,this._parser=new H,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 B,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 R.i||(R.i=new R),R.i}use(t,s=null){const e=new t({data:this.data,lerp:this._lerp,attribute:this._attribute,boundingClientRect:this._boundingClientRect,position:this._position,virtualCursor:this._virtualCursor,events:this.events},s);1==e.type&&this.modules.push(e),2==e.type&&this.modulesUI.push(e)}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 s=this._attribute.process(t,"string-copy-from");if(null!=s&&this.objects.has(s)){let e=this.objects.get(s);null!=e&&e.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,s,e=""){switch(t){case"scroll":this.events.on("scroll",s);break;case"progress":this.events.on(`progress_${e}`,s);break;case"lerp":this.events.on("lerp",s);break;case"intersection":this.events.on(`intersection_${e}`,s);break;case"inview":this.events.on(`inview_${e}`,s);break;case"cursor":this.events.on("cursor",s)}}off(t,s,e=""){switch(t){case"scroll":this.events.off("scroll",s);break;case"progress":this.events.off(`progress_${e}`,s);break;case"lerp":this.events.off("lerp",s);break;case"intersection":this.events.off(`intersection_${e}`,s);break;case"inview":this.events.off(`inview_${e}`,s);break;case"cursor":this.events.off("cursor",s)}}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,s){var e,i,r;null===(e=s.showObserver)||void 0===e||e.disconnect(),null===(i=s.progressObserver)||void 0===i||i.disconnect(),null===(r=s.inviewObserver)||void 0===r||r.disconnect();let n=this._boundingClientRect.process(t),o=n.width/this.data.scsW,a=n.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;s.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),s.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),s.selfDisable=null!=this._attribute.process(t,"string-self-disable"),s.abs=null!=this._attribute.process(t,"string-abs");let u=this._attribute.process(t,"string-cursor-target");null!=u&&(s.cursorTarget=document.querySelector(`[string-cursor-content="${u}"]`)),s.id=this._attribute.process(t,"string-id",`string-${this.globalId}`),s.key=this._attribute.process(t,"string-key",this.defaultSettings.stringKey),s.strength=this._attribute.process(t,"string-strength",this.defaultSettings.stringStrength),s.radius=this._attribute.process(t,"string-radius",this.defaultSettings.stringRadius),s.lerp=this._attribute.process(t,"string-lerp",this.defaultSettings.stringLerp);let p=this._attribute.process(t,"string-parallax-bias",this.defaultSettings.stringParallaxBias);s.parallaxPositionStart=.5*p-.5,s.parallaxPositionEnd=.5+.5*(1-p),t.setAttribute("string-id",s.id),"vertical"==this.data.sD?s.size=a:s.size=o,s.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),s.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(s.el,"string","").split("|").includes("parallax")&&(m=0,g=0,s.oStart=0,s.oEnd=0),s.factor=Math.min(1,this._attribute.process(t,"string-parallax",this.defaultSettings.stringParallax)),s.oStart+=s.factor*this.data.wS*.5,s.oEnd+=s.factor*this.data.wS*.5,s.repeat=null!=this._attribute.process(t,"string-repeat"),s.sElPos=l,s.sScrPos=c,s.eElPos=h,s.eScrPos=d,s.halfWidth=o/2,s.halfHeight=a/2;let f=this.data.wS;if("vertical"==this.data.sD){let e=this._position.process(t,this.data.sC).top/this.data.scsH;s.start=e,s.end=e+a}else{let e=this._position.process(t,this.data.sC).left/this.data.scsW;s.start=e,s.end=e+o}s.calculatePositions(f);let v,b,E=this.connectQueue.filter((t=>t.id==s.id));this.connectQueue=this.connectQueue.filter((t=>t.id!=s.id)),E.forEach((t=>{s.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},b={root:null,rootMargin:`${m+s.inviewTop}px 0px ${g+s.inviewBottom}px 0px`,threshold:.001}):(v={root:null,rootMargin:`0px ${m+this.data.wS}px 0px ${g+this.data.wS}px`,threshold:.001},b={root:null,rootMargin:`0px ${m+s.inviewTop}px 0px ${g+s.inviewBottom}px`,threshold:.001});let y=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?0==s.active&&(this.events.emit(`activate_object_${s.id}`,!0),s.enter()):1==s.active&&(this.events.emit(`activate_object_${s.id}`,!1),s.leave())}))}),v),w=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?this.events.emit(`intersection_${s.id}`,!0):this.events.emit(`intersection_${s.id}`,!1)}))}),{root:null,rootMargin:"0px 0px 0px 0px",threshold:.001}),S=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?(this.events.emit(`inview_${s.id}`,!0),s.show()):(this.events.emit(`inview_${s.id}`,!1),s.hide())}))}),b);y.observe(t),w.observe(t),S.observe(t),s.showObserver=w,s.progressObserver=y,s.inviewObserver=S}addObject(t){let s,e=this._attribute.process(t,"string-inited");s=null==e?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,s),this.modules.forEach((t=>{t.tryConnect(s)&&t.connect(s)})),this.objects.set(s.id,s),this.globalId++}removeObject(t){let s=this.objects.get(t);null!=(null==s?void 0:s.showObserver)&&(null==s||s.showObserver.disconnect()),null!=(null==s?void 0:s.progressObserver)&&(null==s||s.progressObserver.disconnect()),null!=(null==s?void 0:s.inviewObserver)&&(null==s||s.inviewObserver.disconnect()),this.objects.delete(t),null==s||s.el.removeAttribute("string-inited"),null==s||s.leave(),s=void 0}onMouseMoveEvent(t){this._virtualCursor.onMouseMove(t),this.modules.forEach((s=>{s.onMouseMove(t)})),this.modulesUI.forEach((s=>{s.onMouseMove(t)}))}onWheelEvent(t){this.sEn.onWheel(t),this.modules.forEach((s=>{s.onWheel(t)})),this.modulesUI.forEach((s=>{s.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 s=this._attribute.process(t,"string-copy-from");if(null!=s)if(this.objects.has(s)){let e=this.objects.get(s);null!=e&&e.connects.push(t)}else this.connectQueue.push({id:s,element:t})}))})),t.removedNodes.length>0&&t.removedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]").forEach((t=>{let s=t.getAttribute("string-id"),e=this._attribute.process(t,"string-copy-from");null!=e&&(this.connectQueue=this.connectQueue.filter((t=>t.id!=e))),null!=s&&this.removeObject(s)}))})),(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 s=(t=this.data.sC,window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)})));this.data.scsW=s[0],this.data.scsH=s[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||I()?this.scrollMode=this.mMode:this.scrollMode=this.dMode;let s=document.body,e=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(s.scrollWidth,s.offsetWidth,e.clientWidth,e.scrollWidth,e.offsetWidth)),null==this.data.psH&&(this.data.psH=Math.max(s.scrollHeight,s.offsetHeight,e.clientHeight,e.scrollHeight,e.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 s})()));
1
+ !function(t,s){"object"==typeof exports&&"object"==typeof module?module.exports=s():"function"==typeof define&&define.amd?define([],s):"object"==typeof exports?exports.StringTune=s():t.StringTune=s()}(this,(()=>(()=>{"use strict";var t={d:(s,e)=>{for(var i in e)t.o(e,i)&&!t.o(s,i)&&Object.defineProperty(s,i,{enumerable:!0,get:e[i]})},o:(t,s)=>Object.prototype.hasOwnProperty.call(t,s),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},s={};t.r(s),t.d(s,{StringCursor:()=>o,StringDisplacement:()=>S,StringFPSTracker:()=>O,StringLazy:()=>i,StringLoading:()=>r,StringMagnetic:()=>a,StringParallax:()=>w,StringPositionTracker:()=>A,StringProgress:()=>x,StringResponsive:()=>f,StringScrollbar:()=>y,StringSplit:()=>D,StringTune:()=>R,StringVideoAutoplay:()=>n,default:()=>R});class e{get type(){return this._type}constructor(t,s=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=s}destructor(){}onChangeScrollParams(){}tryConnect(t){let s=this.attribute.process(t.el,"string","").split("|"),e=!1;return s.forEach((t=>{t==this.htmlKey&&(e=!0)})),e}connect(t){t.connect(this),this.onConnect(t)}addObject(t,s){this.objectsMap.set(t,s),this.objects=Array.from(this.objectsMap).map((([t,s])=>s))}removeObject(t){this.objectsMap.delete(t),this.objects=Array.from(this.objectsMap).map((([t,s])=>s))}onStart(){}onUpdate(t){}onResize(){}onConnect(t){}onRebuild(){}onScroll(t){}onMouseMove(t){}onWheel(t){}onChangeDevice(){}onChangeScrollDirection(){}onMutationObserver(t,s){}}class i extends e{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,s){return new Promise(((e,i)=>{const r=new XMLHttpRequest;r.open("GET",s,!0),r.responseType="arraybuffer",r.onload=()=>{if(206===r.status||200===r.status){const s=r.response,n=new Blob([s]),o=new Image;o.onload=()=>{t.style.aspectRatio=`${o.width} / ${o.height}`,e({width:o.width,height:o.height}),URL.revokeObjectURL(o.src)},o.onerror=()=>{i(new Error("Failed to load image"))},o.src=URL.createObjectURL(n)}else i(new Error("Failed to load image"))},r.onerror=()=>{i(new Error("Network error"))},r.setRequestHeader("Range","bytes=0-"),r.send()}))}}class r extends e{constructor(t,s=null){super(t),this.loadingTimeout=0,this._type=2,null!=s&&null!=s.timeout&&(this.loadingTimeout=s.timeout)}onStart(){setTimeout((()=>{document.documentElement.classList.add("-loaded")}),this.loadingTimeout)}}class n extends e{constructor(t){super(t),this.htmlKey="autoplay"}onConnect(t){const s=t.el,e=this.attribute.process(s,"string-src",""),i=null!=this.attribute.process(s,"string-started",null);"video"===s.tagName.toLowerCase()&&e&&0==i?(s.setAttribute("muted","muted"),s.setAttribute("playsinline",""),s.setAttribute("loop",""),s.setAttribute("autoplay",""),s.src=e,s.muted=!0,s.addEventListener("canplaythrough",(()=>{0==(null!=this.attribute.process(s,"string-started",null))&&this.tryPlay(t,s)}),{once:!0}),s.load()):console.warn("StringVideoAutoplay: Element is not a <video> tag or string-src is missing.",t.el)}tryPlay(t,s){s.play().catch((s=>{console.warn("Autoplay failed:",s),t.started=!1})).then((()=>{t.started=!0,s.setAttribute("string-started","")}))}}class o extends e{constructor(t,s=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 s=t.el.getBoundingClientRect();const e=this.calculateOffset("center",this.virtualCursor.x-s.left,s.width),i=this.calculateOffset("center",this.virtualCursor.y-s.top,s.height);t.mouseX+=this.lerp.process(t.mouseX,e,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 s=t.el.getBoundingClientRect();const e=this.calculateOffset("center",t.halfWidth,s.width),i=this.calculateOffset("center",t.halfHeight,s.height);t.mouseX+=this.lerp.process(t.mouseX,e,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}}))}onConnect(t){let s=t.el;null!=this.settings&&null!=this.settings["string-lerp"]&&(t.lerp=this.settings["string-lerp"]);let e=()=>{s.addEventListener("mousemove",i),s.addEventListener("mouseleave",r),t.isMouseMove=!0,null!=t.cursorTarget&&t.cursorTarget.classList.add("-show")},i=t=>{},r=()=>{s.removeEventListener("mousemove",i),s.removeEventListener("mouseleave",r),t.isMouseMove=!1,null!=t.cursorTarget&&t.cursorTarget.classList.remove("-show")};t.onEnter=()=>{s.addEventListener("mouseenter",e)},t.onLeave=()=>{s.removeEventListener("mouseenter",e),s.removeEventListener("mousemove",i),s.removeEventListener("mouseleave",r)}}setMouseCoordinates(t,s,e){0==t.selfDisable&&(t.el.style.setProperty("--mouse-x",s.toFixed(2)),t.el.style.setProperty("--mouse-y",e.toFixed(2))),t.connects.forEach((t=>{t.style.setProperty("--mouse-x",s.toFixed(2)),t.style.setProperty("--mouse-y",e.toFixed(2))}))}calculateOffset(t,s,e){switch(t){case"start":return s/e;case"end":return(s-e)/e;default:return(s-e/2)/(e/2)}}}class a extends e{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((s=>{const e=s.el.getBoundingClientRect(),i=e.left+s.halfWidth,r=e.top+s.halfHeight,n=t.clientX-i,o=t.clientY-r,a=Math.sqrt(n**2+o**2);a<s.radius?(s.magneticTargetX=n*s.strength*((s.radius-a)/s.radius),s.magneticTargetY=o*s.strength*((s.radius-a)/s.radius),s.isMagneting=!0):(s.magneticTargetX=0,s.magneticTargetY=0)}))}onUpdate(t){this.objects.forEach((t=>{if(t.isMagneting){let s=this.lerp.process(t.magneticX,t.magneticTargetX,t.lerp),e=this.lerp.process(t.magneticY,t.magneticTargetY,t.lerp);s>-.01&&s<.01&&(s=0,t.magneticX=t.magneticTargetX),e>-.01&&e<.01&&(e=0,t.magneticY=t.magneticTargetY),t.magneticX+=s,t.magneticY+=e,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,s,e){return e*(s-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 v{constructor(t){var s;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===(s=null==t?void 0:t.enable)||void 0===s||s}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 f extends e{constructor(t){super(t),this.queries={[g.Mobile]:new v({max:359}),[g.Tablet]:new v({min:360,max:1079}),[g.Laptop]:new v({min:1080,max:1365}),[g.Desktop]:new v({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}onStart(){this.updateElements()}onResize(){this.updateElements()}updateElements(){const t=this.matchMedias[g.Mobile].matches,s=this.matchMedias[g.Tablet].matches,e=this.matchMedias[g.Laptop].matches,i=this.matchMedias[g.Desktop].matches;document.querySelectorAll("[string-mobile], [string-tablet], [string-laptop], [string-desktop]").forEach((r=>{let n=!1;r.hasAttribute("string-mobile")&&t&&(n=!0),r.hasAttribute("string-tablet")&&s&&(n=!0),r.hasAttribute("string-laptop")&&e&&(n=!0),r.hasAttribute("string-desktop")&&i&&(n=!0),n?r.classList.add("-show"):r.classList.remove("-show")}))}}class b{constructor(t,s,e){this.isDragging=!1,this.startY=0,this.startScrollPosition=0,this.data=t,this.scrollbar=s,this.thumb=e}onResize(){const t=this.data.psH,s=this.data.wS,e=s/t*s;this.thumb.style.setProperty("--size",e+"px"),t<=s?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psH,s=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*s+"px")}mouseDownEvent(t){this.startY=t.clientY,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const s=t.clientY-this.startY,e=this.startScrollPosition+s/this.data.wS*this.data.psH;this.data.c=e,this.data.t=e,window.scrollTo(0,e),this.updateThumb()}}class E{constructor(t,s,e){this.isDragging=!1,this.startCoordinate=0,this.startScrollPosition=0,this.data=t,this.scrollbar=s,this.thumb=e}onResize(){const t=this.data.psW,s=this.data.wS,e=s/t*s;this.thumb.style.setProperty("--size",e+"px"),t<=s?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psW,s=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*s+"px")}mouseDownEvent(t){this.startCoordinate=t.clientX,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const s=t.clientX-this.startCoordinate,e=this.startScrollPosition+s/this.data.wS*this.data.psW;this.data.c=e,this.data.t=e,window.scrollTo(0,e),this.updateThumb()}}class y extends e{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 b(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 S extends e{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 w extends e{constructor(t){super(t),this.setupParallax=(t,s)=>{let e=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))},this.onScrollDesktopEvent=()=>{this.objects.forEach((t=>{let s=Math.min(1,Math.max(0,(this.data.c-t.startPos)/t.differencePos));t.el.style.setProperty(t.key,s.toString()),this.setupParallax(t,s)}))},this.onScrollMobileEvent=()=>{},this.onScrollEvent=this.onScrollDesktopEvent,this.htmlKey="parallax"}onConnect(t){if(null!=this.settings){if(null!=this.settings["string-parallax-bias"]){let s=this.attribute.process(t.el,"string-parallax-bias",this.settings["string-parallax-bias"]);t.parallaxPositionStart=.5*s-.5,t.parallaxPositionEnd=.5+.5*(1-s)}null!=this.settings["string-parallax"]&&(t.factor=this.settings["string-parallax"])}}onScroll(t){this.onScrollEvent()}onChangeScrollDirection(){"vertical"==this.data.sD?this.setupParallax=(t,s)=>{let e=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))}:this.setupParallax=(t,s)=>{let e=`translate3d(${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))}}onResize(){window.innerWidth>1080?this.onScrollEvent=this.onScrollDesktopEvent:this.onScrollEvent=this.onScrollMobileEvent}}class x extends e{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,s){let e=Math.min(1,Math.max(0,(s-t.startPos)/t.differencePos));this.events.emit(`progress_${t.id}`,e),t.el.style.setProperty(t.key,e.toString()),t.connects.forEach((s=>{s.style.setProperty(t.key,e.toString())}))}}class M{constructor(t,s,e){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=s,this.data=e,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,s,e){super(t,s,e),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,s,e){super(t,s,e),this.name="disable"}onUpdate(){}onWheel(t){t.preventDefault()}onScroll(t){t.preventDefault()}}class L extends M{constructor(t,s,e){super(t,s,e),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 e{constructor(t){super(t),this.htmlKey="split"}onStart(){}onResize(){document.querySelectorAll('[string="split"].-splited').forEach((t=>{const s=this.parseSplitOptions(t.getAttribute("string-split"));t.innerHTML=this.split(s,t).html}))}onConnect(t){let s=t.el;if(!s.classList.contains("-splited")){s.classList.add("-splited"),s.setAttribute("string-split-original",s.innerHTML);const t=this.parseSplitOptions(s.getAttribute("string-split"));s.innerHTML=this.split(t,s).html}}parseSplitOptions(t){const s={line:[],word:[],char:[],charLine:[],charWord:[],wordLine:[]};return t&&t.split("|").forEach((t=>{const e=t.match(/^(\w+-)?(\w+)(\[(.*?)\])?$/);if(e){const t=e[1]||"",i=e[2],r=e[4]?e[4].split(","):[];switch(t+i){case"char-line":s.charLine.push(this.parseParam(r));break;case"char-word":s.charWord.push(this.parseParam(r));break;case"word-line":s.wordLine.push(this.parseParam(r));break;case"line":s.line.push(this.parseParam(r));break;case"word":s.word.push(this.parseParam(r));break;case"char":s.char.push(this.parseParam(r))}}})),s}parseParam(t){const s={align:"start"};return t.forEach((t=>{if("abs"===t)s.abs=!0;else if(t.startsWith("random")){const e=t.match(/random\((\d+),(\d+)\)/);e?(s.random={min:parseInt(e[1]),max:parseInt(e[2])},s.align="random"):s.align="random"}else["start","center","end"].includes(t)?s.align=t:s.align="start"})),s}split(t,s){let e=s.getAttribute("string-split-original");if(0===e.length)return"";e=this.decodeHtmlEntity(e);const i=document.createElement("span"),r=e.split(/\s+/);let n=0,o=0;const a=e.replace(/\s/g,"").length,l=document.createElement("span"),h=window.getComputedStyle(s);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;r.forEach(((t,e)=>{l.textContent=t,t.length>0&&(l.textContent+=" ");const i=l.offsetWidth,r={text:t,width:i,chars:new Array};Array.from(t).forEach(((t,s)=>{const e={text:t};r.chars.push(e)})),u+i>s.offsetWidth&&(c.push(d),d=[],u=0,n+=d.length),d.push(r),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 s=0;s<c.length;s++)this.appendVirtualLineToDOM(s,c.length,r.length,i,c[s],t,n,a,m),m+=c[s].length;else for(let s=0;s<c.length;s++)c[s].forEach(((s,e)=>{if(s.chars.length>0){const l=document.createElement("span");l.classList.add("-s-word"),s.chars.forEach(((e,i)=>{const r=document.createElement("span");r.classList.add("-s-char"),r.textContent=e.text,this.applyOptions(r,t.char,n,"char",i,a),this.applyOptions(r,t.charWord,i,"char-word",i,s.text.length),l.appendChild(r),n++})),this.applyOptions(l,t.word,o,"word",e,r.length),s.chars.length>0&&(l.innerHTML+=" "),i.appendChild(l),o++}}));return document.body.removeChild(l),{html:i.innerHTML}}appendVirtualLineToDOM(t,s,e,i,r,n,o,a,l){const h=document.createElement("span");h.classList.add("-s-line"),this.applyOptions(h,n.line,t,"line",0,s);let c=0,d=0,u=0;r.forEach(((t,s)=>{u+=t.text.length})),r.forEach(((t,s)=>{if(t.chars.length>0){const i=document.createElement("span");i.classList.add("-s-word"),t.chars.forEach(((s,e)=>{const r=document.createElement("span");r.classList.add("-s-char"),r.textContent=s.text,this.applyOptions(r,n.char,o,"char",e,a),this.applyOptions(r,n.charLine,c,"char-line",e,u),this.applyOptions(r,n.charWord,e,"char-word",e,t.text.length),i.appendChild(r),o++,c++})),this.applyOptions(i,n.word,l+d,"word",l+d,e-1),this.applyOptions(i,n.wordLine,s,"word-line",s,r.length),s<r.length-1&&(i.innerHTML+=" "),h.appendChild(i),d++}})),i.appendChild(h)}applyOptions(t,s,e,i,r,n){s&&s.forEach(((s,o)=>{let a=this.calculateIndex(s,e,r,n);const l=this.generateVariableName(i,s,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,s,e,i){let r=s;if("random"===t.align){void 0===t.random&&(t.random={min:0,max:i});const s=t.random.min||0,e=t.random.max||i;r=Math.floor(Math.random()*(e-s+1))+s}return"end"===t.align?r=i-r-1:"center"===t.align&&(r-=Math.floor(i/2)),t.abs&&(r=Math.abs(r)),r}generateVariableName(t,s,e){let i=`--${t}`;return s.align&&(i+=`-${s.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 e{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 e{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 s="";t.c<t.t&&(s="↓"),t.c>t.t&&(s="↑"),this.displayElement.setAttribute("direction",s),this.displayElement.setAttribute("value",`${this.data.c}`)}onUpdate(t){this.callCount++}destructor(){document.body.removeChild(this.displayElement)}}class W{process(t,s,e=null){return null==t.getAttribute(s)?e:t.getAttribute(s)}}class j{process(t){return t.getBoundingClientRect()}}class z{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 B{constructor(){this.eventsByKey=new Map,this.events=new Array}on(t,s){var e;0==this.eventsByKey.has(t)&&this.eventsByKey.set(t,[]),null===(e=this.eventsByKey.get(t))||void 0===e||e.push(s),this.updateAllEvents()}has(t){return this.eventsByKey.has(t)}emit(t,s){var e;this.eventsByKey.has(t)&&(null===(e=this.eventsByKey.get(t))||void 0===e||e.forEach((t=>{t(s)})))}off(t,s){let e=this.eventsByKey.get(t);null!=e&&this.eventsByKey.set(t,e.filter((t=>t!==s))),this.updateAllEvents()}all(t){this.events.forEach((s=>{s(t)}))}updateAllEvents(){Array.from(this.eventsByKey.values()).forEach((t=>{t.forEach((t=>{this.events.push(t)}))}))}}class k{parseSingle(t,s,e,i){let r,n=t.startsWith("-");return n&&(t=t.slice(1)),"selfHeight"===t?r=s.offsetHeight:t.endsWith("px")?r=parseFloat(t):t.endsWith("%")?r=parseFloat(t)*e/100:t.endsWith("rem")&&(r=parseFloat(t)*i),n?-r:r}}class H{process(t,s=document.body){let e;try{e=s.getBoundingClientRect()}catch(t){e=document.body.getBoundingClientRect()}let i=function(t){let{top:s,left:e,width:i,height:r}=t.getBoundingClientRect(),n=function(t){return window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)}))}(t);if(6==n.length){var o=n;let t=o[0]*o[3]-o[1]*o[2];return{width:i/o[0]==0?1:o[0],height:r/o[3]==0?1:o[3],left:(e*o[3]-s*o[2]+o[2]*o[5]-o[4]*o[3])/t,top:(-e*o[1]+s*o[0]+o[4]*o[1]-o[0]*o[5])/t}}return{top:s,left:e,width:i,height:r}}(t);return{top:i.top-e.top,left:i.left-e.left}}}function I(){return"ontouchstart"in window||navigator.maxTouchPoints>0}class R{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 s=null!=this.data.sC;s&&(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,s&&(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||I()?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 B,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 j,this._position=new H,this.objects=new Map,this.connectQueue=new Array,this.globalId=1,this._parser=new k,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 z,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 R.i||(R.i=new R),R.i}use(t,s=null){const e=new t({data:this.data,lerp:this._lerp,attribute:this._attribute,boundingClientRect:this._boundingClientRect,position:this._position,virtualCursor:this._virtualCursor,events:this.events},s);1==e.type&&this.modules.push(e),2==e.type&&this.modulesUI.push(e)}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 s=this._attribute.process(t,"string-copy-from");if(null!=s&&this.objects.has(s)){let e=this.objects.get(s);null!=e&&e.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,s,e=""){switch(t){case"scroll":this.events.on("scroll",s);break;case"progress":this.events.on(`progress_${e}`,s);break;case"lerp":this.events.on("lerp",s);break;case"intersection":this.events.on(`intersection_${e}`,s);break;case"inview":this.events.on(`inview_${e}`,s);break;case"cursor":this.events.on("cursor",s)}}off(t,s,e=""){switch(t){case"scroll":this.events.off("scroll",s);break;case"progress":this.events.off(`progress_${e}`,s);break;case"lerp":this.events.off("lerp",s);break;case"intersection":this.events.off(`intersection_${e}`,s);break;case"inview":this.events.off(`inview_${e}`,s);break;case"cursor":this.events.off("cursor",s)}}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,s){var e,i,r;null===(e=s.showObserver)||void 0===e||e.disconnect(),null===(i=s.progressObserver)||void 0===i||i.disconnect(),null===(r=s.inviewObserver)||void 0===r||r.disconnect();let n=this._boundingClientRect.process(t),o=n.width/this.data.scsW,a=n.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;s.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),s.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),s.selfDisable=null!=this._attribute.process(t,"string-self-disable"),s.abs=null!=this._attribute.process(t,"string-abs");let u=this._attribute.process(t,"string-cursor-target");null!=u&&(s.cursorTarget=document.querySelector(`[string-cursor-content="${u}"]`)),s.id=this._attribute.process(t,"string-id",`string-${this.globalId}`),s.key=this._attribute.process(t,"string-key",this.defaultSettings.stringKey),s.strength=this._attribute.process(t,"string-strength",this.defaultSettings.stringStrength),s.radius=this._attribute.process(t,"string-radius",this.defaultSettings.stringRadius),s.lerp=this._attribute.process(t,"string-lerp",this.defaultSettings.stringLerp);let p=this._attribute.process(t,"string-parallax-bias",this.defaultSettings.stringParallaxBias);s.parallaxPositionStart=.5*p-.5,s.parallaxPositionEnd=.5+.5*(1-p),t.setAttribute("string-id",s.id),"vertical"==this.data.sD?s.size=a:s.size=o,s.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),s.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(s.el,"string","").split("|").includes("parallax")&&(m=0,g=0,s.oStart=0,s.oEnd=0),s.factor=Math.min(1,this._attribute.process(t,"string-parallax",this.defaultSettings.stringParallax)),s.oStart+=s.factor*this.data.wS*.5,s.oEnd+=s.factor*this.data.wS*.5,s.repeat=null!=this._attribute.process(t,"string-repeat"),s.sElPos=l,s.sScrPos=c,s.eElPos=h,s.eScrPos=d,s.halfWidth=o/2,s.halfHeight=a/2;let v=this.data.wS;if("vertical"==this.data.sD){let e=this._position.process(t,this.data.sC).top/this.data.scsH;s.start=e,s.end=e+a}else{let e=this._position.process(t,this.data.sC).left/this.data.scsW;s.start=e,s.end=e+o}s.calculatePositions(v);let f,b,E=this.connectQueue.filter((t=>t.id==s.id));this.connectQueue=this.connectQueue.filter((t=>t.id!=s.id)),E.forEach((t=>{s.connects.push(t.element)})),"vertical"==this.data.sD?(f={root:null,rootMargin:`${m+this.data.wS}px 0px ${g+this.data.wS}px 0px`,threshold:.001},b={root:null,rootMargin:`${m+s.inviewTop}px 0px ${g+s.inviewBottom}px 0px`,threshold:.001}):(f={root:null,rootMargin:`0px ${m+this.data.wS}px 0px ${g+this.data.wS}px`,threshold:.001},b={root:null,rootMargin:`0px ${m+s.inviewTop}px 0px ${g+s.inviewBottom}px`,threshold:.001});let y=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?0==s.active&&(this.events.emit(`activate_object_${s.id}`,!0),s.enter()):1==s.active&&(this.events.emit(`activate_object_${s.id}`,!1),s.leave())}))}),f),S=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?this.events.emit(`intersection_${s.id}`,!0):this.events.emit(`intersection_${s.id}`,!1)}))}),{root:null,rootMargin:"0px 0px 0px 0px",threshold:.001}),w=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?(this.events.emit(`inview_${s.id}`,!0),s.show()):(this.events.emit(`inview_${s.id}`,!1),s.hide())}))}),b);y.observe(t),S.observe(t),w.observe(t),s.showObserver=S,s.progressObserver=y,s.inviewObserver=w}addObject(t){let s,e=this._attribute.process(t,"string-inited");s=null==e?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,s),this.modules.forEach((t=>{t.tryConnect(s)&&t.connect(s)})),this.objects.set(s.id,s),this.globalId++}removeObject(t){let s=this.objects.get(t);null!=(null==s?void 0:s.showObserver)&&(null==s||s.showObserver.disconnect()),null!=(null==s?void 0:s.progressObserver)&&(null==s||s.progressObserver.disconnect()),null!=(null==s?void 0:s.inviewObserver)&&(null==s||s.inviewObserver.disconnect()),this.objects.delete(t),null==s||s.el.removeAttribute("string-inited"),null==s||s.leave(),s=void 0}onMouseMoveEvent(t){this._virtualCursor.onMouseMove(t),this.modules.forEach((s=>{s.onMouseMove(t)})),this.modulesUI.forEach((s=>{s.onMouseMove(t)}))}onWheelEvent(t){this.sEn.onWheel(t),this.modules.forEach((s=>{s.onWheel(t)})),this.modulesUI.forEach((s=>{s.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 s=this._attribute.process(t,"string-copy-from");if(null!=s)if(this.objects.has(s)){let e=this.objects.get(s);null!=e&&e.connects.push(t)}else this.connectQueue.push({id:s,element:t})}))})),t.removedNodes.length>0&&t.removedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]").forEach((t=>{let s=t.getAttribute("string-id"),e=this._attribute.process(t,"string-copy-from");null!=e&&(this.connectQueue=this.connectQueue.filter((t=>t.id!=e))),null!=s&&this.removeObject(s)}))})),(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 s=(t=this.data.sC,window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)})));this.data.scsW=s[0],this.data.scsH=s[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||I()?this.scrollMode=this.mMode:this.scrollMode=this.dMode;let s=document.body,e=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(s.scrollWidth,s.offsetWidth,e.clientWidth,e.scrollWidth,e.offsetWidth)),null==this.data.psH&&(this.data.psH=Math.max(s.scrollHeight,s.offsetHeight,e.clientHeight,e.scrollHeight,e.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 s})()));
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 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 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;\n const isTabletMedia = this.matchMedias[DeviceType.Tablet].matches;\n const isLaptopMedia = this.matchMedias[DeviceType.Laptop].matches;\n const isDesktopMedia = this.matchMedias[DeviceType.Desktop].matches;\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 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.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 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","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","mediaQuery","query","StringResponsive","queries","Mobile","Tablet","Laptop","Desktop","matchMedias","window","matchMedia","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","parallaxPosition","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","innerWidth","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","onScrollEvent","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 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 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;\n const isTabletMedia = this.matchMedias[DeviceType.Tablet].matches;\n const isLaptopMedia = this.matchMedias[DeviceType.Laptop].matches;\n const isDesktopMedia = this.matchMedias[DeviceType.Desktop].matches;\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 }\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","mediaQuery","query","StringResponsive","queries","Mobile","Tablet","Laptop","Desktop","matchMedias","window","matchMedia","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":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiddle-digital/string-tune",
3
- "version": "0.0.23",
3
+ "version": "0.0.24",
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",