@fiddle-digital/string-tune 0.0.4 → 0.0.5

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.
@@ -1,6 +1,6 @@
1
- import { StringModule } from "../../StringModule";
2
- import { StringObject } from "../../Objects/StringObject";
3
- import { StringData } from "../../Utils/StringData";
1
+ import { StringObject } from '../../Objects/StringObject';
2
+ import { StringModule } from '../../StringModule';
3
+ import { StringData } from '../../Utils/StringData';
4
4
  export declare class StringMagnetic extends StringModule {
5
5
  constructor(visitor: any);
6
6
  onConnect(object: StringObject): void;
@@ -1,8 +1,10 @@
1
- import { StringModule } from "../../StringModule";
2
- import { StringData } from "../../Utils/StringData";
1
+ import { StringObject } from '../../Objects/StringObject';
2
+ import { StringModule } from '../../StringModule';
3
+ import { StringData } from '../../Utils/StringData';
3
4
  export declare class StringParallax extends StringModule {
4
5
  private setupParallax;
5
6
  constructor(visitor: any);
7
+ onConnect(object: StringObject): void;
6
8
  onScroll(data: StringData): void;
7
9
  onChangeScrollDirection(): void;
8
10
  }
@@ -1,5 +1,5 @@
1
- import { StringModule } from "../StringModule";
2
- import { StringData } from "../Utils/StringData";
1
+ import { StringModule } from '../StringModule';
2
+ import { StringData } from '../Utils/StringData';
3
3
  export declare class StringFPSTracker extends StringModule {
4
4
  private callCount;
5
5
  private intervalId;
package/dist/index.d.ts CHANGED
@@ -58,6 +58,8 @@ declare class StringTune {
58
58
  destroy(): void;
59
59
  on(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id?: string): void;
60
60
  off(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id?: string): void;
61
+ private defaultSettings;
62
+ setupSettings(settings: any): void;
61
63
  protected setupObject(el: HTMLElement, object: StringObject): void;
62
64
  addObject(el: HTMLElement): void;
63
65
  removeObject(id: string): void;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.StringTune=e():t.StringTune=e()}(this,(()=>(()=>{"use strict";var t={d:(e,s)=>{for(var i in s)t.o(s,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:s[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{StringCursor:()=>n,StringDisplacement:()=>y,StringFPSTracker:()=>_,StringLazy:()=>i,StringLoading:()=>r,StringMagnetic:()=>a,StringParallax:()=>E,StringPositionTracker:()=>D,StringProgress:()=>f,StringScrollbar:()=>b,StringSplit:()=>L,StringTune:()=>H,StringVideoAutoplay:()=>o,default:()=>H});class s{get type(){return this._type}constructor(t,e=null){this.settings=null,this.objectsMap=new Map,this.objects=new Array,this.htmlKey="",this._type=1,this.data=t.data,this.lerp=t.lerp,this.attribute=t.attribute,this.boundingClientRect=t.boundingClientRect,this.position=t.position,this.virtualCursor=t.virtualCursor,this.events=t.events,this.settings=e}destructor(){}tryConnect(t){let e=this.attribute.process(t.el,"string","").split("|"),s=!1;return e.forEach((t=>{t==this.htmlKey&&(s=!0)})),s}connect(t){t.connect(this),this.onConnect(t)}addObject(t,e){this.objectsMap.set(t,e),this.objects=Array.from(this.objectsMap).map((([t,e])=>e))}removeObject(t){this.objectsMap.delete(t),this.objects=Array.from(this.objectsMap).map((([t,e])=>e))}onStart(){}onUpdate(t){}onResize(){}onConnect(t){}onRebuild(){}onScroll(t){}onMouseMove(t){}onWheel(t){}onChangeDevice(){}onChangeScrollDirection(){}onMutationObserver(t,e){}}class i extends s{constructor(t){super(t),this.htmlKey="lazy"}onStart(){document.querySelectorAll("img[string-lazy]").forEach((t=>{this.getImageSize(t,t.getAttribute("string-lazy")),t.classList.add("lazyLoad"),t.src=t.getAttribute("string-lazy"),t.addEventListener("load",(()=>{t.classList.add("-loaded")}))}))}onConnect(t){t.el}getImageSize(t,e){return new Promise(((s,i)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=()=>{if(206===r.status||200===r.status){const e=r.response,o=new Blob([e]),n=new Image;n.onload=()=>{t.style.aspectRatio=`${n.width} / ${n.height}`,s({width:n.width,height:n.height}),URL.revokeObjectURL(n.src)},n.onerror=()=>{i(new Error("Failed to load image"))},n.src=URL.createObjectURL(o)}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 s{constructor(t,e=null){super(t),this.loadingTimeout=0,this._type=2,null!=e&&null!=e.timeout&&(this.loadingTimeout=e.timeout)}onStart(){setTimeout((()=>{document.documentElement.classList.add("-loaded")}),this.loadingTimeout)}}class o extends s{constructor(t){super(t),this.htmlKey="autoplay"}onConnect(t){const e=t.el,s=this.attribute.process(e,"string-src",""),i=null!=this.attribute.process(e,"string-started",null);"video"===e.tagName.toLowerCase()&&s&&0==i?(e.setAttribute("muted","muted"),e.setAttribute("playsinline",""),e.setAttribute("loop",""),e.setAttribute("autoplay",""),e.src=s,e.muted=!0,e.addEventListener("canplaythrough",(()=>{0==(null!=this.attribute.process(e,"string-started",null))&&this.tryPlay(t,e)}),{once:!0}),e.load()):console.warn("StringVideoAutoplay: Element is not a <video> tag or string-src is missing.",t.el)}tryPlay(t,e){e.play().catch((e=>{console.warn("Autoplay failed:",e),t.started=!1})).then((()=>{t.started=!0,e.setAttribute("string-started","")}))}}class n extends s{constructor(t,e=null){super(t),this.lerpFactor=.2,this.oldX=0,this.oldY=0,this.enterObjectsMap=new Map,this.enterObjects=new Array,this.htmlKey="cursor",this.cursor=document.querySelector("[string-cursor]"),null!=e&&null!=e.lerp&&(this.lerpFactor=e.lerp)}onUpdate(t){if(this.virtualCursor.smoothX!=this.oldX||this.virtualCursor.smoothY!=this.oldY){let t={lerpX:this.virtualCursor.lerpX,lerpY:this.virtualCursor.lerpY,x:this.virtualCursor.x,y:this.virtualCursor.y};this.events.emit("cursor",t),this.cursor.style.setProperty("--x",this.virtualCursor.smoothX),this.cursor.style.setProperty("--y",this.virtualCursor.smoothY),this.oldX=this.virtualCursor.smoothX,this.oldY=this.virtualCursor.smoothY}this.objects.forEach((t=>{if(t.isMouseMove){let e=t.el.getBoundingClientRect();const s=this.calculateOffset("center",this.virtualCursor.x-e.left,e.width),i=this.calculateOffset("center",this.virtualCursor.y-e.top,e.height);t.mouseX+=this.lerp.process(t.mouseX,s,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}else if(0!=t.mouseX||0!=t.mouseY){let e=t.el.getBoundingClientRect();const s=this.calculateOffset("center",t.halfWidth,e.width),i=this.calculateOffset("center",t.halfHeight,e.height);t.mouseX+=this.lerp.process(t.mouseX,s,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}}))}onConnect(t){let e=t.el,s=()=>{e.addEventListener("mousemove",i),e.addEventListener("mouseleave",r),t.isMouseMove=!0,null!=t.cursorTarget&&t.cursorTarget.classList.add("-show")},i=t=>{},r=()=>{e.removeEventListener("mousemove",i),e.removeEventListener("mouseleave",r),t.isMouseMove=!1,null!=t.cursorTarget&&t.cursorTarget.classList.remove("-show")};t.onEnter=()=>{e.addEventListener("mouseenter",s)},t.onLeave=()=>{e.removeEventListener("mouseenter",s),e.removeEventListener("mousemove",i),e.removeEventListener("mouseleave",r)}}setMouseCoordinates(t,e,s){0==t.selfDisable&&(t.el.style.setProperty("--mouse-x",e.toFixed(2)),t.el.style.setProperty("--mouse-y",s.toFixed(2))),t.connects.forEach((t=>{t.style.setProperty("--mouse-x",e.toFixed(2)),t.style.setProperty("--mouse-y",s.toFixed(2))}))}calculateOffset(t,e,s){switch(t){case"start":return e/s;case"end":return(e-s)/s;default:return(e-s/2)/(s/2)}}}class a extends s{constructor(t){super(t),this.htmlKey="magnetic"}onConnect(t){t.el}onMouseMove(t){this.objects.forEach((e=>{const s=e.el.getBoundingClientRect(),i=s.left+e.halfWidth,r=s.top+e.halfHeight,o=t.clientX-i,n=t.clientY-r,a=Math.sqrt(o**2+n**2);a<e.radius?(e.magneticTargetX=o*e.strength*((e.radius-a)/e.radius),e.magneticTargetY=n*e.strength*((e.radius-a)/e.radius),e.isMagneting=!0):(e.magneticTargetX=0,e.magneticTargetY=0)}))}onUpdate(t){this.objects.forEach((t=>{if(t.isMagneting){let e=this.lerp.process(t.magneticX,t.magneticTargetX,t.lerp),s=this.lerp.process(t.magneticY,t.magneticTargetY,t.lerp);e>-.01&&e<.01&&(e=0,t.magneticX=t.magneticTargetX),s>-.01&&s<.01&&(s=0,t.magneticY=t.magneticTargetY),t.magneticX+=e,t.magneticY+=s,t.el.style.setProperty("--magnetic-x",t.magneticX.toString()),t.el.style.setProperty("--magnetic-y",t.magneticY.toString()),t.magneticTargetX!=t.magneticX&&t.magneticTargetY!=t.magneticY||(t.isMagneting=!1)}}))}}class l{process(t,e,s){return s*(e-t)}}class h{constructor(){this._lF=.1,this.lerp=new l,this._x=0,this._y=0,this._lerpX=0,this._lerpY=0,this.targetX=0,this.targetY=0}get x(){return this.targetX}get y(){return this.targetY}get smoothX(){return this._x}get smoothY(){return this._y}get lerpX(){return this._lerpX}get lerpY(){return this._lerpY}onMouseMove(t){this.targetX=t.clientX,this.targetY=t.clientY}onUpdate(){this._lerpX=this.lerp.process(this._x,this.targetX,this._lF),this._lerpY=this.lerp.process(this._y,this.targetY,this._lF),this._x=Math.floor(this._x+this._lerpX),this._y=Math.floor(this._y+this._lerpY)}}const c="top",d="bottom",u="left",p="right";class m{constructor(t){this.id="",this.oStart=0,this.oEnd=0,this.size=0,this.startPos=0,this.endPos=0,this.differencePos=0,this.factor=1,this.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.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}}class g{constructor(t,e,s){this.isDragging=!1,this.startY=0,this.startScrollPosition=0,this.data=t,this.scrollbar=e,this.thumb=s}onResize(){const t=this.data.psH,e=this.data.wS,s=e/t*e;this.thumb.style.setProperty("--size",s+"px"),t<=e?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psH,e=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*e+"px")}mouseDownEvent(t){this.startY=t.clientY,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const e=t.clientY-this.startY,s=this.startScrollPosition+e/this.data.wS*this.data.psH;this.data.c=s,this.data.t=s,window.scrollTo(0,s),this.updateThumb()}}class v{constructor(t,e,s){this.isDragging=!1,this.startCoordinate=0,this.startScrollPosition=0,this.data=t,this.scrollbar=e,this.thumb=s}onResize(){const t=this.data.psW,e=this.data.wS,s=e/t*e;this.thumb.style.setProperty("--size",s+"px"),t<=e?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psW,e=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*e+"px")}mouseDownEvent(t){this.startCoordinate=t.clientX,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const e=t.clientX-this.startCoordinate,s=this.startScrollPosition+e/this.data.wS*this.data.psW;this.data.c=s,this.data.t=s,window.scrollTo(0,s),this.updateThumb()}}class b extends s{constructor(t){super(t),this.isDragging=!1,this.startY=0,this.startScrollTop=0,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("-without-scrollbar")}onScroll(t){this.updateThumb(),this.showScrollbar(),this.hideScrollbar()}onResize(){this.scrollbarState.onResize()}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 g(this.data,this.scrollbar,this.thumb),this.scrollbarStateVertical=new v(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 y extends s{constructor(t){super(t),this.htmlKey="displacement."}onScroll(t){document.documentElement.style.setProperty("--lerp",t.v.toString())}}class E extends s{constructor(t){super(t),this.setupParallax=(t,e)=>{},this.htmlKey="parallax"}onScroll(t){this.objects.forEach((t=>{let e=Math.min(1,Math.max(0,(this.data.c-t.startPos)/t.differencePos));t.el.style.setProperty(t.key,e.toString()),this.setupParallax(t,e)}))}onChangeScrollDirection(){"vertical"==this.data.sD?this.setupParallax=(t,e)=>{let s=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+e*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=s,t.connects.forEach((t=>{t.style.transform=s}))}:this.setupParallax=(t,e)=>{let s=`translate3d(${t.factor*this.data.wS*t.parallaxPositionStart+e*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0, 0)`;t.el.style.transform=s,t.connects.forEach((t=>{t.style.transform=s}))}}}class f extends s{constructor(t){super(t),this.htmlKey="progress"}onScroll(t){this.objects.forEach((t=>{this.setUpObject(t,this.data.c)}))}onConnect(t){t.onEnter=()=>{this.setUpObject(t,this.data.c)}}setUpObject(t,e){let s=Math.min(1,Math.max(0,(e-t.startPos)/t.differencePos));this.events.emit(`progress_${t.id}`,s),t.el.style.setProperty(t.key,s.toString()),t.connects.forEach((e=>{e.style.setProperty(t.key,s.toString())}))}}class w{constructor(t,e,s){this.isProg=!1,this.isParallaxEnabled=!1,this.name="",this.v=0,this.vT=0,this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(0,this.data.c)},this._scrollDirection="vertical",this.d=t,this.settings=e,this.data=s,this.scrollContainer=window}onUpdate(){}onWheel(t){}onScroll(t){}set scrollDirection(t){this._scrollDirection=t,"vertical"==this._scrollDirection?this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(0,this.data.c)}:"horizontal"==this._scrollDirection&&(this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(this.data.c,0)})}}class S extends w{constructor(t,e,s){super(t,e,s),this.animateC=0,this.name="mobile"}onUpdate(){this.vT=this.d.documentElement.scrollTop-this.animateC,this.animateC=this.d.documentElement.scrollTop,this.v=this.vT}onWheel(t){}onScroll(t){this.data.c=this.d.documentElement.scrollTop,this.data.t=this.d.documentElement.scrollTop,this.data.d=0}}class C extends w{constructor(t,e,s){super(t,e,s),this.name="disable"}onUpdate(){}onWheel(t){}onScroll(t){t.preventDefault()}}class P extends w{constructor(t,e,s){super(t,e,s),this.name="desktop",this.isScroll=!1,this.name="desktop"}onUpdate(){if(this.data.v=(this.data.t-this.data.c)*this.settings.speed,0!=this.data.v){let t;this.isScroll=!0,this.data.v>0?(t=Math.ceil(this.data.c+this.data.v),document.documentElement.classList.add("-scroll-forward"),document.documentElement.classList.remove("-scroll-back")):(t=Math.floor(this.data.c+this.data.v),document.documentElement.classList.add("-scroll-back"),document.documentElement.classList.remove("-scroll-forward")),this.data.c!=t?(this.data.c=t,this.isProg=!0,this.onCalcUpdate()):this.data.c=t}else this.isScroll&&(this.isScroll=!1,this.data.v=0,this.data.c=this.data.t,this.isProg=!1,document.documentElement.classList.remove("-scroll-back"),document.documentElement.classList.remove("-scroll-forward"),document.documentElement.style.setProperty("--lerp","0"))}onWheel(t){0!=t.deltaY&&(t.preventDefault(),this.data.d=t.deltaY,this.data.t+=this.data.d,this.data.t=Math.min(Math.max(this.data.t,0),this.data.bS))}onScroll(t){t.preventDefault(),0==this.isProg&&(this.data.v=this.d.documentElement.scrollTop-this.data.c,this.data.c=this.d.documentElement.scrollTop,this.data.t=this.d.documentElement.scrollTop,this.data.d=0,this.onCalcUpdate())}}class x{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 L extends s{constructor(t){super(t),this.htmlKey="split"}onStart(){}onResize(){document.querySelectorAll('[string="split"].-splited').forEach((t=>{const e=this.parseSplitOptions(t.getAttribute("string-split"));t.innerHTML=this.split(e,t).html}))}onConnect(t){let e=t.el;if(!e.classList.contains("-splited")){e.classList.add("-splited"),e.setAttribute("string-split-original",e.innerHTML);const t=this.parseSplitOptions(e.getAttribute("string-split"));e.innerHTML=this.split(t,e).html}}parseSplitOptions(t){const e={line:[],word:[],char:[],charLine:[],charWord:[],wordLine:[]};return t&&t.split("|").forEach((t=>{const s=t.match(/^(\w+-)?(\w+)(\[(.*?)\])?$/);if(s){const t=s[1]||"",i=s[2],r=s[4]?s[4].split(","):[];switch(t+i){case"char-line":e.charLine.push(this.parseParam(r));break;case"char-word":e.charWord.push(this.parseParam(r));break;case"word-line":e.wordLine.push(this.parseParam(r));break;case"line":e.line.push(this.parseParam(r));break;case"word":e.word.push(this.parseParam(r));break;case"char":e.char.push(this.parseParam(r))}}})),e}parseParam(t){const e={align:"start"};return t.forEach((t=>{if("abs"===t)e.abs=!0;else if(t.startsWith("random")){const s=t.match(/random\((\d+),(\d+)\)/);s?(e.random={min:parseInt(s[1]),max:parseInt(s[2])},e.align="random"):e.align="random"}else["start","center","end"].includes(t)?e.align=t:e.align="start"})),e}split(t,e){let s=e.getAttribute("string-split-original");if(0===s.length)return"";s=this.decodeHtmlEntity(s);const i=document.createElement("span"),r=s.split(/\s+/);let o=0,n=0;const a=s.replace(/\s/g,"").length,l=document.createElement("span"),h=window.getComputedStyle(e);l.style.fontFamily=h.fontFamily,l.style.fontSize=h.fontSize,l.style.letterSpacing=h.letterSpacing,l.style.lineHeight=h.lineHeight,l.style.fontWeight=h.fontWeight,l.classList.add("-s-char"),document.body.appendChild(l);let c=[],d=[],u=0;r.forEach(((t,s)=>{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,e)=>{const s={text:t};r.chars.push(s)})),u+i>e.offsetWidth&&(c.push(d),d=[],u=0,o+=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 e=0;e<c.length;e++)this.appendVirtualLineToDOM(e,c.length,r.length,i,c[e],t,o,a,m),m+=c[e].length;else for(let e=0;e<c.length;e++)c[e].forEach(((e,s)=>{if(e.chars.length>0){const l=document.createElement("span");l.classList.add("-s-word"),e.chars.forEach(((s,i)=>{const r=document.createElement("span");r.classList.add("-s-char"),r.textContent=s.text,this.applyOptions(r,t.char,o,"char",i,a),this.applyOptions(r,t.charWord,i,"char-word",i,e.text.length),l.appendChild(r),o++})),this.applyOptions(l,t.word,n,"word",s,r.length),e.chars.length>0&&(l.innerHTML+=" "),i.appendChild(l),n++}}));return document.body.removeChild(l),{html:i.innerHTML}}appendVirtualLineToDOM(t,e,s,i,r,o,n,a,l){const h=document.createElement("span");h.classList.add("-s-line"),this.applyOptions(h,o.line,t,"line",0,e);let c=0,d=0,u=0;r.forEach(((t,e)=>{u+=t.text.length})),r.forEach(((t,e)=>{if(t.chars.length>0){const i=document.createElement("span");i.classList.add("-s-word"),t.chars.forEach(((e,s)=>{const r=document.createElement("span");r.classList.add("-s-char"),r.textContent=e.text,this.applyOptions(r,o.char,n,"char",s,a),this.applyOptions(r,o.charLine,c,"char-line",s,u),this.applyOptions(r,o.charWord,s,"char-word",s,t.text.length),i.appendChild(r),n++,c++})),this.applyOptions(i,o.word,l+d,"word",l+d,s-1),this.applyOptions(i,o.wordLine,e,"word-line",e,r.length),e<r.length-1&&(i.innerHTML+=" "),h.appendChild(i),d++}})),i.appendChild(h)}applyOptions(t,e,s,i,r,o){e&&e.forEach(((e,n)=>{let a=this.calculateIndex(e,s,r,o);const l=this.generateVariableName(i,e,n);t.style.setProperty(l,String(a))}))}createSpaceSpan(){const t=document.createElement("span");return t.innerHTML=" ",t}decodeHtmlEntity(t){return t.replace(/&amp;/g,"&")}calculateIndex(t,e,s,i){let r=e;if("random"===t.align){void 0===t.random&&(t.random={min:0,max:i});const e=t.random.min||0,s=t.random.max||i;r=Math.floor(Math.random()*(s-e+1))+e}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,e,s){let i=`--${t}`;return e.align&&(i+=`-${e.align}`),i}}class M{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 _ extends s{constructor(t){super(t),this.callCount=0,this._type=2}createDisplayElement(){this.displayElement=document.createElement("div"),this.displayElement.style.position="fixed",this.displayElement.style.bottom="10px",this.displayElement.style.right="10px",this.displayElement.style.backgroundColor="#C8C2CF",this.displayElement.style.border="1px solid #101214",this.displayElement.style.color="green",this.displayElement.style.zIndex="1000",this.displayElement.setAttribute("data-fps","0"),document.body.appendChild(this.displayElement);const t=document.createElement("style");t.innerHTML="\n [data-fps]::after {\n content: attr(fps);\n position: relative;\n bottom: 0;\n right: 0;\n color: #101214;\n padding: 2px 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 D extends s{constructor(t){super(t),this.callCount=0,this._type=2}createDisplayElement(){this.displayElement=document.createElement("div"),this.displayElement.style.position="fixed",this.displayElement.style.bottom="10px",this.displayElement.style.left="10px",this.displayElement.style.backgroundColor="#C8C2CF",this.displayElement.style.border="1px solid #101214",this.displayElement.style.color="green",this.displayElement.style.zIndex="1000",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(value);\n position: relative;\n bottom: 0;\n right: 0;\n color: #101214;\n padding: 2px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n ",document.head.appendChild(t)}onStart(){this.createDisplayElement()}onScroll(t){this.displayElement.setAttribute("value",`${this.data.c}`)}onUpdate(t){this.callCount++}destructor(){document.body.removeChild(this.displayElement)}}class T{process(t,e,s=null){return null==t.getAttribute(e)?s:t.getAttribute(e)}}class O{process(t){return t.getBoundingClientRect()}}class A{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"}}class W{constructor(){this.eventsByKey=new Map,this.events=new Array}on(t,e){var s;0==this.eventsByKey.has(t)&&this.eventsByKey.set(t,[]),null===(s=this.eventsByKey.get(t))||void 0===s||s.push(e),this.updateAllEvents()}has(t){return this.eventsByKey.has(t)}emit(t,e){var s;this.eventsByKey.has(t)&&(null===(s=this.eventsByKey.get(t))||void 0===s||s.forEach((t=>{t(e)})))}off(t,e){let s=this.eventsByKey.get(t);null!=s&&this.eventsByKey.set(t,s.filter((t=>t!==e))),this.updateAllEvents()}all(t){this.events.forEach((e=>{e(t)}))}updateAllEvents(){Array.from(this.eventsByKey.values()).forEach((t=>{t.forEach((t=>{this.events.push(t)}))}))}}class j{parseSingle(t,e,s,i){let r,o=t.startsWith("-");return o&&(t=t.slice(1)),"selfHeight"===t?r=e.offsetHeight:t.endsWith("px")?r=parseFloat(t):t.endsWith("%")?r=parseFloat(t)*s/100:t.endsWith("rem")&&(r=parseFloat(t)*i),o?-r:r}}class z{process(t,e=document.body){let s;try{s=e.getBoundingClientRect()}catch(t){s=document.body.getBoundingClientRect()}let i=function(t){let{top:e,left:s,width:i,height:r}=t.getBoundingClientRect(),o=function(t){return window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)}))}(t);if(6==o.length){var n=o;let t=n[0]*n[3]-n[1]*n[2];return{width:i/n[0],height:r/n[3],left:(s*n[3]-e*n[2]+n[2]*n[5]-n[4]*n[3])/t,top:(-s*n[1]+e*n[0]+n[4]*n[1]-n[0]*n[5])/t}}return{top:e,left:s,width:i,height:r}}(t);return{top:i.top-s.top,left:i.left-s.left}}}class H{get scrollDirection(){return this.data.sD}set scrollDirection(t){this.data.sD=t,this.sEn.scrollDirection=t,this.sEnSmooth.scrollDirection=t,this.sEnDefault.scrollDirection=t,this.sEnDisable.scrollDirection=t,"horizontal"==t?(document.documentElement.classList.add("-horizontal"),document.documentElement.classList.remove("-vertical")):(document.documentElement.classList.add("-vertical"),document.documentElement.classList.remove("-horizontal")),this.rebuild(),this.initObjects(),this.modules.forEach((t=>{t.onChangeScrollDirection()}))}get speedAccelerate(){return this.settings.speedAccelerate}set speedAccelerate(t){this.settings.speedAccelerate=t}get speedDecelerate(){return this.settings.speedDecelerate}set speedDecelerate(t){this.settings.speedDecelerate=t}get scrollPosition(){return this.data.c}set scrollPosition(t){this.data.c=t,this.data.t=t,window.scrollTo(0,this.data.c),this.modules.forEach((t=>{t.onScroll(this.data)}))}set scrollContainer(t){let e=null!=this.data.sC;e&&(this.data.sC.removeEventListener("scroll",this.onScrollBind),this.data.sC.removeEventListener("resize",this.onResizeBind)),this.sEn.scrollContainer=t,this.sEnSmooth.scrollContainer=t,this.sEnDefault.scrollContainer=t,this.sEnDisable.scrollContainer=t,this.data.sC=t,e&&(this.data.sC.addEventListener("scroll",this.onScrollBind),this.data.sC.addEventListener("resize",this.onResizeBind)),this.rebuild(),this.initObjects()}constructor(){this.modules=new Array,this.modulesUI=new Array,this.events=new W,this.loop=new M,this.wW=0,this.wH=0,this._virtualCursor=new h,this._lerp=new l,this._attribute=new T,this._boundingClientRect=new O,this._position=new z,this.objects=new Map,this.connectQueue=new Array,this.globalId=1,this._parser=new j,this.root=document.body,this.window=window,this.settings=new x,this.data=new A,this.settings.speedAccelerate=.13,this.settings.speedDecelerate=.04,this.sEnSmooth=new P(document,this.settings,this.data),this.sEnDefault=new S(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 H.i||(H.i=new H),H.i}use(t,e=null){const s=new t({data:this.data,lerp:this._lerp,attribute:this._attribute,boundingClientRect:this._boundingClientRect,position:this._position,virtualCursor:this._virtualCursor,events:this.events},e);1==s.type&&this.modules.push(s),2==s.type&&this.modulesUI.push(s)}start(t){this.data.sC.addEventListener("scroll",this.onScrollBind),this.data.sC.addEventListener("resize",this.onResizeBind),this.root.addEventListener("wheel",this.onWheelBind,{passive:!1}),this.root.addEventListener("mousemove",this.onMouseMoveBind),new ResizeObserver((t=>{Array.from(this.objects.values()).forEach((t=>{this.setupObject(t.el,t)}))})).observe(document.body),this.loop.start(t),document.documentElement.classList.add("-string"),this.modules.forEach((t=>{t.onStart()})),this.modulesUI.forEach((t=>{t.onStart()})),this.initObjects(),this.initMutationObserver()}initObjects(){document.querySelectorAll("[string]").forEach((t=>{this.addObject(t)})),document.querySelectorAll("[string-copy-from]").forEach((t=>{let e=this._attribute.process(t,"string-copy-from");if(null!=e&&this.objects.has(e)){let s=this.objects.get(e);null!=s&&s.connects.push(t)}})),this.modules.forEach((t=>{t.onResize(),t.onScroll(this.data),t.onUpdate(this.data)}))}destroy(){this.window.removeEventListener("scroll",this.onScrollBind),this.root.removeEventListener("wheel",this.onScrollBind),this.window.removeEventListener("resize",this.onResizeBind),this.root.removeEventListener("mousemove",this.onMouseMoveBind),this.loop.stop(),this.modules.forEach((t=>{t.destructor()})),this.modulesUI.forEach((t=>{t.destructor()}))}on(t,e,s=""){switch(t){case"scroll":this.events.on("scroll",e);break;case"progress":this.events.on(`progress_${s}`,e);break;case"lerp":this.events.on("lerp",e);break;case"intersection":this.events.on(`intersection_${s}`,e);break;case"inview":this.events.on(`inview_${s}`,e);break;case"cursor":this.events.on("cursor",e)}}off(t,e,s=""){switch(t){case"scroll":this.events.off("scroll",e);break;case"progress":this.events.off(`progress_${s}`,e);break;case"lerp":this.events.off("lerp",e);break;case"intersection":this.events.off(`intersection_${s}`,e);break;case"inview":this.events.off(`inview_${s}`,e);break;case"cursor":this.events.off("cursor",e)}}setupObject(t,e){var s,i,r;null===(s=e.showObserver)||void 0===s||s.disconnect(),null===(i=e.progressObserver)||void 0===i||i.disconnect(),null===(r=e.inviewObserver)||void 0===r||r.disconnect();let o=this._boundingClientRect.process(t),n=o.width/this.data.scsW,a=o.height/this.data.scsH,l=this._attribute.process(t,"string-enter-el")||"top",h=this._attribute.process(t,"string-enter-vp")||"bottom",c=this._attribute.process(t,"string-exit-el")||"bottom",d=this._attribute.process(t,"string-exit-vp")||"top";e.selfDisable=null!=this._attribute.process(t,"string-self-disable"),e.abs=null!=this._attribute.process(t,"string-abs");let u=this._attribute.process(t,"string-cursor-target");null!=u&&(e.cursorTarget=document.querySelector(`[string-cursor-content="${u}"]`)),e.id=this._attribute.process(t,"string-id",`string-${this.globalId}`),e.key=this._attribute.process(t,"string-key","--progress"),e.strength=this._attribute.process(t,"string-strength",.3),e.radius=this._attribute.process(t,"string-radius",150),e.lerp=this._attribute.process(t,"string-lerp",.2);let p=this._attribute.process(t,"string-parallax-bias",0);e.parallaxPositionStart=.5*p-.5,e.parallaxPositionEnd=.5+.5*(1-p),t.setAttribute("string-id",e.id),"vertical"==this.data.sD?e.size=a:e.size=n,e.oStart=-1*this._parser.parseSingle(this._attribute.process(t,"string-offset-start","0%"),t,this.data.wS,16),e.oEnd=-1*this._parser.parseSingle(this._attribute.process(t,"string-offset-end","0%"),t,this.data.wS,16);let m=-1*this._parser.parseSingle(this._attribute.process(t,"string-offset-start","0%"),t,this.data.wS,16),g=-1*this._parser.parseSingle(this._attribute.process(t,"string-offset-end","0%"),t,this.data.wS,16);e.factor=this._attribute.process(t,"string-parallax",0),e.oStart+=e.factor*this.data.wS*.5,e.oEnd+=e.factor*this.data.wS*.5,e.repeat=null!=this._attribute.process(t,"string-repeat"),e.sElPos=l,e.sScrPos=h,e.eElPos=c,e.eScrPos=d,e.halfWidth=n/2,e.halfHeight=a/2;let v=this.data.wS;if("vertical"==this.data.sD){let s=this._position.process(t,this.data.sC).top/this.data.scsH;e.start=s,e.end=s+a}else{let s=this._position.process(t,this.data.sC).left/this.data.scsW;e.start=s,e.end=s+n}e.calculatePositions(v);let b,y,E=this.connectQueue.filter((t=>t.id==e.id));this.connectQueue=this.connectQueue.filter((t=>t.id!=e.id)),E.forEach((t=>{e.connects.push(t.element)})),"vertical"==this.data.sD?(b={root:null,rootMargin:`${m+this.data.wS}px 0px ${g+this.data.wS}px 0px`,threshold:.001},y={root:null,rootMargin:`${m}px 0px ${g}px 0px`,threshold:.001}):(b={root:null,rootMargin:`0px ${m+this.data.wS}px 0px ${g+this.data.wS}px`,threshold:.001},y={root:null,rootMargin:`0px ${m}px 0px ${g}px`,threshold:.001});let f=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?0==e.active&&(this.events.emit(`activate_object_${e.id}`,!0),e.enter()):1==e.active&&(this.events.emit(`activate_object_${e.id}`,!1),e.leave())}))}),b),w=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?(this.events.emit(`intersection_${e.id}`,!0),e.show()):(this.events.emit(`intersection_${e.id}`,!1),e.hide())}))}),y),S=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?this.events.emit(`inview_${e.id}`,!0):this.events.emit(`inview_${e.id}`,!1)}))}),{root:null,rootMargin:"0px 0px 0px 0px",threshold:.001});f.observe(t),w.observe(t),S.observe(t),e.showObserver=w,e.progressObserver=f,e.inviewObserver=S}addObject(t){let e,s=this._attribute.process(t,"string-inited");e=null==s?new m(t):this.objects.get(this._attribute.process(t,"string-id")),t.setAttribute("string-inited",""),this.setupObject(t,e),this.modules.forEach((t=>{t.tryConnect(e)&&t.connect(e)})),this.objects.set(e.id,e),this.globalId++}removeObject(t){let e=this.objects.get(t);null!=(null==e?void 0:e.showObserver)&&(null==e||e.showObserver.disconnect()),null!=(null==e?void 0:e.progressObserver)&&(null==e||e.progressObserver.disconnect()),null!=(null==e?void 0:e.inviewObserver)&&(null==e||e.inviewObserver.disconnect()),this.objects.delete(t),null==e||e.el.removeAttribute("string-inited"),null==e||e.leave(),e=void 0}onMouseMoveEvent(t){this._virtualCursor.onMouseMove(t),this.modules.forEach((e=>{e.onMouseMove(t)})),this.modulesUI.forEach((e=>{e.onMouseMove(t)}))}onWheelEvent(t){this.sEn.onWheel(t),this.modules.forEach((e=>{e.onWheel(t)})),this.modulesUI.forEach((e=>{e.onWheel(t)}))}onScrollEvent(t){this.modules.forEach((t=>{t.onScroll(this.data)})),this.modulesUI.forEach((t=>{t.onScroll(this.data)})),this.events.emit("lerp",this.data.v),this.events.emit("scroll",this.data.c)}onUpdateEvent(){this._virtualCursor.onUpdate(),this.sEn.onUpdate(),this.modules.forEach((t=>{t.onUpdate(this.data)})),this.modulesUI.forEach((t=>{t.onUpdate(this.data)}))}onResizeEvent(){try{let t=this.sEn.scrollContainer.getBoundingClientRect();this.wW=t.width,this.wH=t.height}catch(t){this.wW=this.sEn.scrollContainer.innerWidth,this.wH=this.sEn.scrollContainer.innerHeight}("vertical"==this.data.sD&&this.wW!=this.data.wS||this.window.innerWidth>1024||"horizontal"==this.data.sD&&this.wW!=this.data.wS||this.window.innerWidth>1024)&&(this.rebuild(),this.modules.forEach((t=>{t.onResize()})),this.modulesUI.forEach((t=>{t.onResize()})))}initMutationObserver(){new MutationObserver((t=>{t.forEach((t=>{"childList"===t.type&&(t.addedNodes.length>0&&t.addedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]:not([string-inited])").forEach((t=>{this.addObject(t);let e=this._attribute.process(t,"string-copy-from");if(null!=e)if(this.objects.has(e)){let s=this.objects.get(e);null!=s&&s.connects.push(t)}else this.connectQueue.push({id:e,element:t})}))})),t.removedNodes.length>0&&t.removedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]").forEach((t=>{let e=t.getAttribute("string-id"),s=this._attribute.process(t,"string-copy-from");null!=s&&(this.connectQueue=this.connectQueue.filter((t=>t.id!=s))),null!=e&&this.removeObject(e)}))})),(t.addedNodes.length>0||t.removedNodes.length>0)&&this.modules.forEach((t=>{t.onRebuild()})))}))})).observe(document.body,{attributes:!1,childList:!0,subtree:!0})}rebuild(){try{let e=(t=this.data.sC,window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)})));this.data.scsW=e[0],this.data.scsH=e[3]}catch(t){this.data.scsW=1,this.data.scsH=1}var t;try{let t=this.data.sC.getBoundingClientRect();this.wW=t.width/this.data.scsW,this.wH=t.height/this.data.scsH}catch(t){this.wW=this.data.sC.innerWidth,this.wH=this.data.sC.innerHeight}let e=document.body,s=document.documentElement;this.data.psW=this.data.sC.scrollWidth,this.data.psH=this.data.sC.scrollHeight,null==this.data.psW&&(this.data.psW=Math.max(e.scrollWidth,e.offsetWidth,s.clientWidth,s.scrollWidth,s.offsetWidth)),null==this.data.psH&&(this.data.psH=Math.max(e.scrollHeight,e.offsetHeight,s.clientHeight,s.scrollHeight,s.offsetHeight)),"vertical"==this.data.sD?(this.data.bS=this.data.psH-this.wH,this.data.wS=this.wH):(this.data.bS=this.data.psW-this.wW,this.data.wS=this.wW),this.data.hnwS=-.5*this.data.wS}}return e})()));
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:()=>f,StringFPSTracker:()=>_,StringLazy:()=>i,StringLoading:()=>r,StringMagnetic:()=>a,StringParallax:()=>E,StringPositionTracker:()=>O,StringProgress:()=>y,StringScrollbar:()=>b,StringSplit:()=>L,StringTune:()=>H,StringVideoAutoplay:()=>n,default:()=>H});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(){}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["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["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.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.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}}class g{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 v{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 b extends e{constructor(t){super(t),this.isDragging=!1,this.startY=0,this.startScrollTop=0,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("-without-scrollbar")}onScroll(t){this.updateThumb(),this.showScrollbar(),this.hideScrollbar()}onResize(){this.scrollbarState.onResize()}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 g(this.data,this.scrollbar,this.thumb),this.scrollbarStateVertical=new v(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 f extends e{constructor(t){super(t),this.htmlKey="displacement."}onScroll(t){document.documentElement.style.setProperty("--lerp",t.v.toString())}}class E extends e{constructor(t){super(t),this.setupParallax=(t,s)=>{},this.htmlKey="parallax"}onConnect(t){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 y 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 S{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 w extends S{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}onWheel(t){}onScroll(t){this.data.c=this.d.documentElement.scrollTop,this.data.t=this.d.documentElement.scrollTop,this.data.d=0}}class x extends S{constructor(t,s,e){super(t,s,e),this.name="disable"}onUpdate(){}onWheel(t){}onScroll(t){t.preventDefault()}}class C extends S{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))}onScroll(t){t.preventDefault(),0==this.isProg&&(this.data.v=this.d.documentElement.scrollTop-this.data.c,this.data.c=this.d.documentElement.scrollTop,this.data.t=this.d.documentElement.scrollTop,this.data.d=0,this.onCalcUpdate())}}class P{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 L 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 M{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 _ 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="#C8C2CF",this.displayElement.style.border="1px solid #101214",this.displayElement.style.zIndex="1000",this.displayElement.setAttribute("data-fps","0"),document.body.appendChild(this.displayElement);const t=document.createElement("style");t.innerHTML="\n [data-fps]::after {\n content: attr(fps);\n position: relative;\n bottom: 0;\n right: 0;\n color: #101214;\n padding: 2px 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 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.left="10px",this.displayElement.style.backgroundColor="#C8C2CF",this.displayElement.style.border="1px solid #101214",this.displayElement.style.color="green",this.displayElement.style.zIndex="1000",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(value);\n position: relative;\n bottom: 0;\n right: 0;\n color: #101214;\n padding: 2px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n ",document.head.appendChild(t)}onStart(){this.createDisplayElement()}onScroll(t){this.displayElement.setAttribute("value",`${this.data.c}`)}onUpdate(t){this.callCount++}destructor(){document.body.removeChild(this.displayElement)}}class D{process(t,s,e=null){return null==t.getAttribute(s)?e:t.getAttribute(s)}}class T{process(t){return t.getBoundingClientRect()}}class A{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"}}class W{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 j{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 z{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],height:r/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}}}class H{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()}constructor(){this.modules=new Array,this.modulesUI=new Array,this.events=new W,this.loop=new M,this.wW=0,this.wH=0,this._virtualCursor=new h,this._lerp=new l,this._attribute=new D,this._boundingClientRect=new T,this._position=new z,this.objects=new Map,this.connectQueue=new Array,this.globalId=1,this._parser=new j,this.defaultSettings={stringOffsetStart:"0%",stringOffsetEnd:"0%",stringEnterEl:"top",stringExitEl:"bottom",stringEnterVp:"bottom",stringExitVp:"top",stringKey:"--progress",stringStrength:.3,stringRadius:150,stringLerp:.2,stringParallaxBias:0,stringParallax:0},this.root=document.body,this.window=window,this.settings=new P,this.data=new A,this.settings.speedAccelerate=.13,this.settings.speedDecelerate=.04,this.sEnSmooth=new C(document,this.settings,this.data),this.sEnDefault=new w(document,this.settings,this.data),this.sEnDisable=new x(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 H.i||(H.i=new H),H.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()}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-start"]&&(this.defaultSettings.stringOffsetStart=t["string-offset-start"]),null!=t["string-offset-end"]&&(this.defaultSettings.stringOffsetEnd=t["string-offset-end"]),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-enter-vp")||this.defaultSettings.stringEnterVp,c=this._attribute.process(t,"string-exit-el")||this.defaultSettings.stringExitEl,d=this._attribute.process(t,"string-exit-vp")||this.defaultSettings.stringExitVp;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=-1*this._parser.parseSingle(this._attribute.process(t,"string-offset-start",this.defaultSettings.stringOffsetStart),t,this.data.wS,16),s.oEnd=-1*this._parser.parseSingle(this._attribute.process(t,"string-offset-end",this.defaultSettings.stringOffsetEnd),t,this.data.wS,16);let m=-1*this._parser.parseSingle(this._attribute.process(t,"string-offset-start",this.defaultSettings.stringOffsetStart),t,this.data.wS,16),g=-1*this._parser.parseSingle(this._attribute.process(t,"string-offset-end",this.defaultSettings.stringOffsetEnd),t,this.data.wS,16);s.factor=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=h,s.eElPos=c,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 b,f,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?(b={root:null,rootMargin:`${m+this.data.wS}px 0px ${g+this.data.wS}px 0px`,threshold:.001},f={root:null,rootMargin:`${m}px 0px ${g}px 0px`,threshold:.001}):(b={root:null,rootMargin:`0px ${m+this.data.wS}px 0px ${g+this.data.wS}px`,threshold:.001},f={root:null,rootMargin:`0px ${m}px 0px ${g}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())}))}),b),S=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?(this.events.emit(`intersection_${s.id}`,!0),s.show()):(this.events.emit(`intersection_${s.id}`,!1),s.hide())}))}),f),w=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?this.events.emit(`inview_${s.id}`,!0):this.events.emit(`inview_${s.id}`,!1)}))}),{root:null,rootMargin:"0px 0px 0px 0px",threshold:.001});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.get(this._attribute.process(t,"string-id")),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.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}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}}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/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 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';\nimport { StringModule } from '../../StringModule';\n\nexport class StringLazy extends StringModule {\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'lazy';\n }\n\n onStart(): void {\n const imagesEls = document.querySelectorAll('img[string-lazy]');\n imagesEls.forEach((element: any) => {\n this.getImageSize(element, element.getAttribute('string-lazy'));\n element.classList.add(`lazyLoad`);\n element.src = element.getAttribute('string-lazy') as any;\n element.addEventListener('load', () => {\n element.classList.add(`-loaded`);\n });\n });\n }\n\n onConnect(object: StringObject) {\n const element = object.el as HTMLVideoElement;\n }\n\n private getImageSize(element: HTMLElement, url: string) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status === 206 || xhr.status === 200) {\n const buffer = xhr.response;\n const blob = new Blob([buffer]);\n const img = new Image();\n img.onload = () => {\n element.style.aspectRatio = `${img.width} / ${img.height}`;\n resolve({ width: img.width, height: img.height });\n URL.revokeObjectURL(img.src);\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n img.src = URL.createObjectURL(blob);\n } else {\n reject(new Error('Failed to load image'));\n }\n };\n xhr.onerror = () => {\n reject(new Error('Network error'));\n };\n xhr.setRequestHeader('Range', 'bytes=0-');\n xhr.send();\n });\n }\n}\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 if (settings != null) {\r\n if (settings.lerp != null) {\r\n this.lerpFactor = settings.lerp;\r\n }\r\n }\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 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 { StringModule } from \"../../StringModule\";\r\nimport { StringObject } from \"../../Objects/StringObject\";\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 }\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 \r\n object.magneticTargetX = 0\r\n object.magneticTargetY = 0\r\n }\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}\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 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 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;\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\r\n this.differencePos = this.endPos - this.startPos;\r\n }\r\n}\r\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 startY: number = 0;\r\n private startScrollTop: number = 0;\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(`-without-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 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 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 constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'displacement.';\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n document.documentElement.style.setProperty('--lerp', data.v.toString());\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 constructor(visitor: any) {\r\n super(visitor)\r\n this.htmlKey = 'parallax'\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, ${(object.factor * this.data.wS * object.parallaxPositionStart)\r\n + (progress * object.factor * this.data.wS * object.parallaxPositionEnd)}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(${(object.factor * this.data.wS * object.parallaxPositionStart)\r\n + (progress * object.factor * this.data.wS * object.parallaxPositionEnd)}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}","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 onWheel(e: any) {\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\r\n public onWheel(e: any) {\r\n }\r\n\r\n public onScroll(e: any) {\r\n e.preventDefault()\r\n\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 public onScroll(e: any) {\r\n e.preventDefault();\r\n if (this.isProg == false) {\r\n this.data.v = this.d.documentElement.scrollTop - this.data.c;\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 this.onCalcUpdate();\r\n // window.scrollTo(this.data.c, 0);\r\n // window.scrollTo(0, this.data.t)\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\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\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 = '#C8C2CF';\r\n this.displayElement.style.border = '1px solid #101214';\r\n this.displayElement.style.color = 'green';\r\n this.displayElement.style.zIndex = '1000';\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: attr(fps);\r\n position: relative;\r\n bottom: 0;\r\n right: 0;\r\n color: #101214;\r\n padding: 2px 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}\r\n","import { StringModule } from \"../StringModule\";\r\nimport { StringData } from \"../Utils/StringData\";\r\n\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\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 = '#C8C2CF';\r\n this.displayElement.style.border = '1px solid #101214';\r\n this.displayElement.style.color = 'green';\r\n this.displayElement.style.zIndex = '1000';\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(value);\r\n position: relative;\r\n bottom: 0;\r\n right: 0;\r\n color: #101214;\r\n padding: 2px 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 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}\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}","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}\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],\r\n height: height / 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 { 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\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 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 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 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`) || 'top';\r\n let startSourcePosition = this._attribute.process(el, `string-enter-vp`) || 'bottom';\r\n let endElementPosition = this._attribute.process(el, `string-exit-el`) || 'bottom';\r\n let endSourcePosition = this._attribute.process(el, `string-exit-vp`) || 'top';\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`, `--progress`);\r\n\r\n object.strength = this._attribute.process(el, 'string-strength', 0.3);\r\n object.radius = this._attribute.process(el, 'string-radius', 150);\r\n object.lerp = this._attribute.process(el, 'string-lerp', 0.2);\r\n\r\n let parallaxPosition = this._attribute.process(el, 'string-parallax-bias', 0.0);\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(this._attribute.process(el, `string-offset-start`, '0%'), el, this.data.wS, 16) * -1;\r\n object.oEnd = this._parser.parseSingle(this._attribute.process(el, `string-offset-end`, '0%'), el, this.data.wS, 16) * -1;\r\n\r\n let observerStart = this._parser.parseSingle(this._attribute.process(el, `string-offset-start`, '0%'), el, this.data.wS, 16) * -1;\r\n let observerEnd = this._parser.parseSingle(this._attribute.process(el, `string-offset-end`, '0%'), el, this.data.wS, 16) * -1;\r\n\r\n object.factor = this._attribute.process(el, `string-parallax`, 0);\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 callbackShow = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`intersection_${object.id}`, true);\r\n object.show();\r\n } else {\r\n this.events.emit(`intersection_${object.id}`, false);\r\n object.hide();\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 } else {\r\n this.events.emit(`inview_${object.id}`, false);\r\n }\r\n });\r\n };\r\n\r\n let optionsProgress: any;\r\n let optionsShow: 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 optionsShow = {\r\n root: null,\r\n rootMargin: `${observerStart}px 0px ${observerEnd}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 optionsShow = {\r\n root: null,\r\n rootMargin: `0px ${observerStart}px 0px ${observerEnd}px`,\r\n threshold: 0.001,\r\n };\r\n }\r\n\r\n let optionsInview = {\r\n root: null,\r\n rootMargin: `0px 0px 0px 0px`,\r\n threshold: 0.001,\r\n };\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obShow = new IntersectionObserver(callbackShow, optionsShow);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n obProgress.observe(el);\r\n obShow.observe(el);\r\n obInview.observe(el);\r\n\r\n object.showObserver = obShow;\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 object = this.objects.get(this._attribute.process(el, 'string-id'));\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.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 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 }\r\n}\r\n\r\n\r\n \r\nexport {\r\n StringTune as default,\r\n StringCursor, StringDisplacement, StringFPSTracker, StringLazy,\r\n StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, 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","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","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","Math","sqrt","radius","magneticTargetX","strength","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","sElPos","sScrPos","eElPos","eScrPos","parallaxPositionStart","parallaxPositionEnd","showObserver","progressObserver","inviewObserver","repeat","active","abs","modules","enter","leave","show","hide","push","calculatePositions","windowSize","StringScrollbarHorizontal","scrollbar","thumb","isDragging","startY","startScrollPosition","contentSize","psH","visibleSize","wS","thumbSize","updateThumb","contentHeight","visibleHeight","c","mouseDownEvent","mouseMoveEvent","deltaY","newScrollPosition","t","window","scrollTo","StringScrollbarVertical","startCoordinate","psW","contentWidth","visibleWidth","deltaX","StringScrollbar","startScrollTop","mouseUpEventBind","mouseUpEvent","bind","mouseDownEventBind","mouseMoveEventBind","createScrollbar","addCustomStyles","showScrollbar","hideScrollbar","scrollbarState","sD","scrollbarStateVertical","scrollbarStateHorizontal","createElement","textContent","head","appendChild","body","userSelect","scrollTimeout","clearTimeout","StringDisplacement","v","StringParallax","setupParallax","progress","min","max","transformCompute","transform","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","undefined","StringFPS","isAnimationStarted","requestAnimationId","onFrame","fps","fpsInterval","Date","now","animate","stop","cancelAnimationFrame","requestAnimationFrame","elapsed","StringFPSTracker","callCount","createDisplayElement","displayElement","bottom","right","backgroundColor","border","color","zIndex","intervalId","setInterval","clearInterval","StringPositionTracker","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","StringTune","sEn","sEnSmooth","sEnDefault","sEnDisable","rebuild","initObjects","scrollPosition","isUpdateEvents","onScrollBind","onResizeBind","modulesUI","loop","wW","_virtualCursor","_lerp","_attribute","_boundingClientRect","_position","connectQueue","globalId","_parser","onWheelBind","onWheelEvent","onScrollEvent","onResizeEvent","onMouseMoveBind","onMouseMoveEvent","onUpdateEvent","getInstance","use","objectClass","passive","ResizeObserver","entries","setupObject","observe","initMutationObserver","connectTargetId","connectTargetObject","destroy","disconnect","r","rW","rH","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","targetQuery","parallaxPosition","observerStart","observerEnd","optionsProgress","optionsShow","connectItems","connectQueueItem","connectItem","rootMargin","threshold","obProgress","IntersectionObserver","es","isIntersecting","obShow","obInview","isInit","removedObject","removeAttribute","innerWidth","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/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 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['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\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['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 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 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 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;\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\r\n this.differencePos = this.endPos - this.startPos;\r\n }\r\n}\r\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 startY: number = 0;\r\n private startScrollTop: number = 0;\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(`-without-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 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 constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'displacement.';\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n document.documentElement.style.setProperty('--lerp', data.v.toString());\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 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['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 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 onWheel(e: any) {\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\r\n public onWheel(e: any) {\r\n }\r\n\r\n public onScroll(e: any) {\r\n e.preventDefault()\r\n\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 public onScroll(e: any) {\r\n e.preventDefault();\r\n if (this.isProg == false) {\r\n this.data.v = this.d.documentElement.scrollTop - this.data.c;\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 this.onCalcUpdate();\r\n // window.scrollTo(this.data.c, 0);\r\n // window.scrollTo(0, this.data.t)\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 = '#C8C2CF';\r\n this.displayElement.style.border = '1px solid #101214';\r\n this.displayElement.style.zIndex = '1000';\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: attr(fps);\r\n position: relative;\r\n bottom: 0;\r\n right: 0;\r\n color: #101214;\r\n padding: 2px 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\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\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 = '#C8C2CF';\r\n this.displayElement.style.border = '1px solid #101214';\r\n this.displayElement.style.color = 'green';\r\n this.displayElement.style.zIndex = '1000';\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(value);\r\n position: relative;\r\n bottom: 0;\r\n right: 0;\r\n color: #101214;\r\n padding: 2px 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 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}\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}","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}\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],\r\n height: height / 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 { 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\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 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 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 stringEnterEl: 'top',\r\n stringExitEl: 'bottom',\r\n stringEnterVp: 'bottom',\r\n stringExitVp: 'top',\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.0,\r\n };\r\n\r\n public setupSettings(settings: any) {\r\n if (settings['string-offset-start'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-start'];\r\n }\r\n if (settings['string-offset-end'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-end'];\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 startSourcePosition = this._attribute.process(el, `string-enter-vp`) || this.defaultSettings.stringEnterVp;\r\n let endElementPosition = this._attribute.process(el, `string-exit-el`) || this.defaultSettings.stringExitEl;\r\n let endSourcePosition = this._attribute.process(el, `string-exit-vp`) || this.defaultSettings.stringExitVp;\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 =\r\n this._parser.parseSingle(\r\n this._attribute.process(el, `string-offset-start`, this.defaultSettings.stringOffsetStart),\r\n el,\r\n this.data.wS,\r\n 16\r\n ) * -1;\r\n object.oEnd =\r\n this._parser.parseSingle(\r\n this._attribute.process(el, `string-offset-end`, this.defaultSettings.stringOffsetEnd),\r\n el,\r\n this.data.wS,\r\n 16\r\n ) * -1;\r\n\r\n let observerStart =\r\n this._parser.parseSingle(\r\n this._attribute.process(el, `string-offset-start`, this.defaultSettings.stringOffsetStart),\r\n el,\r\n this.data.wS,\r\n 16\r\n ) * -1;\r\n let observerEnd =\r\n this._parser.parseSingle(\r\n this._attribute.process(el, `string-offset-end`, this.defaultSettings.stringOffsetEnd),\r\n el,\r\n this.data.wS,\r\n 16\r\n ) * -1;\r\n\r\n object.factor = 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 callbackShow = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`intersection_${object.id}`, true);\r\n object.show();\r\n } else {\r\n this.events.emit(`intersection_${object.id}`, false);\r\n object.hide();\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 } else {\r\n this.events.emit(`inview_${object.id}`, false);\r\n }\r\n });\r\n };\r\n\r\n let optionsProgress: any;\r\n let optionsShow: 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 optionsShow = {\r\n root: null,\r\n rootMargin: `${observerStart}px 0px ${observerEnd}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 optionsShow = {\r\n root: null,\r\n rootMargin: `0px ${observerStart}px 0px ${observerEnd}px`,\r\n threshold: 0.001,\r\n };\r\n }\r\n\r\n let optionsInview = {\r\n root: null,\r\n rootMargin: `0px 0px 0px 0px`,\r\n threshold: 0.001,\r\n };\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obShow = new IntersectionObserver(callbackShow, optionsShow);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n obProgress.observe(el);\r\n obShow.observe(el);\r\n obInview.observe(el);\r\n\r\n object.showObserver = obShow;\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 object = this.objects.get(this._attribute.process(el, 'string-id'));\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.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 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 }\r\n}\r\n\r\n\r\n \r\nexport {\r\n StringTune as default,\r\n StringCursor, StringDisplacement, StringFPSTracker, StringLazy,\r\n StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, 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","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","sElPos","sScrPos","eElPos","eScrPos","parallaxPositionStart","parallaxPositionEnd","showObserver","progressObserver","inviewObserver","repeat","active","abs","modules","enter","leave","show","hide","push","calculatePositions","windowSize","StringScrollbarHorizontal","scrollbar","thumb","isDragging","startY","startScrollPosition","contentSize","psH","visibleSize","wS","thumbSize","updateThumb","contentHeight","visibleHeight","c","mouseDownEvent","mouseMoveEvent","deltaY","newScrollPosition","t","window","scrollTo","StringScrollbarVertical","startCoordinate","psW","contentWidth","visibleWidth","deltaX","StringScrollbar","startScrollTop","mouseUpEventBind","mouseUpEvent","bind","mouseDownEventBind","mouseMoveEventBind","createScrollbar","addCustomStyles","showScrollbar","hideScrollbar","scrollbarState","sD","scrollbarStateVertical","scrollbarStateHorizontal","createElement","textContent","head","appendChild","body","userSelect","scrollTimeout","clearTimeout","StringDisplacement","v","StringParallax","setupParallax","progress","parallaxPosition","min","max","transformCompute","transform","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","undefined","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","color","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","StringTune","sEn","sEnSmooth","sEnDefault","sEnDisable","rebuild","initObjects","scrollPosition","isUpdateEvents","onScrollBind","onResizeBind","modulesUI","loop","wW","_virtualCursor","_lerp","_attribute","_boundingClientRect","_position","connectQueue","globalId","_parser","defaultSettings","stringOffsetStart","stringOffsetEnd","stringEnterEl","stringExitEl","stringEnterVp","stringExitVp","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","startSourcePosition","endElementPosition","endSourcePosition","targetQuery","observerStart","observerEnd","optionsProgress","optionsShow","connectItems","connectQueueItem","connectItem","rootMargin","threshold","obProgress","IntersectionObserver","es","isIntersecting","obShow","obInview","isInit","removedObject","removeAttribute","innerWidth","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.4",
3
+ "version": "0.0.5",
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",