@fiddle-digital/string-tune 0.0.30 → 0.0.32

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.
@@ -7,6 +7,7 @@ export declare class String3DModel extends StringModule {
7
7
  private scene;
8
8
  private types;
9
9
  constructor(visitor: any, settings?: any);
10
+ initObject(object: StringObject, el: any): void;
10
11
  onStart(): void;
11
12
  onConnect(object: StringObject): void;
12
13
  onUpdate(data: StringData): void;
@@ -17,6 +17,7 @@ export interface IStringModule {
17
17
  onChangeScrollDirection(): void;
18
18
  onMutationObserver(added: NodeList, removed: NodeList): void;
19
19
  onChangeScrollParams(): void;
20
+ initObject(object: StringObject, el: HTMLElement): void;
20
21
  tryConnect(object: StringObject): boolean;
21
22
  connect(object: StringObject): void;
22
23
  addObject(id: string, object: StringObject): void;
@@ -1,8 +1,11 @@
1
1
  import { StringObject } from '../../Objects/StringObject';
2
2
  import { StringModule } from '../../StringModule';
3
3
  export declare class StringLazy extends StringModule {
4
+ private isStartLoaded;
5
+ private imageLoadingCount;
4
6
  constructor(visitor: any);
5
7
  onStart(): void;
6
8
  onConnect(object: StringObject): void;
9
+ private load;
7
10
  private getImageSize;
8
11
  }
@@ -2,7 +2,6 @@ import { StringObject } from '../../Objects/StringObject';
2
2
  import { StringModule } from '../../StringModule';
3
3
  import { StringData } from '../../Utils/StringData';
4
4
  export declare class StringCursor extends StringModule {
5
- private lerpFactor;
6
5
  private oldX;
7
6
  private oldY;
8
7
  protected enterObjectsMap: Map<string, StringObject>;
@@ -13,6 +13,8 @@ export declare class StringVirtualCursor {
13
13
  get smoothY(): number;
14
14
  get lerpX(): number;
15
15
  get lerpY(): number;
16
+ set mouseLerp(value: number);
17
+ constructor(mouseLerp?: number);
16
18
  onMouseMove(e: MouseEvent): void;
17
19
  onUpdate(): void;
18
20
  }
@@ -35,6 +35,7 @@ export declare class StringObject {
35
35
  progress: number;
36
36
  connects: Array<HTMLElement>;
37
37
  cursorTarget: any;
38
+ cursorTargetClass: string;
38
39
  key: string;
39
40
  showObserver: IntersectionObserver | null;
40
41
  progressObserver: IntersectionObserver | null;
@@ -49,6 +50,10 @@ export declare class StringObject {
49
50
  onEnter: () => void;
50
51
  onLeave: () => void;
51
52
  private modules;
53
+ anchor: string;
54
+ intensity3D: number;
55
+ distance3D: number;
56
+ decay3D: number;
52
57
  type3D: string;
53
58
  material3D: string;
54
59
  color3D: string;
@@ -0,0 +1,9 @@
1
+ import { StringObject } from '../../Objects/StringObject';
2
+ import { StringModule } from '../../StringModule';
3
+ export declare class StringAnchor extends StringModule {
4
+ oldLerp: number;
5
+ constructor(visitor: any);
6
+ initObject(object: StringObject, el: any): void;
7
+ onConnect(object: StringObject): void;
8
+ private parseOrig;
9
+ }
@@ -6,6 +6,7 @@ export declare class StringScrollSmooth extends StringScroll {
6
6
  private isScrollbarManipulation;
7
7
  private isBottomScrollDirection;
8
8
  private readonly velocityThreshold;
9
+ private previousCurrent;
9
10
  constructor(document: any, settings: StringTypeSettings, data: StringData);
10
11
  private updateScrollDirection;
11
12
  private clamp;
@@ -1,8 +1,11 @@
1
1
  export declare class StringTypeSettings {
2
2
  private sC;
3
3
  private sA;
4
+ private mL;
4
5
  get speed(): number;
5
6
  get speedAccelerate(): number;
6
7
  set speedAccelerate(speed: number);
7
8
  set speed(speed: number);
9
+ get mouseLerp(): number;
10
+ set mouseLerp(mouseLerp: number);
8
11
  }
@@ -24,6 +24,7 @@ export declare class StringModule implements IStringModule {
24
24
  protected _type: number;
25
25
  get type(): number;
26
26
  constructor(visitor: any, settings?: any);
27
+ initObject(object: StringObject, el: HTMLElement): void;
27
28
  onScrollStart(): void;
28
29
  onScrollStop(): void;
29
30
  onChangeDirection(): void;
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ import { StringMagnetic } from './Mouse/Modules/StringMagnetic';
6
6
  import { StringObject } from './Objects/StringObject';
7
7
  import { StringResponsive } from './Screen/StringResponsive';
8
8
  import { StringScrollbar } from './Scroll/Modules/Scrollbar/StringScrollbar';
9
+ import { StringAnchor } from './Scroll/Modules/StringAnchor';
9
10
  import { StringGlide } from './Scroll/Modules/StringGlide';
10
11
  import { StringLerp } from './Scroll/Modules/StringLerp';
11
12
  import { StringParallax } from './Scroll/Modules/StringParallax';
@@ -51,6 +52,8 @@ declare class StringTune {
51
52
  set speedAccelerate(speed: number);
52
53
  get speed(): number;
53
54
  set speed(speed: number);
55
+ get mouseLerp(): number;
56
+ set mouseLerp(mouseLerp: number);
54
57
  get scrollPosition(): number;
55
58
  set scrollPosition(scrollPosition: number);
56
59
  set scrollContainer(container: any);
@@ -67,8 +70,8 @@ declare class StringTune {
67
70
  private onChangeScrollParams;
68
71
  private initObjects;
69
72
  destroy(): void;
70
- on(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id?: string): void;
71
- off(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id?: string): void;
73
+ on(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor' | 'lazy-loaded' | 'update', event: any, id?: string): void;
74
+ off(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor' | 'lazy-loaded' | 'update', event: any, id?: string): void;
72
75
  private defaultSettings;
73
76
  setupSettings(settings: any): void;
74
77
  protected setupObject(el: HTMLElement, object: StringObject): void;
@@ -85,4 +88,4 @@ declare class StringTune {
85
88
  private initMutationObserver;
86
89
  private rebuild;
87
90
  }
88
- export { StringTune as default, StringCursor, StringDelayLerpTracker, StringFPSTracker, StringGlide, StringLazy, StringLerp, StringLerpTracker, StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, StringResponsive, StringScrollbar, StringSplit, StringTune as StringTune, StringVideoAutoplay };
91
+ export { StringTune as default, StringCursor, StringDelayLerpTracker, StringFPSTracker, StringGlide, StringLazy, StringLerp, StringLerpTracker, StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, StringResponsive, StringScrollbar, StringSplit, StringAnchor, StringTune as StringTune, StringVideoAutoplay };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(t,s){"object"==typeof exports&&"object"==typeof module?module.exports=s():"function"==typeof define&&define.amd?define([],s):"object"==typeof exports?exports.StringTune=s():t.StringTune=s()}(this,(()=>(()=>{"use strict";var t={d:(s,e)=>{for(var i in e)t.o(e,i)&&!t.o(s,i)&&Object.defineProperty(s,i,{enumerable:!0,get:e[i]})},o:(t,s)=>Object.prototype.hasOwnProperty.call(t,s),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},s={};t.r(s),t.d(s,{StringCursor:()=>r,StringDelayLerpTracker:()=>H,StringFPSTracker:()=>W,StringGlide:()=>E,StringLazy:()=>i,StringLerp:()=>w,StringLerpTracker:()=>k,StringLoading:()=>n,StringMagnetic:()=>a,StringParallax:()=>M,StringPositionTracker:()=>U,StringProgress:()=>x,StringResponsive:()=>v,StringScrollbar:()=>y,StringSplit:()=>O,StringTune:()=>q,StringVideoAutoplay:()=>o,default:()=>q});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.loop=t.loop,this.settings=s}onScrollStart(){}onScrollStop(){}onChangeDirection(){}destructor(){}onChangeScrollParams(){}tryConnect(t){let s=this.attribute.process(t.el,"string","").split("|"),e=!1;return s.forEach((t=>{t==this.htmlKey&&(e=!0)})),e}connect(t){t.connect(this),this.onConnect(t)}addObject(t,s){this.objectsMap.set(t,s),this.objects=Array.from(this.objectsMap).map((([t,s])=>s))}removeObject(t){this.objectsMap.delete(t),this.objects=Array.from(this.objectsMap).map((([t,s])=>s))}onStart(){}onUpdate(t){}onResize(){}onConnect(t){}onRebuild(){}onScroll(t){}onMouseMove(t){}onWheel(t){}onChangeDevice(){}onChangeScrollDirection(){}onMutationObserver(t,s){}}class i extends e{constructor(t){super(t),this.htmlKey="lazy"}onStart(){document.querySelectorAll("img[string-lazy]").forEach((t=>{this.getImageSize(t,t.getAttribute("string-lazy")),t.classList.add("lazyLoad"),t.src=t.getAttribute("string-lazy"),t.addEventListener("load",(()=>{t.classList.add("-loaded")}))}))}onConnect(t){t.el}getImageSize(t,s){return new Promise(((e,i)=>{const n=new XMLHttpRequest;n.open("GET",s,!0),n.responseType="arraybuffer",n.onload=()=>{if(206===n.status||200===n.status){const s=n.response,o=new Blob([s]),r=new Image;r.onload=()=>{t.style.aspectRatio=`${r.width} / ${r.height}`,e({width:r.width,height:r.height}),URL.revokeObjectURL(r.src)},r.onerror=()=>{i(new Error("Failed to load image"))},r.src=URL.createObjectURL(o)}else i(new Error("Failed to load image"))},n.onerror=()=>{i(new Error("Network error"))},n.setRequestHeader("Range","bytes=0-"),n.send()}))}}class n extends 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 o 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 r extends e{constructor(t,s=null){super(t),this.lerpFactor=.2,this.oldX=0,this.oldY=0,this.enterObjectsMap=new Map,this.enterObjects=new Array,this.htmlKey="cursor",this.cursor=document.querySelector("[string-cursor]")}onUpdate(t){if(this.virtualCursor.smoothX!=this.oldX||this.virtualCursor.smoothY!=this.oldY){let t={lerpX:this.virtualCursor.lerpX,lerpY:this.virtualCursor.lerpY,x:this.virtualCursor.x,y:this.virtualCursor.y};this.events.emit("cursor",t),this.cursor.style.setProperty("--x",this.virtualCursor.smoothX),this.cursor.style.setProperty("--y",this.virtualCursor.smoothY),this.oldX=this.virtualCursor.smoothX,this.oldY=this.virtualCursor.smoothY}this.objects.forEach((t=>{if(t.isMouseMove){let s=t.el.getBoundingClientRect();const e=this.calculateOffset("center",this.virtualCursor.x-s.left,s.width),i=this.calculateOffset("center",this.virtualCursor.y-s.top,s.height);t.mouseX+=this.lerp.process(t.mouseX,e,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}else if(0!=t.mouseX||0!=t.mouseY){let s=t.el.getBoundingClientRect();const e=this.calculateOffset("center",t.halfWidth,s.width),i=this.calculateOffset("center",t.halfHeight,s.height);t.mouseX+=this.lerp.process(t.mouseX,e,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}}))}onConnect(t){let s=t.el;null!=this.settings&&null!=this.settings["string-lerp"]&&(t.lerp=this.settings["string-lerp"]);let e=()=>{s.addEventListener("mousemove",i),s.addEventListener("mouseleave",n),t.isMouseMove=!0,null!=t.cursorTarget&&t.cursorTarget.classList.add("-show")},i=t=>{},n=()=>{s.removeEventListener("mousemove",i),s.removeEventListener("mouseleave",n),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",n)}}setMouseCoordinates(t,s,e){0==t.selfDisable&&(t.el.style.setProperty("--mouse-x",s.toFixed(2)),t.el.style.setProperty("--mouse-y",e.toFixed(2))),t.connects.forEach((t=>{t.style.setProperty("--mouse-x",s.toFixed(2)),t.style.setProperty("--mouse-y",e.toFixed(2))}))}calculateOffset(t,s,e){switch(t){case"start":return s/e;case"end":return(s-e)/e;default:return(s-e/2)/(e/2)}}}class a extends e{constructor(t){super(t),this.htmlKey="magnetic"}onConnect(t){t.el,null!=this.settings&&(null!=this.settings["string-strength"]&&(t.strength=this.settings["string-strength"]),null!=this.settings["string-radius"]&&(t.radius=this.settings["string-radius"]),null!=this.settings["string-lerp"]&&(t.lerp=this.settings["string-lerp"]))}onMouseMove(t){this.objects.forEach((s=>{const e=s.el.getBoundingClientRect(),i=e.left+s.halfWidth,n=e.top+s.halfHeight,o=t.clientX-i,r=t.clientY-n,a=Math.sqrt(o**2+r**2);a<s.radius?(s.magneticTargetX=o*s.strength*((s.radius-a)/s.radius),s.magneticTargetY=r*s.strength*((s.radius-a)/s.radius),s.isMagneting=!0):(s.magneticTargetX=0,s.magneticTargetY=0)}))}onUpdate(t){this.objects.forEach((t=>{if(t.isMagneting){let s=this.lerp.process(t.magneticX,t.magneticTargetX,t.lerp),e=this.lerp.process(t.magneticY,t.magneticTargetY,t.lerp);s>-.01&&s<.01&&(s=0,t.magneticX=t.magneticTargetX),e>-.01&&e<.01&&(e=0,t.magneticY=t.magneticTargetY),t.magneticX+=s,t.magneticY+=e,t.el.style.setProperty("--magnetic-x",t.magneticX.toString()),t.el.style.setProperty("--magnetic-y",t.magneticY.toString()),t.magneticTargetX!=t.magneticX&&t.magneticTargetY!=t.magneticY||(t.isMagneting=!1)}}))}}class l{process(t,s,e){return e*(s-t)}}class h{constructor(){this._lF=.1,this.lerp=new l,this._x=0,this._y=0,this._lerpX=0,this._lerpY=0,this.targetX=0,this.targetY=0}get x(){return this.targetX}get y(){return this.targetY}get smoothX(){return this._x}get smoothY(){return this._y}get lerpX(){return this._lerpX}get lerpY(){return this._lerpY}onMouseMove(t){this.targetX=t.clientX,this.targetY=t.clientY}onUpdate(){this._lerpX=this.lerp.process(this._x,this.targetX,this._lF),this._lerpY=this.lerp.process(this._y,this.targetY,this._lF),this._x=Math.floor(this._x+this._lerpX),this._y=Math.floor(this._y+this._lerpY)}}const c="top",d="bottom",u="left",p="right";class m{constructor(t){this.id="",this.oStart=0,this.oEnd=0,this.size=0,this.startPos=0,this.endPos=0,this.differencePos=0,this.factor=1,this.inviewTop=1,this.inviewBottom=1,this.sElPos="",this.sScrPos="",this.eElPos="",this.eScrPos="",this.halfWidth=0,this.halfHeight=0,this.start=0,this.end=0,this.mouseX=0,this.mouseY=0,this.magneticTargetX=0,this.magneticTargetY=0,this.magneticX=0,this.magneticY=0,this.lerp=0,this.glide=0,this.strength=0,this.weight=0,this.radius=0,this.parallaxPositionStart=0,this.parallaxPositionEnd=0,this.progress=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.type3D="box",this.material3D="basic",this.color3D="#ffffff",this.model3D="",this.animations3D=new Array,this.el=t}enter(){this.active=!0,this.modules.forEach((t=>{t.addObject(this.id,this)})),this.onEnter()}leave(){this.active=!1,this.modules.forEach((t=>{t.removeObject(this.id)})),this.onLeave()}show(){this.el.classList.add("-inview")}hide(){this.repeat&&this.el.classList.remove("-inview")}connect(t){this.modules.push(t)}calculatePositions(t){this.sElPos===c&&this.sScrPos===c||this.sElPos===u&&this.sScrPos===u?this.startPos=this.start-this.oEnd:this.sElPos===c&&this.sScrPos===d||this.sElPos===u&&this.sScrPos===p?this.startPos=this.start-t-this.oEnd:this.sElPos===d&&this.sScrPos===c||this.sElPos===p&&this.sScrPos===u?this.startPos=this.start+this.size-this.oEnd:(this.sElPos===d&&this.sScrPos===d||this.sElPos===p&&this.sScrPos===p)&&(this.startPos=this.start-t-this.oEnd+this.size),this.eElPos===c&&this.eScrPos===c||this.eElPos===u&&this.eScrPos===u?this.endPos=this.start+this.oStart:this.eElPos===c&&this.eScrPos===d||this.eElPos===u&&this.eScrPos===p?this.endPos=this.start-t+this.oStart:this.eElPos===d&&this.eScrPos===c||this.eElPos===p&&this.eScrPos===u?this.endPos=this.start+this.size+this.oStart:(this.eElPos===d&&this.eScrPos===d||this.eElPos===p&&this.eScrPos===p)&&(this.endPos=this.start-t+this.size+this.oStart),this.differencePos=this.endPos-this.startPos}}var g;!function(t){t[t.Mobile=0]="Mobile",t[t.Tablet=1]="Tablet",t[t.Laptop=2]="Laptop",t[t.Desktop=3]="Desktop"}(g||(g={}));class b{constructor(t){var s;this.min=void 0,this.max=void 0,this.enable=!0,this.min=null==t?void 0:t.min,this.max=null==t?void 0:t.max,this.enable=null===(s=null==t?void 0:t.enable)||void 0===s||s}setEnable(t=!0){this.enable=t}setRange(t,s){this.min=null!=t?t:void 0,this.max=null!=s?s:void 0}get mediaQuery(){let t="screen";return this.min&&(t+=` and (min-width: ${this.min}px)`),this.max&&(t+=` and (max-width: ${this.max}px)`),t}}class v extends e{constructor(t,s){super(t,s),this.queries={[g.Mobile]:new b({max:359}),[g.Tablet]:new b({min:360,max:1079}),[g.Laptop]:new b({min:1080,max:1365}),[g.Desktop]:new b({min:1366})},this.matchMedias={[g.Mobile]:window.matchMedia(this.queries[g.Mobile].mediaQuery),[g.Tablet]:window.matchMedia(this.queries[g.Tablet].mediaQuery),[g.Laptop]:window.matchMedia(this.queries[g.Laptop].mediaQuery),[g.Desktop]:window.matchMedia(this.queries[g.Desktop].mediaQuery)},this._type=2}onConnect(){}onStart(){var t,s,e,i;if(null!=this.settings&&null!=this.settings.settings){let n=this.settings.settings;n.mobile?(this.queries[g.Mobile].enable=!0,this.queries[g.Mobile].setRange(null==n.mobile.min?null:n.mobile.min,null!==(t=n.mobile.max)&&void 0!==t?t:null),this.matchMedias[g.Mobile]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Mobile].enable=!1,n.tablet?(this.queries[g.Tablet].enable=!0,this.queries[g.Tablet].setRange(null==n.mobile.min?null:n.mobile.min,null!==(s=n.mobile.max)&&void 0!==s?s:null),this.matchMedias[g.Tablet]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Tablet].enable=!1,n.laptop?(this.queries[g.Laptop].enable=!0,this.queries[g.Laptop].setRange(null==n.mobile.min?null:n.mobile.min,null!==(e=n.mobile.max)&&void 0!==e?e:null),this.matchMedias[g.Laptop]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Laptop].enable=!1,n.desktop?(this.queries[g.Desktop].enable=!0,this.queries[g.Desktop].setRange(null==n.mobile.min?null:n.mobile.min,null!==(i=n.mobile.max)&&void 0!==i?i:null),this.matchMedias[g.Desktop]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Desktop].enable=!1}this.updateElements()}onResize(){this.updateElements()}updateElements(){const t=this.matchMedias[g.Mobile].matches&&this.queries[g.Mobile].enable,s=this.matchMedias[g.Tablet].matches&&this.queries[g.Tablet].enable,e=this.matchMedias[g.Laptop].matches&&this.queries[g.Laptop].enable,i=this.matchMedias[g.Desktop].matches&&this.queries[g.Desktop].enable;document.querySelectorAll("[string-mobile], [string-tablet], [string-laptop], [string-desktop]").forEach((n=>{let o=!1;n.hasAttribute("string-mobile")&&t&&(o=!0),n.hasAttribute("string-tablet")&&s&&(o=!0),n.hasAttribute("string-laptop")&&e&&(o=!0),n.hasAttribute("string-desktop")&&i&&(o=!0),n.style.display=o?null:"none"}))}}class f{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 S{constructor(t,s,e){this.isDragging=!1,this.startCoordinate=0,this.startScrollPosition=0,this.data=t,this.scrollbar=s,this.thumb=e}onResize(){const t=this.data.psW,s=this.data.wS,e=s/t*s;this.thumb.style.setProperty("--size",e+"px"),t<=s?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psW,s=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*s+"px")}mouseDownEvent(t){this.startCoordinate=t.clientX,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const s=t.clientX-this.startCoordinate,e=this.startScrollPosition+s/this.data.wS*this.data.psW;this.data.c=e,this.data.t=e,window.scrollTo(0,e),this.updateThumb()}}class y extends e{constructor(t){super(t),this.isDragging=!1,this.scrollMode="smooth",this.mouseUpEventBind=this.mouseUpEvent.bind(this),this.mouseDownEventBind=this.mouseDownEvent.bind(this),this.mouseMoveEventBind=this.mouseMoveEvent.bind(this)}destructor(){document.removeEventListener("mouseup",this.mouseUpEventBind),this.thumb.removeEventListener("mousedown",this.mouseDownEventBind),document.removeEventListener("mousemove",this.mouseMoveEventBind)}onStart(){this.createScrollbar(),this.updateThumb(),this.addCustomStyles(),document.addEventListener("mouseup",this.mouseUpEventBind),this.thumb.addEventListener("mousedown",this.mouseDownEventBind),document.addEventListener("mousemove",this.mouseMoveEventBind),document.documentElement.classList.add("-no-scrollbar")}onScroll(t){this.updateThumb(),this.showScrollbar(),this.hideScrollbar()}onResize(){this.scrollbarState.onResize()}onChangeScrollParams(){"disable"==this.data.sM&&"disable"!=this.scrollMode&&this.scrollbar.classList.add("-hide"),("smooth"==this.data.sM&&"disable"==this.scrollMode||"default"==this.data.sM&&"disable"==this.scrollMode)&&this.scrollbar.classList.remove("-hide"),this.scrollMode=this.data.sM}onChangeScrollDirection(){"horizontal"==this.data.sD?this.scrollbarState=this.scrollbarStateVertical:this.scrollbarState=this.scrollbarStateHorizontal,this.scrollbarState.onResize()}addCustomStyles(){const t=document.createElement("style");t.textContent="\n ::-webkit-scrollbar {\n display: none;\n width: 0;\n height: 0;\n -webkit-appearance: none;\n }\n body {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n .-without-scrollbar::-webkit-scrollbar {\n display: none;\n }\n .-without-scrollbar {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n ",document.head.appendChild(t)}createScrollbar(){this.scrollbar=document.createElement("div"),this.scrollbar.classList.add("scrollbar"),this.thumb=document.createElement("div"),this.thumb.classList.add("thumb"),this.scrollbar.appendChild(this.thumb),document.body.appendChild(this.scrollbar),this.scrollbarStateHorizontal=new f(this.data,this.scrollbar,this.thumb),this.scrollbarStateVertical=new S(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 E extends e{constructor(t,s=null){if(super(t),this.previousLerp=0,this.displacement=0,this.acceleration=0,this.velocityMultiplier=.00125,this.isInitialScroll=!0,this.baseVelocityMultiplier=.00125,this.reducedVelocityMultiplier=this.baseVelocityMultiplier/20,this.negativeVelocityMultiplier=-1e-4,this.ACCELERATION_STEP=.05,this.MIN_DISPLACEMENT=.01,this.MAX_DISPLACEMENT=1,this.MIN_VELOCITY=-1,this.MAX_VELOCITY=1,this.maxDisplacementValue=0,this.setupItem=t=>{const s=`translate3d(0, ${-this.data.dV*this.maxDisplacementValue*t.glide}px, 0)`;t.el.style.transform=s},this.onUpdateDesktopEvent=()=>{for(let t=0;t<this.objects.length;t++){let s=this.objects[t];this.setupItem(s)}},this.onUpdateMobileEvent=()=>{},this.onUpdateEvent=this.onUpdateDesktopEvent,this.htmlKey="glide",s){const{baseVelocityMultiplier:t,reducedVelocityMultiplier:e,negativeVelocityMultiplier:i}=s;this.baseVelocityMultiplier=null!=t?t:this.baseVelocityMultiplier,this.reducedVelocityMultiplier=null!=e?e:this.reducedVelocityMultiplier,this.negativeVelocityMultiplier=null!=i?i:this.negativeVelocityMultiplier}}calcExpanderFactor(t){const s=t?this.data.v<this.previousLerp:this.data.v>this.previousLerp;this.velocityMultiplier=s?this.isInitialScroll?this.baseVelocityMultiplier:this.reducedVelocityMultiplier:this.negativeVelocityMultiplier,s||(this.isInitialScroll=!1)}onStart(){this.maxDisplacementValue=.1*this.data.wS}onResize(){window.innerWidth>1080?(this.maxDisplacementValue=.1*this.data.wS,this.onUpdateEvent=this.onUpdateDesktopEvent):(this.onUpdateEvent=this.onUpdateMobileEvent,this.resetState(),this.objects.forEach((t=>{this.setupItem(t)})))}resetState(){this.displacement=0,this.acceleration=0,this.isInitialScroll=!0,this.velocityMultiplier=this.baseVelocityMultiplier}onScrollStart(){this.resetState()}onScrollStop(){this.resetState(),this.previousLerp=0,document.documentElement.style.setProperty("--glide","0");for(let t=0;t<this.objects.length;t++){const s="translate3d(0, 0px, 0)";this.objects[t].el.style.transform=s}}onUpdate(t){this.calcExpanderFactor(!1===this.data.sDB),this.acceleration=Math.min(this.MAX_DISPLACEMENT,this.acceleration+this.ACCELERATION_STEP),this.displacement=Math.max(this.MIN_DISPLACEMENT,Math.min(this.MAX_DISPLACEMENT,this.displacement+this.velocityMultiplier)),this.data.dV=Math.min(this.MAX_VELOCITY,Math.max(this.MIN_VELOCITY,this.data.v*this.displacement*this.acceleration)),document.documentElement.style.setProperty("--glide",this.data.dV.toString()),this.previousLerp=this.data.v,this.onUpdateEvent()}}class w extends e{constructor(t){super(t),this.oldLerp=0,this._type=2}onScrollStop(){document.documentElement.style.setProperty("--lerp","0")}onScroll(t){document.documentElement.style.setProperty("--lerp",this.data.v.toString()),this.oldLerp=t.v}}class M extends e{constructor(t){super(t),this.setupParallax=(t,s)=>{let e=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))},this.onScrollDesktopEvent=()=>{this.objects.forEach((t=>{let s=Math.min(1,Math.max(0,(this.data.c-t.startPos)/t.differencePos));t.el.style.setProperty(t.key,s.toString()),this.setupParallax(t,s)}))},this.onScrollMobileEvent=()=>{},this.onScrollEvent=this.onScrollDesktopEvent,this.htmlKey="parallax"}onConnect(t){if(null!=this.settings){if(null!=this.settings["string-parallax-bias"]){let s=this.attribute.process(t.el,"string-parallax-bias",this.settings["string-parallax-bias"]);t.parallaxPositionStart=.5*s-.5,t.parallaxPositionEnd=.5+.5*(1-s)}null!=this.settings["string-parallax"]&&(t.factor=this.settings["string-parallax"])}}onScroll(t){this.onScrollEvent()}onChangeScrollDirection(){"vertical"==this.data.sD?this.setupParallax=(t,s)=>{let e=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))}:this.setupParallax=(t,s)=>{let e=`translate3d(${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))}}onResize(){window.innerWidth>1080?this.onScrollEvent=this.onScrollDesktopEvent:(this.onScrollEvent=this.onScrollMobileEvent,this.objects.forEach((t=>{this.setupParallax(t,.5)})))}}class x extends e{constructor(t){super(t),this.oldLerp=0,this.htmlKey="progress"}onScroll(t){this.objects.forEach((t=>{this.setUpObject(t,this.data.v)}))}onConnect(t){t.onEnter=()=>{this.setUpObject(t,0)}}setUpObject(t,s){t.progress=Math.min(1,Math.max(0,(this.data.c-t.startPos)/t.differencePos)),this.applyProgress(t,t.progress)}applyProgress(t,s){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 C{constructor(t,s,e){this.isProg=!1,this.isParallaxEnabled=!1,this.name="",this.v=0,this.vT=0,this.onScrollStart=()=>{},this.onScrollStop=()=>{},this.onChangeDirection=()=>{},this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(0,this.data.c)},this._scrollDirection="vertical",this.d=t,this.settings=s,this.data=e,this.scrollContainer=window}onUpdate(){}onWheel(t){}onScroll(t){}set scrollDirection(t){this._scrollDirection=t,"vertical"==this._scrollDirection?this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(0,this.data.c)}:"horizontal"==this._scrollDirection&&(this.onCalcUpdate=()=>{this.scrollContainer.scrollTo(this.data.c,0)})}}class P extends C{constructor(t,s,e){super(t,s,e),this.name="mobile"}onUpdate(){if(0!=this.data.d){let t=this.data.d*this.settings.speedAccelerate;this.data.d-=t,this.data.v=t,Math.abs(this.data.v)<.1&&(this.data.d=0,this.data.v=0,this.onScrollStop())}}onScroll(t){this.data.c=this.d.documentElement.scrollTop,this.data.t=this.d.documentElement.scrollTop}onWheel(t){if(0!=t.deltaY){0==this.data.d&&this.onScrollStart();let s=t.deltaY;0==this.data.t&&(this.data.d+=Math.max(0,t.deltaY)),this.data.d+=s}}}class L extends C{constructor(t,s,e){super(t,s,e),this.name="disable"}onUpdate(){}onWheel(t){t.preventDefault()}onScroll(t){t.preventDefault()}}const D="-scroll-forward",_="-scroll-back";class T extends C{constructor(t,s,e){super(t,s,e),this.name="desktop",this.isScrollbarManipulation=!1,this.isBottomScrollDirection=!1,this.velocityThreshold=.1}updateScrollDirection(t){if(this.isBottomScrollDirection===t)return;this.isBottomScrollDirection=t,this.data.sDB=t,this.onChangeDirection();const s=t;document.documentElement.classList.toggle(D,s),document.documentElement.classList.toggle(_,!s)}clamp(t,s,e){return Math.min(Math.max(t,s),e)}stopScroll(){this.data.v=0,this.data.d=0,this.data.t=this.data.c,this.isProg=!1,this.onCalcUpdate(),document.documentElement.classList.remove(_,D)}onUpdate(){const{data:t,settings:s}=this;let e=this.data.d*this.settings.speedAccelerate;if(this.data.t=Math.min(Math.max(0,this.data.t+e),this.data.bS),this.data.d-=e,this.data.v=(this.data.t-this.data.c)*this.settings.speed,this.isScrollbarManipulation)return this.isScrollbarManipulation=!1,void(t.c=t.t);const i=Math.abs(t.v);0!==i&&(t.v>0?(t.c=this.clamp(Math.ceil(t.c+t.v),0,t.bS),this.updateScrollDirection(!0)):(t.c=this.clamp(Math.floor(t.c+t.v),0,t.bS),this.updateScrollDirection(!1)),i<this.velocityThreshold?(this.stopScroll(),this.onScrollStop()):(this.isProg=!0,this.onCalcUpdate()))}onWheel(t){if(0!=t.deltaY){t.preventDefault(),0==this.data.d&&this.onScrollStart();let s=t.deltaY;0==this.data.t&&(this.data.d+=Math.max(0,t.deltaY)),this.data.d+=s}}onScroll(t){var s,e;this.isProg||(this.isScrollbarManipulation=!0,this.data.t=null!==(e=null===(s=this.scrollContainer)||void 0===s?void 0:s.scrollTop)&&void 0!==e?e:document.documentElement.scrollTop)}}class A{constructor(){this.sC=.1,this.sA=.25}get speed(){return this.sC}get speedAccelerate(){return this.sA}set speedAccelerate(t){this.sA=t}set speed(t){this.sC=t}}class O 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&&(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&&(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],n=e[4]?e[4].split(","):[];switch(t+i){case"char-line":s.charLine.push(this.parseParam(n));break;case"char-word":s.charWord.push(this.parseParam(n));break;case"word-line":s.wordLine.push(this.parseParam(n));break;case"line":s.line.push(this.parseParam(n));break;case"word":s.word.push(this.parseParam(n));break;case"char":s.char.push(this.parseParam(n))}}})),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"),n=e.split(/\s+/);let o=0,r=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;n.forEach(((t,e)=>{l.textContent=t,t.length>0&&(l.textContent+=" ");const i=l.offsetWidth,n={text:t,width:i,chars:new Array};Array.from(t).forEach(((t,s)=>{const e={text:t};n.chars.push(e)})),u+i>s.offsetWidth&&(c.push(d),d=[],u=0,o+=d.length),d.push(n),u+=i})),c.push(d);let p=!1;null!=t.line&&t.line.length>0&&(p=!0),null!=t.wordLine&&t.wordLine.length>0&&(p=!0),null!=t.charLine&&t.charLine.length>0&&(p=!0);let m=0;if(p)for(let s=0;s<c.length;s++)this.appendVirtualLineToDOM(s,c.length,n.length,i,c[s],t,o,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 n=document.createElement("span");n.classList.add("-s-char"),n.textContent=e.text,this.applyOptions(n,t.char,o,"char",i,a),this.applyOptions(n,t.charWord,i,"char-word",i,s.text.length),l.appendChild(n),o++})),this.applyOptions(l,t.word,r,"word",e,n.length),s.chars.length>0&&(l.innerHTML+=" "),i.appendChild(l),r++}}));return document.body.removeChild(l),{html:i.innerHTML}}appendVirtualLineToDOM(t,s,e,i,n,o,r,a,l){const h=document.createElement("span");h.classList.add("-s-line"),this.applyOptions(h,o.line,t,"line",0,s);let c=0,d=0,u=0;n.forEach(((t,s)=>{u+=t.text.length})),n.forEach(((t,s)=>{if(t.chars.length>0){const i=document.createElement("span");i.classList.add("-s-word"),t.chars.forEach(((s,e)=>{const n=document.createElement("span");n.classList.add("-s-char"),n.textContent=s.text,this.applyOptions(n,o.char,r,"char",e,a),this.applyOptions(n,o.charLine,c,"char-line",e,u),this.applyOptions(n,o.charWord,e,"char-word",e,t.text.length),i.appendChild(n),r++,c++})),this.applyOptions(i,o.word,l+d,"word",l+d,e-1),this.applyOptions(i,o.wordLine,s,"word-line",s,n.length),s<n.length-1&&(i.innerHTML+=" "),h.appendChild(i),d++}})),i.appendChild(h)}applyOptions(t,s,e,i,n,o){s&&s.forEach(((s,r)=>{let a=this.calculateIndex(s,e,n,o);const l=this.generateVariableName(i,s,r);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 n=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;n=Math.floor(Math.random()*(e-s+1))+s}return"end"===t.align?n=i-n-1:"center"===t.align&&(n-=Math.floor(i/2)),t.abs&&(n=Math.abs(n)),n}generateVariableName(t,s,e){let i=`--${t}`;return s.align&&(i+=`-${s.align}`),i}}class I{constructor(){this.isAnimationStarted=!1,this.requestAnimationId=0,this.onFrame=()=>{}}get now(){return this._now}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 H extends e{constructor(t){super(t),this.canvasHeight=0,this._type=2}onStart(){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=.5*window.innerWidth,this.canvas.height=window.innerHeight/15-20,this.canvasHeight=window.innerHeight/15-20,this.canvas.style.position="fixed",this.canvas.style.bottom=window.innerHeight/20+10+"px",this.canvas.style.left="50%",this.canvas.style.transform="translateX(-50%)",this.canvas.style.backgroundColor="#000000",this.canvas.style.border="1px solid rgba(255, 255, 255, 0.2)",this.canvas.style.zIndex="1000",document.body.appendChild(this.canvas),this.positionHistory=[],this.maxHistory=this.canvas.width,this.currentPosition=0,this.targetPosition=0}onScroll(t){this.currentPosition=Math.abs(this.data.dV),this.positionHistory.push(this.currentPosition),this.positionHistory.length>this.maxHistory&&this.positionHistory.shift(),this.drawGraph()}drawGraph(){const t=this.context;t.clearRect(0,0,this.canvas.width,this.canvas.height),t.strokeStyle="#e0e0e0",t.lineWidth=1,t.strokeStyle="red",t.lineWidth=2,t.beginPath(),this.positionHistory.forEach(((s,e)=>{const i=e,n=this.canvas.height-s*this.canvasHeight;0===e?t.moveTo(i,n):t.lineTo(i,n)})),t.stroke()}setTargetPosition(t){this.targetPosition=t}}class W extends e{constructor(t){super(t),this.callCount=0,this._type=2}createDisplayElement(){this.displayElement=document.createElement("div"),this.displayElement.style.position="fixed",this.displayElement.style.bottom="10px",this.displayElement.style.right="10px",this.displayElement.style.backgroundColor="#000000",this.displayElement.style.border="1px solid rgba(255, 255, 255, 0.2)",this.displayElement.style.zIndex="9999",this.displayElement.setAttribute("data-fps","0"),document.body.appendChild(this.displayElement);const t=document.createElement("style");t.innerHTML="\n [data-fps]::after {\n content: 'FPS: ' attr(fps);\n position: relative;\n display: block;\n color: #ffffff;\n padding: 5px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n ",document.head.appendChild(t)}onStart(){this.createDisplayElement(),this.intervalId=setInterval((()=>{this.displayElement.setAttribute("fps",`${this.callCount}`),this.callCount=0}),1e3)}onUpdate(t){this.callCount++}destructor(){clearInterval(this.intervalId),document.body.removeChild(this.displayElement)}}class k extends e{constructor(t){super(t),this._type=2}onStart(){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=.5*window.innerWidth,this.canvas.height=window.innerHeight/15-20,this.canvas.style.position="fixed",this.canvas.style.bottom="10px",this.canvas.style.left="50%",this.canvas.style.transform="translateX(-50%)",this.canvas.style.backgroundColor="#000000",this.canvas.style.border="1px solid rgba(255, 255, 255, 0.2)",this.canvas.style.zIndex="1000",document.body.appendChild(this.canvas),this.positionHistory=[],this.maxHistory=this.canvas.width,this.currentPosition=0,this.targetPosition=0}onScroll(t){this.currentPosition=Math.abs(this.data.v),this.positionHistory.push(this.currentPosition),this.positionHistory.length>this.maxHistory&&this.positionHistory.shift(),this.drawGraph()}drawGraph(){const t=this.context;t.clearRect(0,0,this.canvas.width,this.canvas.height),t.strokeStyle="#e0e0e0",t.lineWidth=1,t.strokeStyle="#007bff",t.lineWidth=2,t.beginPath(),this.positionHistory.forEach(((s,e)=>{const i=e,n=this.canvas.height-s/2;0===e?t.moveTo(i,n):t.lineTo(i,n)})),t.stroke()}setTargetPosition(t){this.targetPosition=t}}class U extends e{constructor(t){super(t),this.callCount=0,this._type=2}createDisplayElement(){this.displayElement=document.createElement("div"),this.displayElement.style.position="fixed",this.displayElement.style.bottom="10px",this.displayElement.style.left="10px",this.displayElement.style.backgroundColor="#000000",this.displayElement.style.border="1px solid rgba(255, 255, 255, 0.2)",this.displayElement.style.zIndex="9999",this.displayElement.setAttribute("data-position","0"),document.body.appendChild(this.displayElement);const t=document.createElement("style");t.innerHTML="\n [data-position]::after {\n content: attr(direction) 'Top: ' attr(value) 'px';\n position: relative;\n display: block;\n color: #ffffff;\n padding: 5px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n ",document.head.appendChild(t)}onStart(){this.createDisplayElement()}onScroll(t){let s="";t.c<t.t&&(s="↓"),t.c>t.t&&(s="↑"),this.displayElement.setAttribute("direction",s),this.displayElement.setAttribute("value",`${this.data.c}`)}onUpdate(t){this.callCount++}destructor(){document.body.removeChild(this.displayElement)}}class j{process(t,s,e=null){return null==t.getAttribute(s)?e:t.getAttribute(s)}}class B{process(t){return t.getBoundingClientRect()}}class R{constructor(){this.three=null,this.t=0,this.c=0,this.d=0,this.v=0,this.dV=0,this.sDB=!1,this.bS=0,this.cF=1,this.wS=0,this.hnwS=0,this.psW=0,this.psH=0,this.scsW=1,this.scsH=1,this.sD="vertical",this.sM="smooth"}}class z{constructor(){this.eventsByKey=new Map,this.events=new Array}on(t,s){var e;0==this.eventsByKey.has(t)&&this.eventsByKey.set(t,[]),null===(e=this.eventsByKey.get(t))||void 0===e||e.push(s),this.updateAllEvents()}has(t){return this.eventsByKey.has(t)}emit(t,s){var e;this.eventsByKey.has(t)&&(null===(e=this.eventsByKey.get(t))||void 0===e||e.forEach((t=>{t(s)})))}off(t,s){let e=this.eventsByKey.get(t);null!=e&&this.eventsByKey.set(t,e.filter((t=>t!==s))),this.updateAllEvents()}all(t){this.events.forEach((s=>{s(t)}))}updateAllEvents(){Array.from(this.eventsByKey.values()).forEach((t=>{t.forEach((t=>{this.events.push(t)}))}))}}class Y{parseSingle(t,s,e,i){let n,o=t.startsWith("-");return o&&(t=t.slice(1)),"selfHeight"===t?n=s.offsetHeight:t.endsWith("px")?n=parseFloat(t):t.endsWith("%")?n=parseFloat(t)*e/100:t.endsWith("rem")&&(n=parseFloat(t)*i),o?-n:n}}class X{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:n}=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 r=o;let t=r[0]*r[3]-r[1]*r[2];return{width:i/r[0]==0?1:r[0],height:n/r[3]==0?1:r[3],left:(e*r[3]-s*r[2]+r[2]*r[5]-r[4]*r[3])/t,top:(-e*r[1]+s*r[0]+r[4]*r[1]-r[0]*r[5])/t}}return{top:s,left:e,width:i,height:n}}(t);return{top:i.top-e.top,left:i.left-e.left}}}function V(){return"ontouchstart"in window||navigator.maxTouchPoints>0}class q{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=.1+.4*t}get speed(){return this.settings.speed}set speed(t){this.settings.speed=t}get scrollPosition(){return this.data.c}set scrollPosition(t){this.data.c=t,this.data.t=t,window.scrollTo(0,this.data.c);for(let t=0;t<this.modules.length;t++)this.modules[t].onScroll(this.data)}set scrollContainer(t){let s=null!=this.data.sC;s&&(this.data.sC.removeEventListener("scroll",this.onScrollBind),this.data.sC.removeEventListener("resize",this.onResizeBind)),this.sEn.scrollContainer=t,this.sEnSmooth.scrollContainer=t,this.sEnDefault.scrollContainer=t,this.sEnDisable.scrollContainer=t,this.data.sC=t,s&&(this.data.sC.addEventListener("scroll",this.onScrollBind),this.data.sC.addEventListener("resize",this.onResizeBind)),this.rebuild(),this.initObjects()}set scrollMobileMode(t){this.mMode=t,this.updateModeParams()}set scrollDesktopMode(t){this.dMode=t,this.updateModeParams()}updateModeParams(){switch(this.window.innerWidth<1024||V()?this.scrollMode=this.mMode:this.scrollMode=this.dMode,this.scrollMode){case"disable":this.data.sM="disable",this.sEn=this.sEnDisable,this.onChangeScrollParams(),document.documentElement.style.overflow="hidden";break;case"default":this.data.sM="default",this.sEn=this.sEnDefault,this.onChangeScrollParams(),document.documentElement.style.overflow="auto";break;default:this.data.sM="smooth",this.sEn=this.sEnSmooth,this.onChangeScrollParams(),document.documentElement.style.overflow="auto"}}constructor(){this.modules=new Array,this.modulesUI=new Array,this.events=new z,this.loop=new I,this.wW=0,this.wH=0,this._virtualCursor=new h,this._lerp=new l,this._attribute=new j,this._boundingClientRect=new B,this._position=new X,this.objects=new Map,this.connectQueue=new Array,this.globalId=1,this._parser=new Y,this.scrollMode="smooth",this.mMode="default",this.dMode="smooth",this.defaultSettings={stringOffsetStart:"0%",stringOffsetEnd:"0%",stringEnterEl:"top",stringExitEl:"bottom",stringEnterVp:"bottom",stringExitVp:"top",stringInviewTop:"0%",stringInviewBottom:"0%",stringKey:"--progress",stringStrength:.3,stringRadius:150,stringLerp:.2,stringParallaxBias:0,stringParallax:.2},this.root=document.body,this.window=window,this.settings=new A,this.data=new R,this.sEnSmooth=new T(document,this.settings,this.data),this.sEnDefault=new P(document,this.settings,this.data),this.sEnDisable=new L(document,this.settings,this.data),this.sEnSmooth.onScrollStop=this.onScrollStop.bind(this),this.sEnDefault.onScrollStop=this.onScrollStop.bind(this),this.sEnDisable.onScrollStop=this.onScrollStop.bind(this),this.sEnSmooth.onChangeDirection=this.onChangeDirection.bind(this),this.sEnDefault.onChangeDirection=this.onChangeDirection.bind(this),this.sEnDisable.onChangeDirection=this.onChangeDirection.bind(this),this.sEnSmooth.onScrollStart=this.onScrollStart.bind(this),this.sEnDefault.onScrollStart=this.onScrollStart.bind(this),this.sEnDisable.onScrollStart=this.onScrollStart.bind(this),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 q.i||(q.i=new q),q.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,loop:this.loop},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");for(let t=0;t<this.modules.length;t++)this.modules[t].onStart();for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onStart();this.initObjects(),this.initMutationObserver()}onChangeScrollParams(){for(let t=0;t<this.modules.length;t++)this.modules[t].onChangeScrollParams();for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onChangeScrollParams()}initObjects(){document.querySelectorAll("[string]").forEach((t=>{this.addObject(t)})),document.querySelectorAll("[string-copy-from]").forEach((t=>{let s=this._attribute.process(t,"string-copy-from");if(null!=s&&this.objects.has(s)){let e=this.objects.get(s);null!=e&&e.connects.push(t)}})),this.modules.forEach((t=>{t.onResize(),t.onScroll(this.data),t.onUpdate(this.data)}))}destroy(){this.window.removeEventListener("scroll",this.onScrollBind),this.root.removeEventListener("wheel",this.onScrollBind),this.window.removeEventListener("resize",this.onResizeBind),this.root.removeEventListener("mousemove",this.onMouseMoveBind),this.loop.stop(),this.modules.forEach((t=>{t.destructor()})),this.modulesUI.forEach((t=>{t.destructor()}))}on(t,s,e=""){switch(t){case"scroll":this.events.on("scroll",s);break;case"progress":this.events.on(`progress_${e}`,s);break;case"lerp":this.events.on("lerp",s);break;case"intersection":this.events.on(`intersection_${e}`,s);break;case"inview":this.events.on(`inview_${e}`,s);break;case"cursor":this.events.on("cursor",s)}}off(t,s,e=""){switch(t){case"scroll":this.events.off("scroll",s);break;case"progress":this.events.off(`progress_${e}`,s);break;case"lerp":this.events.off("lerp",s);break;case"intersection":this.events.off(`intersection_${e}`,s);break;case"inview":this.events.off(`inview_${e}`,s);break;case"cursor":this.events.off("cursor",s)}}setupSettings(t){null!=t["string-offset-top"]&&(this.defaultSettings.stringOffsetStart=t["string-offset-top"]),null!=t["string-offset-bottom"]&&(this.defaultSettings.stringOffsetEnd=t["string-offset-bottom"]),null!=t["string-offset-left"]&&(this.defaultSettings.stringOffsetStart=t["string-offset-left"]),null!=t["string-offset-right"]&&(this.defaultSettings.stringOffsetEnd=t["string-offset-right"]),null!=t["string-inview-top"]&&(this.defaultSettings.stringInviewTop=t["string-inview-top"]),null!=t["string-inview-left"]&&(this.defaultSettings.stringInviewTop=t["string-inview-left"]),null!=t["string-inview-bottom"]&&(this.defaultSettings.stringInviewBottom=t["string-inview-bottom"]),null!=t["string-inview-right"]&&(this.defaultSettings.stringInviewBottom=t["string-inview-right"]),null!=t["string-enter-el"]&&(this.defaultSettings.stringEnterEl=t["string-enter-el"]),null!=t["string-enter-vp"]&&(this.defaultSettings.stringEnterVp=t["string-enter-vp"]),null!=t["string-exit-el"]&&(this.defaultSettings.stringExitEl=t["string-exit-el"]),null!=t["string-exit-vp"]&&(this.defaultSettings.stringExitVp=t["string-exit-vp"]),null!=t["string-key"]&&(this.defaultSettings.stringKey=t["string-key"]),null!=t["string-strength"]&&(this.defaultSettings.stringStrength=t["string-strength"]),null!=t["string-radius"]&&(this.defaultSettings.stringRadius=t["string-radius"]),null!=t["string-lerp"]&&(this.defaultSettings.stringLerp=t["string-lerp"]),null!=t["string-parallax-bias"]&&(this.defaultSettings.stringParallaxBias=t["string-parallax-bias"]),null!=t["string-parallax"]&&(this.defaultSettings.stringParallax=t["string-parallax"])}setupObject(t,s){var e,i,n;null===(e=s.showObserver)||void 0===e||e.disconnect(),null===(i=s.progressObserver)||void 0===i||i.disconnect(),null===(n=s.inviewObserver)||void 0===n||n.disconnect();let o=this._boundingClientRect.process(t),r=o.width/this.data.scsW,a=o.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.inviewTop=-1*this._parser.parseSingle(this._attribute.process(t,"string-inview-top",this._attribute.process(t,"string-inview-left",this.defaultSettings.stringInviewTop)),t,"vertical"==this.data.sD?a:r,16),s.inviewBottom=-1*this._parser.parseSingle(this._attribute.process(t,"string-inview",this._attribute.process(t,"string-inview-bottom",this._attribute.process(t,"string-inview-right",this.defaultSettings.stringInviewBottom))),t,"vertical"==this.data.sD?a:r,16),s.selfDisable=null!=this._attribute.process(t,"string-self-disable"),s.abs=null!=this._attribute.process(t,"string-abs");let u=this._attribute.process(t,"string-cursor-target");null!=u&&(s.cursorTarget=document.querySelector(`[string-cursor-content="${u}"]`)),s.id=this._attribute.process(t,"string-id",`string-${this.globalId}`),s.key=this._attribute.process(t,"string-key",this.defaultSettings.stringKey),s.type3D=this._attribute.process(t,"string-3d","box"),s.model3D=this._attribute.process(t,"string-3d-model","");const p=this._attribute.process(t,"string-3d-material","basic[#0000ff]"),[m,g]=p.split(/[\[\]]/);s.color3D=g,s.material3D=m,this._attribute.process(t,"string-3d-animation","").split("|").forEach((t=>{const e=t.match(/^(\w+-)?(\w+)(\[(.*?)\])?$/);if(null!=e){let t=e[4].split(";"),i=t[0].split(","),n=t[1].split(",");"rotate"==e[2]&&s.animations3D.push(((t,s)=>{s.rotation.set(i[0]+(n[0]-i[0])*t,i[1]+(n[1]-i[1])*t,i[2]+(n[2]-i[2])*t)}))}})),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),s.weight=this._attribute.process(t,"string-weight",0),s.glide=this._attribute.process(t,"string-glide",1);let b=this._attribute.process(t,"string-parallax-bias",this.defaultSettings.stringParallaxBias);s.parallaxPositionStart=.5*b-.5,s.parallaxPositionEnd=.5+.5*(1-b),t.setAttribute("string-id",s.id),"vertical"==this.data.sD?s.size=a:s.size=r,s.oStart=this._parser.parseSingle(this._attribute.process(t,"string-offset-top",this._attribute.process(t,"string-offset-left",this.defaultSettings.stringOffsetStart)),t,this.data.wS,16),s.oEnd=this._parser.parseSingle(this._attribute.process(t,"string-offset-bottom",this._attribute.process(t,"string-offset-right",this.defaultSettings.stringOffsetEnd)),t,this.data.wS,16);let v=this._parser.parseSingle(this._attribute.process(t,"string-offset-top",this._attribute.process(t,"string-offset-left",this.defaultSettings.stringOffsetStart)),t,this.data.wS,16),f=this._parser.parseSingle(this._attribute.process(t,"string-offset-bottom",this._attribute.process(t,"string-offset-right",this.defaultSettings.stringOffsetEnd)),t,this.data.wS,16),S=this._attribute.process(s.el,"string","").split("|");s.factor=0,S.includes("parallax")&&(v=0,f=0,s.oStart=0,s.oEnd=0,s.factor=this._attribute.process(t,"string-parallax",this.defaultSettings.stringParallax),s.oStart+=s.factor*this.data.wS,s.oEnd+=s.factor*this.data.wS),s.repeat=null!=this._attribute.process(t,"string-repeat"),s.sElPos=l,s.sScrPos=h,s.eElPos=c,s.eScrPos=d,s.halfWidth=r/2,s.halfHeight=a/2;let y=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+r}s.calculatePositions(y);let E,w,M=this.connectQueue.filter((t=>t.id==s.id));this.connectQueue=this.connectQueue.filter((t=>t.id!=s.id)),M.forEach((t=>{s.connects.push(t.element)})),"vertical"==this.data.sD?(E={root:null,rootMargin:`${v+this.data.wS}px 0px ${f+this.data.wS}px 0px`,threshold:.001},w={root:null,rootMargin:`${v+s.inviewTop}px 0px ${f+s.inviewBottom}px 0px`,threshold:.001}):(E={root:null,rootMargin:`0px ${v+this.data.wS}px 0px ${f+this.data.wS}px`,threshold:.001},w={root:null,rootMargin:`0px ${v+s.inviewTop}px 0px ${f+s.inviewBottom}px`,threshold:.001});let x=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())}))}),E),C=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?this.events.emit(`intersection_${s.id}`,!0):this.events.emit(`intersection_${s.id}`,!1)}))}),{root:null,rootMargin:"0px 0px 0px 0px",threshold:.001}),P=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?(this.events.emit(`inview_${s.id}`,!0),s.show()):(this.events.emit(`inview_${s.id}`,!1),s.hide())}))}),w);x.observe(t),C.observe(t),P.observe(t),s.showObserver=C,s.progressObserver=x,s.inviewObserver=P}addObject(t){let s,e=this._attribute.process(t,"string-inited");s=null==e?new m(t):this.objects.has(this._attribute.process(t,"string-id"))?this.objects.get(this._attribute.process(t,"string-id")):new m(t),t.setAttribute("string-inited",""),this.setupObject(t,s),this.modules.forEach((t=>{t.tryConnect(s)&&t.connect(s)})),this.objects.set(s.id,s),this.globalId++}removeObject(t){let s=this.objects.get(t);null!=(null==s?void 0:s.showObserver)&&(null==s||s.showObserver.disconnect()),null!=(null==s?void 0:s.progressObserver)&&(null==s||s.progressObserver.disconnect()),null!=(null==s?void 0:s.inviewObserver)&&(null==s||s.inviewObserver.disconnect()),this.objects.delete(t),null==s||s.el.removeAttribute("string-inited"),null==s||s.leave(),s=void 0}onMouseMoveEvent(t){this._virtualCursor.onMouseMove(t);for(let s=0;s<this.modules.length;s++)this.modules[s].onMouseMove(t);for(let s=0;s<this.modulesUI.length;s++)this.modulesUI[s].onMouseMove(t)}onWheelEvent(t){this.sEn.onWheel(t);for(let s=0;s<this.modules.length;s++)this.modules[s].onWheel(t);for(let s=0;s<this.modulesUI.length;s++)this.modulesUI[s].onWheel(t)}onScrollStart(){for(let t=0;t<this.modules.length;t++)this.modules[t].onScrollStart();for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onScrollStart()}onScrollStop(){for(let t=0;t<this.modules.length;t++)this.modules[t].onScrollStop();for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onScrollStop()}onChangeDirection(){for(let t=0;t<this.modules.length;t++)this.modules[t].onChangeDirection();for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onChangeDirection()}onScrollEvent(t){this.sEn.onScroll(t);for(let t=0;t<this.modules.length;t++)this.modules[t].onScroll(this.data);for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[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();for(let t=0;t<this.modules.length;t++)this.modules[t].onUpdate(this.data);for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onUpdate(this.data)}onResizeEvent(){let t=0,s=0;try{let e=this.sEn.scrollContainer.getBoundingClientRect();t=e.width,s=e.height}catch(e){t=this.sEn.scrollContainer.innerWidth,s=this.sEn.scrollContainer.innerHeight}"vertical"==this.data.sD?(this.data.bS=this.data.psH-s,this.data.wS=s):(this.data.bS=this.data.psW-t,this.data.wS=t),(this.wW!=t||this.window.innerWidth>1024)&&(this.rebuild(),this.modules.forEach((t=>{t.onResize()})),this.modulesUI.forEach((t=>{t.onResize()}))),this.wW=t,this.wH=s}initMutationObserver(){new MutationObserver((t=>{t.forEach((t=>{"childList"===t.type&&(t.addedNodes.length>0&&t.addedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]:not([string-inited])").forEach((t=>{this.addObject(t);let s=this._attribute.process(t,"string-copy-from");if(null!=s)if(this.objects.has(s)){let e=this.objects.get(s);null!=e&&e.connects.push(t)}else this.connectQueue.push({id:s,element:t})}))})),t.removedNodes.length>0&&t.removedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]").forEach((t=>{let s=t.getAttribute("string-id"),e=this._attribute.process(t,"string-copy-from");null!=e&&(this.connectQueue=this.connectQueue.filter((t=>t.id!=e))),null!=s&&this.removeObject(s)}))})),(t.addedNodes.length>0||t.removedNodes.length>0)&&this.modules.forEach((t=>{t.onRebuild()})))}))})).observe(document.body,{attributes:!1,childList:!0,subtree:!0})}rebuild(){try{let s=(t=this.data.sC,window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)})));this.data.scsW=s[0],this.data.scsH=s[3]}catch(t){this.data.scsW=1,this.data.scsH=1}var t;try{let t=this.data.sC.getBoundingClientRect();this.wW=t.width/this.data.scsW,this.wH=t.height/this.data.scsH}catch(t){this.wW=this.data.sC.innerWidth,this.wH=this.data.sC.innerHeight}this.wW<1024||V()?this.scrollMode=this.mMode:this.scrollMode=this.dMode;let s=document.body,e=document.documentElement;this.data.psW=this.data.sC.scrollWidth,this.data.psH=this.data.sC.scrollHeight,null==this.data.psW&&(this.data.psW=Math.max(s.scrollWidth,s.offsetWidth,e.clientWidth,e.scrollWidth,e.offsetWidth)),null==this.data.psH&&(this.data.psH=Math.max(s.scrollHeight,s.offsetHeight,e.clientHeight,e.scrollHeight,e.offsetHeight)),"vertical"==this.data.sD?(this.data.bS=this.data.psH-this.wH,this.data.wS=this.wH):(this.data.bS=this.data.psW-this.wW,this.data.wS=this.wW),this.data.hnwS=-.5*this.data.wS,this.updateModeParams()}}return s})()));
1
+ !function(t,s){"object"==typeof exports&&"object"==typeof module?module.exports=s():"function"==typeof define&&define.amd?define([],s):"object"==typeof exports?exports.StringTune=s():t.StringTune=s()}(this,(()=>(()=>{"use strict";var t={d:(s,e)=>{for(var i in e)t.o(e,i)&&!t.o(s,i)&&Object.defineProperty(s,i,{enumerable:!0,get:e[i]})},o:(t,s)=>Object.prototype.hasOwnProperty.call(t,s),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},s={};t.r(s),t.d(s,{StringAnchor:()=>E,StringCursor:()=>r,StringDelayLerpTracker:()=>k,StringFPSTracker:()=>W,StringGlide:()=>w,StringLazy:()=>i,StringLerp:()=>M,StringLerpTracker:()=>U,StringLoading:()=>n,StringMagnetic:()=>a,StringParallax:()=>x,StringPositionTracker:()=>j,StringProgress:()=>C,StringResponsive:()=>v,StringScrollbar:()=>y,StringSplit:()=>I,StringTune:()=>$,StringVideoAutoplay:()=>o,default:()=>$});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.loop=t.loop,this.settings=s}initObject(t,s){}onScrollStart(){}onScrollStop(){}onChangeDirection(){}destructor(){}onChangeScrollParams(){}tryConnect(t){return this.attribute.process(t.el,"string","").split("|").includes(this.htmlKey)}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.isStartLoaded=!1,this.imageLoadingCount=0,this.htmlKey="lazy"}onStart(){document.querySelectorAll("img[string-lazy]").forEach((t=>{this.load(t)})),this.isStartLoaded=!0}onConnect(t){if(this.imageLoadingCount++,this.isStartLoaded){let s=t.el;this.load(s)}}load(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")}))}getImageSize(t,s){return new Promise(((e,i)=>{const n=new XMLHttpRequest;n.open("GET",s,!0),n.responseType="arraybuffer",n.onload=()=>{if(206===n.status||200===n.status){const s=n.response,o=new Blob([s]),r=new Image;r.onload=()=>{t.style.aspectRatio=`${r.width} / ${r.height}`,e({width:r.width,height:r.height}),URL.revokeObjectURL(r.src),this.imageLoadingCount--,this.imageLoadingCount<=0&&(this.events.emit("all-image-loaded",null),this.imageLoadingCount=0)},r.onerror=()=>{i(new Error("Failed to load image"))},r.src=URL.createObjectURL(o)}else i(new Error("Failed to load image"))},n.onerror=()=>{i(new Error("Network error"))},n.setRequestHeader("Range","bytes=0-"),n.send()}))}}class n extends 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 o 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 r extends e{constructor(t,s=null){super(t),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.cursor.style.setProperty("--x-lerp",this.virtualCursor.lerpX.toFixed(2)),this.cursor.style.setProperty("--y-lerp",this.virtualCursor.lerpY.toFixed(2)),this.objects.forEach((t=>{if(t.isMouseMove){let s=t.el.getBoundingClientRect();const e=this.calculateOffset("center",this.virtualCursor.x-s.left,s.width),i=this.calculateOffset("center",this.virtualCursor.y-s.top,s.height);t.mouseX+=this.lerp.process(t.mouseX,e,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}else if(0!=t.mouseX||0!=t.mouseY){let s=t.el.getBoundingClientRect();const e=this.calculateOffset("center",t.halfWidth,s.width),i=this.calculateOffset("center",t.halfHeight,s.height);t.mouseX+=this.lerp.process(t.mouseX,e,t.lerp),t.mouseY+=this.lerp.process(t.mouseY,i,t.lerp),this.setMouseCoordinates(t,t.mouseX,t.mouseY)}}))}onConnect(t){let s=t.el;null!=this.settings&&null!=this.settings["string-lerp"]&&(t.lerp=this.settings["string-lerp"]);let e=()=>{s.addEventListener("mousemove",i),s.addEventListener("mouseleave",n),t.isMouseMove=!0,null!=t.cursorTarget&&(this.cursor.classList.add(t.cursorTargetClass),this.cursor.classList.add("-show"),t.cursorTarget.classList.add("-show"))},i=t=>{},n=()=>{s.removeEventListener("mousemove",i),s.removeEventListener("mouseleave",n),t.isMouseMove=!1,null!=t.cursorTarget&&(this.cursor.classList.remove(t.cursorTargetClass),this.cursor.classList.remove("-show"),t.cursorTarget.classList.remove("-show"))};t.onEnter=()=>{s.addEventListener("mouseenter",e)},t.onLeave=()=>{s.removeEventListener("mouseenter",e),s.removeEventListener("mousemove",i),s.removeEventListener("mouseleave",n)}}setMouseCoordinates(t,s,e){0==t.selfDisable&&(t.el.style.setProperty("--mouse-x",s.toFixed(2)),t.el.style.setProperty("--mouse-y",e.toFixed(2))),t.connects.forEach((t=>{t.style.setProperty("--mouse-x",s.toFixed(2)),t.style.setProperty("--mouse-y",e.toFixed(2))}))}calculateOffset(t,s,e){switch(t){case"start":return s/e;case"end":return(s-e)/e;default:return(s-e/2)/(e/2)}}}class a extends e{constructor(t){super(t),this.htmlKey="magnetic"}onConnect(t){t.el,null!=this.settings&&(null!=this.settings["string-strength"]&&(t.strength=this.settings["string-strength"]),null!=this.settings["string-radius"]&&(t.radius=this.settings["string-radius"]),null!=this.settings["string-lerp"]&&(t.lerp=this.settings["string-lerp"]))}onMouseMove(t){this.objects.forEach((s=>{const e=s.el.getBoundingClientRect(),i=e.left+s.halfWidth,n=e.top+s.halfHeight,o=t.clientX-i,r=t.clientY-n,a=Math.sqrt(o**2+r**2);a<s.radius?(s.magneticTargetX=o*s.strength*((s.radius-a)/s.radius),s.magneticTargetY=r*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{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}set mouseLerp(t){this._lF=t}constructor(t=.1){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,this._lF=t}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=this._x+this._lerpX,this._y=this._y+this._lerpY,Math.abs(this._lerpX)<.1&&(this._x=this.targetX),Math.abs(this._lerpY)<.1&&(this._y=this.targetY)}}const c="top",d="bottom",u="left",p="right";class m{constructor(t){this.id="",this.oStart=0,this.oEnd=0,this.size=0,this.startPos=0,this.endPos=0,this.differencePos=0,this.factor=1,this.inviewTop=1,this.inviewBottom=1,this.sElPos="",this.sScrPos="",this.eElPos="",this.eScrPos="",this.halfWidth=0,this.halfHeight=0,this.start=0,this.end=0,this.mouseX=0,this.mouseY=0,this.magneticTargetX=0,this.magneticTargetY=0,this.magneticX=0,this.magneticY=0,this.lerp=0,this.glide=0,this.strength=0,this.weight=0,this.radius=0,this.parallaxPositionStart=0,this.parallaxPositionEnd=0,this.progress=0,this.connects=new Array,this.cursorTarget=null,this.cursorTargetClass="",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.anchor="center center",this.intensity3D=10,this.distance3D=10,this.decay3D=1,this.type3D="box",this.material3D="basic",this.color3D="#ffffff",this.model3D="",this.animations3D=new Array,this.el=t}enter(){this.active=!0,this.modules.forEach((t=>{t.addObject(this.id,this)})),this.onEnter()}leave(){this.active=!1,this.modules.forEach((t=>{t.removeObject(this.id)})),this.onLeave()}show(){this.el.classList.add("-inview")}hide(){this.repeat&&this.el.classList.remove("-inview")}connect(t){this.modules.push(t)}calculatePositions(t){this.sElPos===c&&this.sScrPos===c||this.sElPos===u&&this.sScrPos===u?this.startPos=this.start-this.oEnd:this.sElPos===c&&this.sScrPos===d||this.sElPos===u&&this.sScrPos===p?this.startPos=this.start-t-this.oEnd:this.sElPos===d&&this.sScrPos===c||this.sElPos===p&&this.sScrPos===u?this.startPos=this.start+this.size-this.oEnd:(this.sElPos===d&&this.sScrPos===d||this.sElPos===p&&this.sScrPos===p)&&(this.startPos=this.start-t-this.oEnd+this.size),this.eElPos===c&&this.eScrPos===c||this.eElPos===u&&this.eScrPos===u?this.endPos=this.start+this.oStart:this.eElPos===c&&this.eScrPos===d||this.eElPos===u&&this.eScrPos===p?this.endPos=this.start-t+this.oStart:this.eElPos===d&&this.eScrPos===c||this.eElPos===p&&this.eScrPos===u?this.endPos=this.start+this.size+this.oStart:(this.eElPos===d&&this.eScrPos===d||this.eElPos===p&&this.eScrPos===p)&&(this.endPos=this.start-t+this.size+this.oStart),this.differencePos=this.endPos-this.startPos}}var g;!function(t){t[t.Mobile=0]="Mobile",t[t.Tablet=1]="Tablet",t[t.Laptop=2]="Laptop",t[t.Desktop=3]="Desktop"}(g||(g={}));class b{constructor(t){var s;this.min=void 0,this.max=void 0,this.enable=!0,this.min=null==t?void 0:t.min,this.max=null==t?void 0:t.max,this.enable=null===(s=null==t?void 0:t.enable)||void 0===s||s}setEnable(t=!0){this.enable=t}setRange(t,s){this.min=null!=t?t:void 0,this.max=null!=s?s:void 0}get mediaQuery(){let t="screen";return this.min&&(t+=` and (min-width: ${this.min}px)`),this.max&&(t+=` and (max-width: ${this.max}px)`),t}}class v extends e{constructor(t,s){super(t,s),this.queries={[g.Mobile]:new b({max:359}),[g.Tablet]:new b({min:360,max:1079}),[g.Laptop]:new b({min:1080,max:1365}),[g.Desktop]:new b({min:1366})},this.matchMedias={[g.Mobile]:window.matchMedia(this.queries[g.Mobile].mediaQuery),[g.Tablet]:window.matchMedia(this.queries[g.Tablet].mediaQuery),[g.Laptop]:window.matchMedia(this.queries[g.Laptop].mediaQuery),[g.Desktop]:window.matchMedia(this.queries[g.Desktop].mediaQuery)},this._type=2}onConnect(){}onStart(){var t,s,e,i;if(null!=this.settings&&null!=this.settings.settings){let n=this.settings.settings;n.mobile?(this.queries[g.Mobile].enable=!0,this.queries[g.Mobile].setRange(null==n.mobile.min?null:n.mobile.min,null!==(t=n.mobile.max)&&void 0!==t?t:null),this.matchMedias[g.Mobile]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Mobile].enable=!1,n.tablet?(this.queries[g.Tablet].enable=!0,this.queries[g.Tablet].setRange(null==n.mobile.min?null:n.mobile.min,null!==(s=n.mobile.max)&&void 0!==s?s:null),this.matchMedias[g.Tablet]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Tablet].enable=!1,n.laptop?(this.queries[g.Laptop].enable=!0,this.queries[g.Laptop].setRange(null==n.mobile.min?null:n.mobile.min,null!==(e=n.mobile.max)&&void 0!==e?e:null),this.matchMedias[g.Laptop]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Laptop].enable=!1,n.desktop?(this.queries[g.Desktop].enable=!0,this.queries[g.Desktop].setRange(null==n.mobile.min?null:n.mobile.min,null!==(i=n.mobile.max)&&void 0!==i?i:null),this.matchMedias[g.Desktop]=window.matchMedia(this.queries[g.Mobile].mediaQuery)):this.queries[g.Desktop].enable=!1}this.updateElements()}onResize(){this.updateElements()}updateElements(){const t=this.matchMedias[g.Mobile].matches&&this.queries[g.Mobile].enable,s=this.matchMedias[g.Tablet].matches&&this.queries[g.Tablet].enable,e=this.matchMedias[g.Laptop].matches&&this.queries[g.Laptop].enable,i=this.matchMedias[g.Desktop].matches&&this.queries[g.Desktop].enable;document.querySelectorAll("[string-mobile], [string-tablet], [string-laptop], [string-desktop]").forEach((n=>{let o=!1;n.hasAttribute("string-mobile")&&t&&(o=!0),n.hasAttribute("string-tablet")&&s&&(o=!0),n.hasAttribute("string-laptop")&&e&&(o=!0),n.hasAttribute("string-desktop")&&i&&(o=!0),n.style.display=o?null:"none"}))}}class f{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 S{constructor(t,s,e){this.isDragging=!1,this.startCoordinate=0,this.startScrollPosition=0,this.data=t,this.scrollbar=s,this.thumb=e}onResize(){const t=this.data.psW,s=this.data.wS,e=s/t*s;this.thumb.style.setProperty("--size",e+"px"),t<=s?this.scrollbar.classList.add("-hide"):this.scrollbar.classList.remove("-hide")}updateThumb(){const t=this.data.psW,s=this.data.wS;this.thumb.style.setProperty("--position",this.data.c/t*s+"px")}mouseDownEvent(t){this.startCoordinate=t.clientX,this.startScrollPosition=this.data.c}mouseMoveEvent(t){const s=t.clientX-this.startCoordinate,e=this.startScrollPosition+s/this.data.wS*this.data.psW;this.data.c=e,this.data.t=e,window.scrollTo(0,e),this.updateThumb()}}class y extends e{constructor(t){super(t),this.isDragging=!1,this.scrollMode="smooth",this.mouseUpEventBind=this.mouseUpEvent.bind(this),this.mouseDownEventBind=this.mouseDownEvent.bind(this),this.mouseMoveEventBind=this.mouseMoveEvent.bind(this)}destructor(){document.removeEventListener("mouseup",this.mouseUpEventBind),this.thumb.removeEventListener("mousedown",this.mouseDownEventBind),document.removeEventListener("mousemove",this.mouseMoveEventBind)}onStart(){this.createScrollbar(),this.updateThumb(),this.addCustomStyles(),document.addEventListener("mouseup",this.mouseUpEventBind),this.thumb.addEventListener("mousedown",this.mouseDownEventBind),document.addEventListener("mousemove",this.mouseMoveEventBind),document.documentElement.classList.add("-no-scrollbar")}onScroll(t){this.updateThumb(),this.showScrollbar(),this.hideScrollbar()}onResize(){this.scrollbarState.onResize()}onChangeScrollParams(){"disable"==this.data.sM&&"disable"!=this.scrollMode&&this.scrollbar.classList.add("-hide"),("smooth"==this.data.sM&&"disable"==this.scrollMode||"default"==this.data.sM&&"disable"==this.scrollMode)&&this.scrollbar.classList.remove("-hide"),this.scrollMode=this.data.sM}onChangeScrollDirection(){"horizontal"==this.data.sD?this.scrollbarState=this.scrollbarStateVertical:this.scrollbarState=this.scrollbarStateHorizontal,this.scrollbarState.onResize()}addCustomStyles(){const t=document.createElement("style");t.textContent="\n ::-webkit-scrollbar {\n display: none;\n width: 0;\n height: 0;\n -webkit-appearance: none;\n }\n body {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n .-without-scrollbar::-webkit-scrollbar {\n display: none;\n }\n .-without-scrollbar {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n ",document.head.appendChild(t)}createScrollbar(){this.scrollbar=document.createElement("div"),this.scrollbar.classList.add("scrollbar"),this.thumb=document.createElement("div"),this.thumb.classList.add("thumb"),this.scrollbar.appendChild(this.thumb),document.body.appendChild(this.scrollbar),this.scrollbarStateHorizontal=new f(this.data,this.scrollbar,this.thumb),this.scrollbarStateVertical=new S(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 E extends e{constructor(t){super(t),this.oldLerp=0,this.htmlKey="anchor"}initObject(t,s){t.anchor=this.attribute.process(s,"string-anchor","center center")}onConnect(t){null!=t.anchor&&""!=t.anchor||(t.anchor="center center");const s=t.anchor.split(" "),e=this.parseOrig(s[0]),i=this.parseOrig(s[1]||s[0]);t.el.style.transformOrigin=`${e} ${i}`}parseOrig(t){if((t=t.trim()).startsWith("random")){const s=t.slice(7,-1).split(",").map((t=>t.trim()));return s[Math.floor(Math.random()*s.length)]}return t}}class w extends e{constructor(t,s=null){if(super(t),this.previousLerp=0,this.displacement=0,this.acceleration=0,this.velocityMultiplier=.00125,this.isInitialScroll=!0,this.baseVelocityMultiplier=.00125,this.reducedVelocityMultiplier=this.baseVelocityMultiplier/20,this.negativeVelocityMultiplier=-1e-4,this.ACCELERATION_STEP=.05,this.MIN_DISPLACEMENT=.01,this.MAX_DISPLACEMENT=1,this.MIN_VELOCITY=-1,this.MAX_VELOCITY=1,this.maxDisplacementValue=0,this.setupItem=t=>{const s=`translate3d(0, ${-this.data.dV*this.maxDisplacementValue*t.glide}px, 0)`;t.el.style.transform=s},this.onUpdateDesktopEvent=()=>{for(let t=0;t<this.objects.length;t++){let s=this.objects[t];this.setupItem(s)}},this.onUpdateMobileEvent=()=>{},this.onUpdateEvent=this.onUpdateDesktopEvent,this.htmlKey="glide",s){const{baseVelocityMultiplier:t,reducedVelocityMultiplier:e,negativeVelocityMultiplier:i}=s;this.baseVelocityMultiplier=null!=t?t:this.baseVelocityMultiplier,this.reducedVelocityMultiplier=null!=e?e:this.reducedVelocityMultiplier,this.negativeVelocityMultiplier=null!=i?i:this.negativeVelocityMultiplier}}calcExpanderFactor(t){const s=t?this.data.v<this.previousLerp:this.data.v>this.previousLerp;this.velocityMultiplier=s?this.isInitialScroll?this.baseVelocityMultiplier:this.reducedVelocityMultiplier:this.negativeVelocityMultiplier,s||(this.isInitialScroll=!1)}onStart(){this.maxDisplacementValue=.1*this.data.wS}onResize(){window.innerWidth>1080?(this.maxDisplacementValue=.1*this.data.wS,this.onUpdateEvent=this.onUpdateDesktopEvent):(this.onUpdateEvent=this.onUpdateMobileEvent,this.resetState(),this.objects.forEach((t=>{this.setupItem(t)})))}resetState(){this.displacement=0,this.acceleration=0,this.isInitialScroll=!0,this.velocityMultiplier=this.baseVelocityMultiplier}onScrollStart(){this.resetState()}onScrollStop(){this.resetState(),this.previousLerp=0,document.documentElement.style.setProperty("--glide","0");for(let t=0;t<this.objects.length;t++){const s="translate3d(0, 0px, 0)";this.objects[t].el.style.transform=s}}onUpdate(t){this.calcExpanderFactor(!1===this.data.sDB),this.acceleration=Math.min(this.MAX_DISPLACEMENT,this.acceleration+this.ACCELERATION_STEP),this.displacement=Math.max(this.MIN_DISPLACEMENT,Math.min(this.MAX_DISPLACEMENT,this.displacement+this.velocityMultiplier)),this.data.dV=Math.min(this.MAX_VELOCITY,Math.max(this.MIN_VELOCITY,this.data.v*this.displacement*this.acceleration)),document.documentElement.style.setProperty("--glide",this.data.dV.toString()),this.previousLerp=this.data.v,this.onUpdateEvent()}}class M extends e{constructor(t){super(t),this.oldLerp=0,this._type=2}onScrollStop(){document.documentElement.style.setProperty("--lerp","0")}onScroll(t){document.documentElement.style.setProperty("--lerp",this.data.v.toString()),this.oldLerp=t.v}}class x extends e{constructor(t){super(t),this.setupParallax=(t,s)=>{let e=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))},this.onScrollDesktopEvent=()=>{this.objects.forEach((t=>{let s=Math.min(1,Math.max(0,(this.data.c-t.startPos)/t.differencePos));t.el.style.setProperty(t.key,s.toString()),this.setupParallax(t,s)}))},this.onScrollMobileEvent=()=>{},this.onScrollEvent=this.onScrollDesktopEvent,this.htmlKey="parallax"}onConnect(t){if(null!=this.settings){if(null!=this.settings["string-parallax-bias"]){let s=this.attribute.process(t.el,"string-parallax-bias",this.settings["string-parallax-bias"]);t.parallaxPositionStart=.5*s-.5,t.parallaxPositionEnd=.5+.5*(1-s)}null!=this.settings["string-parallax"]&&(t.factor=this.settings["string-parallax"])}}onScroll(t){this.onScrollEvent()}onChangeScrollDirection(){"vertical"==this.data.sD?this.setupParallax=(t,s)=>{let e=`translate3d(0, ${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))}:this.setupParallax=(t,s)=>{let e=`translate3d(${t.factor*this.data.wS*t.parallaxPositionStart+s*t.factor*this.data.wS*t.parallaxPositionEnd}px, 0, 0)`;t.el.style.transform=e,t.connects.forEach((t=>{t.style.transform=e}))}}onResize(){window.innerWidth>1080?this.onScrollEvent=this.onScrollDesktopEvent:(this.onScrollEvent=this.onScrollMobileEvent,this.objects.forEach((t=>{this.setupParallax(t,.5)})))}}class C extends e{constructor(t){super(t),this.oldLerp=0,this.htmlKey="progress"}onScroll(t){this.objects.forEach((t=>{this.setUpObject(t,this.data.v)}))}onConnect(t){t.onEnter=()=>{this.setUpObject(t,0)}}setUpObject(t,s){t.progress=Math.min(1,Math.max(0,(this.data.c-t.startPos)/t.differencePos)),this.applyProgress(t,t.progress)}applyProgress(t,s){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 P{constructor(t,s,e){this.isProg=!1,this.isParallaxEnabled=!1,this.name="",this.v=0,this.vT=0,this.onScrollStart=()=>{},this.onScrollStop=()=>{},this.onChangeDirection=()=>{},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 L extends P{constructor(t,s,e){super(t,s,e),this.name="mobile"}onUpdate(){if(0!=this.data.d){let t=this.data.d*this.settings.speedAccelerate;this.data.d-=t,this.data.v=t,Math.abs(this.data.v)<.1&&(this.data.d=0,this.data.v=0,this.onScrollStop())}}onScroll(t){this.data.c=this.d.documentElement.scrollTop,this.data.t=this.d.documentElement.scrollTop}onWheel(t){if(0!=t.deltaY){0==this.data.d&&this.onScrollStart();let s=t.deltaY;0==this.data.t&&(this.data.d+=Math.max(0,t.deltaY)),this.data.d+=s}}}class _ extends P{constructor(t,s,e){super(t,s,e),this.name="disable"}onUpdate(){}onWheel(t){t.preventDefault()}onScroll(t){t.preventDefault()}}const D="-scroll-forward",T="-scroll-back";class O extends P{constructor(t,s,e){super(t,s,e),this.name="desktop",this.isScrollbarManipulation=!1,this.isBottomScrollDirection=!1,this.velocityThreshold=.1,this.previousCurrent=0}updateScrollDirection(t){if(this.isBottomScrollDirection===t)return;this.isBottomScrollDirection=t,this.data.sDB=t,this.onChangeDirection();const s=t;document.documentElement.classList.toggle(D,s),document.documentElement.classList.toggle(T,!s)}clamp(t,s,e){return Math.min(Math.max(t,s),e)}stopScroll(){this.data.v=0,this.data.d=0,this.data.t=this.data.c,this.isProg=!1,this.onCalcUpdate(),document.documentElement.classList.remove(T,D)}onUpdate(){const{data:t,settings:s}=this;let e=this.data.d*this.settings.speedAccelerate;if(this.data.t=Math.min(Math.max(0,this.data.t+e),this.data.bS),this.data.d-=e,this.data.v=(this.data.t-this.data.c)*this.settings.speed,this.isScrollbarManipulation)return this.isScrollbarManipulation=!1,void(t.c=t.t);const i=Math.abs(t.v);0!==i&&(t.v>0?(this.data.c=this.clamp(Math.ceil(t.c+t.v),0,t.bS),this.updateScrollDirection(!0)):(this.data.c=this.clamp(Math.floor(t.c+t.v),0,t.bS),this.updateScrollDirection(!1)),i<this.velocityThreshold?(this.stopScroll(),this.onScrollStop()):(this.isProg=!0,this.previousCurrent!=this.data.c&&(this.previousCurrent=this.data.c,this.onCalcUpdate())))}onWheel(t){if(0!=t.deltaY){t.preventDefault(),0==this.data.d&&this.onScrollStart();let s=t.deltaY;0==this.data.t&&(this.data.d+=Math.max(0,t.deltaY)),this.data.t==this.data.bS&&(this.data.d+=Math.min(0,t.deltaY)),this.data.d+=s}}onScroll(t){var s,e;this.isProg||(this.isScrollbarManipulation=!0,this.data.t=null!==(e=null===(s=this.scrollContainer)||void 0===s?void 0:s.scrollTop)&&void 0!==e?e:document.documentElement.scrollTop)}}class A{constructor(){this.sC=.1,this.sA=.25,this.mL=.25}get speed(){return this.sC}get speedAccelerate(){return this.sA}set speedAccelerate(t){this.sA=t}set speed(t){this.sC=t}get mouseLerp(){return this.mL}set mouseLerp(t){this.mL=t}}class I 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&&(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&&(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],n=e[4]?e[4].split(","):[];switch(t+i){case"char-line":s.charLine.push(this.parseParam(n));break;case"char-word":s.charWord.push(this.parseParam(n));break;case"word-line":s.wordLine.push(this.parseParam(n));break;case"line":s.line.push(this.parseParam(n));break;case"word":s.word.push(this.parseParam(n));break;case"char":s.char.push(this.parseParam(n))}}})),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"),n=e.split(/\s+/);let o=0,r=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;n.forEach(((t,e)=>{l.textContent=t,t.length>0&&(l.textContent+=" ");const i=l.offsetWidth,n={text:t,width:i,chars:new Array};Array.from(t).forEach(((t,s)=>{const e={text:t};n.chars.push(e)})),u+i>s.offsetWidth&&(c.push(d),d=[],u=0,o+=d.length),d.push(n),u+=i})),c.push(d);let p=!1;null!=t.line&&t.line.length>0&&(p=!0),null!=t.wordLine&&t.wordLine.length>0&&(p=!0),null!=t.charLine&&t.charLine.length>0&&(p=!0);let m=0;if(p)for(let s=0;s<c.length;s++)this.appendVirtualLineToDOM(s,c.length,n.length,i,c[s],t,o,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 n=document.createElement("span");n.classList.add("-s-char"),n.textContent=e.text,this.applyOptions(n,t.char,o,"char",i,a),this.applyOptions(n,t.charWord,i,"char-word",i,s.text.length),l.appendChild(n),o++})),this.applyOptions(l,t.word,r,"word",e,n.length),s.chars.length>0&&(l.innerHTML+=" "),i.appendChild(l),r++}}));return document.body.removeChild(l),{html:i.innerHTML}}appendVirtualLineToDOM(t,s,e,i,n,o,r,a,l){const h=document.createElement("span");h.classList.add("-s-line"),this.applyOptions(h,o.line,t,"line",0,s);let c=0,d=0,u=0;n.forEach(((t,s)=>{u+=t.text.length})),n.forEach(((t,s)=>{if(t.chars.length>0){const i=document.createElement("span");i.classList.add("-s-word"),t.chars.forEach(((s,e)=>{const n=document.createElement("span");n.classList.add("-s-char"),n.textContent=s.text,this.applyOptions(n,o.char,r,"char",e,a),this.applyOptions(n,o.charLine,c,"char-line",e,u),this.applyOptions(n,o.charWord,e,"char-word",e,t.text.length),i.appendChild(n),r++,c++})),this.applyOptions(i,o.word,l+d,"word",l+d,e-1),this.applyOptions(i,o.wordLine,s,"word-line",s,n.length),s<n.length-1&&(i.innerHTML+=" "),h.appendChild(i),d++}})),i.appendChild(h)}applyOptions(t,s,e,i,n,o){s&&s.forEach(((s,r)=>{let a=this.calculateIndex(s,e,n,o);const l=this.generateVariableName(i,s,r);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 n=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;n=Math.floor(Math.random()*(e-s+1))+s}return"end"===t.align?n=i-n-1:"center"===t.align&&(n-=Math.floor(i/2)),t.abs&&(n=Math.abs(n)),n}generateVariableName(t,s,e){let i=`--${t}`;return s.align&&(i+=`-${s.align}`),i}}class H{constructor(){this.isAnimationStarted=!1,this.requestAnimationId=0,this.onFrame=()=>{}}get now(){return this._now}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 k extends e{constructor(t){super(t),this.canvasHeight=0,this._type=2}onStart(){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=.5*window.innerWidth,this.canvas.height=window.innerHeight/15-20,this.canvasHeight=window.innerHeight/15-20,this.canvas.style.position="fixed",this.canvas.style.bottom=window.innerHeight/20+10+"px",this.canvas.style.left="50%",this.canvas.style.transform="translateX(-50%)",this.canvas.style.backgroundColor="#000000",this.canvas.style.border="1px solid rgba(255, 255, 255, 0.2)",this.canvas.style.zIndex="1000",document.body.appendChild(this.canvas),this.positionHistory=[],this.maxHistory=this.canvas.width,this.currentPosition=0,this.targetPosition=0}onScroll(t){this.currentPosition=Math.abs(this.data.dV),this.positionHistory.push(this.currentPosition),this.positionHistory.length>this.maxHistory&&this.positionHistory.shift(),this.drawGraph()}drawGraph(){const t=this.context;t.clearRect(0,0,this.canvas.width,this.canvas.height),t.strokeStyle="#e0e0e0",t.lineWidth=1,t.strokeStyle="red",t.lineWidth=2,t.beginPath(),this.positionHistory.forEach(((s,e)=>{const i=e,n=this.canvas.height-s*this.canvasHeight;0===e?t.moveTo(i,n):t.lineTo(i,n)})),t.stroke()}setTargetPosition(t){this.targetPosition=t}}class W extends e{constructor(t){super(t),this.callCount=0,this._type=2}createDisplayElement(){this.displayElement=document.createElement("div"),this.displayElement.style.position="fixed",this.displayElement.style.bottom="10px",this.displayElement.style.right="10px",this.displayElement.style.backgroundColor="#000000",this.displayElement.style.border="1px solid rgba(255, 255, 255, 0.2)",this.displayElement.style.zIndex="9999",this.displayElement.setAttribute("data-fps","0"),document.body.appendChild(this.displayElement);const t=document.createElement("style");t.innerHTML="\n [data-fps]::after {\n content: 'FPS: ' attr(fps);\n position: relative;\n display: block;\n color: #ffffff;\n padding: 5px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n ",document.head.appendChild(t)}onStart(){this.createDisplayElement(),this.intervalId=setInterval((()=>{this.displayElement.setAttribute("fps",`${this.callCount}`),this.callCount=0}),1e3)}onUpdate(t){this.callCount++}destructor(){clearInterval(this.intervalId),document.body.removeChild(this.displayElement)}}class U extends e{constructor(t){super(t),this._type=2}onStart(){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=.5*window.innerWidth,this.canvas.height=window.innerHeight/15-20,this.canvas.style.position="fixed",this.canvas.style.bottom="10px",this.canvas.style.left="50%",this.canvas.style.transform="translateX(-50%)",this.canvas.style.backgroundColor="#000000",this.canvas.style.border="1px solid rgba(255, 255, 255, 0.2)",this.canvas.style.zIndex="1000",document.body.appendChild(this.canvas),this.positionHistory=[],this.maxHistory=this.canvas.width,this.currentPosition=0,this.targetPosition=0}onScroll(t){this.currentPosition=Math.abs(this.data.v),this.positionHistory.push(this.currentPosition),this.positionHistory.length>this.maxHistory&&this.positionHistory.shift(),this.drawGraph()}drawGraph(){const t=this.context;t.clearRect(0,0,this.canvas.width,this.canvas.height),t.strokeStyle="#e0e0e0",t.lineWidth=1,t.strokeStyle="#007bff",t.lineWidth=2,t.beginPath(),this.positionHistory.forEach(((s,e)=>{const i=e,n=this.canvas.height-s/2;0===e?t.moveTo(i,n):t.lineTo(i,n)})),t.stroke()}setTargetPosition(t){this.targetPosition=t}}class j extends e{constructor(t){super(t),this.callCount=0,this._type=2}createDisplayElement(){this.displayElement=document.createElement("div"),this.displayElement.style.position="fixed",this.displayElement.style.bottom="10px",this.displayElement.style.left="10px",this.displayElement.style.backgroundColor="#000000",this.displayElement.style.border="1px solid rgba(255, 255, 255, 0.2)",this.displayElement.style.zIndex="9999",this.displayElement.setAttribute("data-position","0"),document.body.appendChild(this.displayElement);const t=document.createElement("style");t.innerHTML="\n [data-position]::after {\n content: attr(direction) 'Top: ' attr(value) 'px';\n position: relative;\n display: block;\n color: #ffffff;\n padding: 5px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n ",document.head.appendChild(t)}onStart(){this.createDisplayElement()}onScroll(t){let s="";t.c<t.t&&(s="↓"),t.c>t.t&&(s="↑"),this.displayElement.setAttribute("direction",s),this.displayElement.setAttribute("value",`${this.data.c}`)}onUpdate(t){this.callCount++}destructor(){document.body.removeChild(this.displayElement)}}class B{process(t,s,e=null){return null==t.getAttribute(s)?e:t.getAttribute(s)}}class z{process(t){return t.getBoundingClientRect()}}class R{constructor(){this.three=null,this.t=0,this.c=0,this.d=0,this.v=0,this.dV=0,this.sDB=!1,this.bS=0,this.cF=1,this.wS=0,this.hnwS=0,this.psW=0,this.psH=0,this.scsW=1,this.scsH=1,this.sD="vertical",this.sM="smooth"}}class Y{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 X{parseSingle(t,s,e,i){let n,o=t.startsWith("-");return o&&(t=t.slice(1)),"selfHeight"===t?n=s.offsetHeight:t.endsWith("px")?n=parseFloat(t):t.endsWith("%")?n=parseFloat(t)*e/100:t.endsWith("rem")&&(n=parseFloat(t)*i),o?-n:n}}class V{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:n}=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 r=o;let t=r[0]*r[3]-r[1]*r[2];return{width:i/r[0]==0?1:r[0],height:n/r[3]==0?1:r[3],left:(e*r[3]-s*r[2]+r[2]*r[5]-r[4]*r[3])/t,top:(-e*r[1]+s*r[0]+r[4]*r[1]-r[0]*r[5])/t}}return{top:s,left:e,width:i,height:n}}(t);return{top:i.top-e.top,left:i.left-e.left}}}function q(){return"ontouchstart"in window||navigator.maxTouchPoints>0}class ${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=.1+.4*t}get speed(){return this.settings.speed}set speed(t){this.settings.speed=t}get mouseLerp(){return this.settings.mouseLerp}set mouseLerp(t){this.settings.mouseLerp=t}get scrollPosition(){return this.data.c}set scrollPosition(t){this.data.c=t,this.data.t=t,window.scrollTo(0,this.data.c);for(let t=0;t<this.modules.length;t++)this.modules[t].onScroll(this.data)}set scrollContainer(t){let s=null!=this.data.sC;s&&(this.data.sC.removeEventListener("scroll",this.onScrollBind),this.data.sC.removeEventListener("resize",this.onResizeBind)),this.sEn.scrollContainer=t,this.sEnSmooth.scrollContainer=t,this.sEnDefault.scrollContainer=t,this.sEnDisable.scrollContainer=t,this.data.sC=t,s&&(this.data.sC.addEventListener("scroll",this.onScrollBind),this.data.sC.addEventListener("resize",this.onResizeBind)),this.rebuild(),this.initObjects()}set scrollMobileMode(t){this.mMode=t,this.updateModeParams()}set scrollDesktopMode(t){this.dMode=t,this.updateModeParams()}updateModeParams(){switch(this.window.innerWidth<1024||q()?this.scrollMode=this.mMode:this.scrollMode=this.dMode,this.scrollMode){case"disable":this.data.sM="disable",this.sEn=this.sEnDisable,this.onChangeScrollParams(),document.documentElement.style.overflow="hidden";break;case"default":this.data.sM="default",this.sEn=this.sEnDefault,this.onChangeScrollParams(),document.documentElement.style.overflow="auto";break;default:this.data.sM="smooth",this.sEn=this.sEnSmooth,this.onChangeScrollParams(),document.documentElement.style.overflow="auto"}}constructor(){this.modules=new Array,this.modulesUI=new Array,this.events=new Y,this.loop=new H,this.wW=0,this.wH=0,this._virtualCursor=new h,this._lerp=new l,this._attribute=new B,this._boundingClientRect=new z,this._position=new V,this.objects=new Map,this.connectQueue=new Array,this.globalId=1,this._parser=new X,this.scrollMode="smooth",this.mMode="default",this.dMode="smooth",this.defaultSettings={stringOffsetStart:"0%",stringOffsetEnd:"0%",stringEnterEl:"top",stringExitEl:"bottom",stringEnterVp:"bottom",stringExitVp:"top",stringInviewTop:"0%",stringInviewBottom:"0%",stringKey:"--progress",stringStrength:.3,stringRadius:150,stringLerp:.2,stringParallaxBias:0,stringParallax:.2},this.root=document.body,this.window=window,this.settings=new A,this.data=new R,this._virtualCursor.mouseLerp=this.mouseLerp,this.sEnSmooth=new O(document,this.settings,this.data),this.sEnDefault=new L(document,this.settings,this.data),this.sEnDisable=new _(document,this.settings,this.data),this.sEnSmooth.onScrollStop=this.onScrollStop.bind(this),this.sEnDefault.onScrollStop=this.onScrollStop.bind(this),this.sEnDisable.onScrollStop=this.onScrollStop.bind(this),this.sEnSmooth.onChangeDirection=this.onChangeDirection.bind(this),this.sEnDefault.onChangeDirection=this.onChangeDirection.bind(this),this.sEnDisable.onChangeDirection=this.onChangeDirection.bind(this),this.sEnSmooth.onScrollStart=this.onScrollStart.bind(this),this.sEnDefault.onScrollStart=this.onScrollStart.bind(this),this.sEnDisable.onScrollStart=this.onScrollStart.bind(this),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(),this.on("lazy-loaded",(()=>{this.rebuild()}))}static getInstance(){return $.i||($.i=new $),$.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,loop:this.loop},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");for(let t=0;t<this.modules.length;t++)this.modules[t].onStart();for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onStart();this.initObjects(),this.initMutationObserver()}onChangeScrollParams(){for(let t=0;t<this.modules.length;t++)this.modules[t].onChangeScrollParams();for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onChangeScrollParams()}initObjects(){document.querySelectorAll("[string]").forEach((t=>{this.addObject(t)})),document.querySelectorAll("[string-copy-from]").forEach((t=>{let s=this._attribute.process(t,"string-copy-from");if(null!=s&&this.objects.has(s)){let e=this.objects.get(s);null!=e&&e.connects.push(t)}})),this.modules.forEach((t=>{t.onResize(),t.onScroll(this.data),t.onUpdate(this.data)}))}destroy(){this.window.removeEventListener("scroll",this.onScrollBind),this.root.removeEventListener("wheel",this.onScrollBind),this.window.removeEventListener("resize",this.onResizeBind),this.root.removeEventListener("mousemove",this.onMouseMoveBind),this.loop.stop(),this.modules.forEach((t=>{t.destructor()})),this.modulesUI.forEach((t=>{t.destructor()}))}on(t,s,e=""){switch(t){case"update":this.events.on("update",s);break;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);break;case"lazy-loaded":this.events.on("all-image-loaded",s)}}off(t,s,e=""){switch(t){case"update":this.events.off("update",s);break;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);break;case"lazy-loaded":this.events.off("all-image-loaded",s)}}setupSettings(t){null!=t["string-offset-top"]&&(this.defaultSettings.stringOffsetStart=t["string-offset-top"]),null!=t["string-offset-bottom"]&&(this.defaultSettings.stringOffsetEnd=t["string-offset-bottom"]),null!=t["string-offset-left"]&&(this.defaultSettings.stringOffsetStart=t["string-offset-left"]),null!=t["string-offset-right"]&&(this.defaultSettings.stringOffsetEnd=t["string-offset-right"]),null!=t["string-inview-top"]&&(this.defaultSettings.stringInviewTop=t["string-inview-top"]),null!=t["string-inview-left"]&&(this.defaultSettings.stringInviewTop=t["string-inview-left"]),null!=t["string-inview-bottom"]&&(this.defaultSettings.stringInviewBottom=t["string-inview-bottom"]),null!=t["string-inview-right"]&&(this.defaultSettings.stringInviewBottom=t["string-inview-right"]),null!=t["string-enter-el"]&&(this.defaultSettings.stringEnterEl=t["string-enter-el"]),null!=t["string-enter-vp"]&&(this.defaultSettings.stringEnterVp=t["string-enter-vp"]),null!=t["string-exit-el"]&&(this.defaultSettings.stringExitEl=t["string-exit-el"]),null!=t["string-exit-vp"]&&(this.defaultSettings.stringExitVp=t["string-exit-vp"]),null!=t["string-key"]&&(this.defaultSettings.stringKey=t["string-key"]),null!=t["string-strength"]&&(this.defaultSettings.stringStrength=t["string-strength"]),null!=t["string-radius"]&&(this.defaultSettings.stringRadius=t["string-radius"]),null!=t["string-lerp"]&&(this.defaultSettings.stringLerp=t["string-lerp"]),null!=t["string-parallax-bias"]&&(this.defaultSettings.stringParallaxBias=t["string-parallax-bias"]),null!=t["string-parallax"]&&(this.defaultSettings.stringParallax=t["string-parallax"])}setupObject(t,s){var e,i,n;null===(e=s.showObserver)||void 0===e||e.disconnect(),null===(i=s.progressObserver)||void 0===i||i.disconnect(),null===(n=s.inviewObserver)||void 0===n||n.disconnect();let o=this._boundingClientRect.process(t),r=o.width/this.data.scsW,a=o.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.inviewTop=-1*this._parser.parseSingle(this._attribute.process(t,"string-inview-top",this._attribute.process(t,"string-inview-left",this.defaultSettings.stringInviewTop)),t,"vertical"==this.data.sD?a:r,16),s.inviewBottom=-1*this._parser.parseSingle(this._attribute.process(t,"string-inview",this._attribute.process(t,"string-inview-bottom",this._attribute.process(t,"string-inview-right",this.defaultSettings.stringInviewBottom))),t,"vertical"==this.data.sD?a:r,16),s.selfDisable=null!=this._attribute.process(t,"string-self-disable"),s.abs=null!=this._attribute.process(t,"string-abs");let u=this._attribute.process(t,"string-cursor-target");null!=u&&(s.cursorTarget=document.querySelector(`[string-cursor-content="${u}"]`),s.cursorTargetClass=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),s.weight=this._attribute.process(t,"string-weight",0),s.glide=this._attribute.process(t,"string-glide",1);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=r,s.oStart=this._parser.parseSingle(this._attribute.process(t,"string-offset-top",this._attribute.process(t,"string-offset-left",this.defaultSettings.stringOffsetStart)),t,this.data.wS,16),s.oEnd=this._parser.parseSingle(this._attribute.process(t,"string-offset-bottom",this._attribute.process(t,"string-offset-right",this.defaultSettings.stringOffsetEnd)),t,this.data.wS,16);let m=this._parser.parseSingle(this._attribute.process(t,"string-offset-top",this._attribute.process(t,"string-offset-left",this.defaultSettings.stringOffsetStart)),t,this.data.wS,16),g=this._parser.parseSingle(this._attribute.process(t,"string-offset-bottom",this._attribute.process(t,"string-offset-right",this.defaultSettings.stringOffsetEnd)),t,this.data.wS,16),b=this._attribute.process(s.el,"string","").split("|");s.factor=0,b.includes("parallax")&&(m=0,g=0,s.oStart=0,s.oEnd=0,s.factor=this._attribute.process(t,"string-parallax",this.defaultSettings.stringParallax),s.oStart+=s.factor*this.data.wS,s.oEnd+=s.factor*this.data.wS),s.repeat=null!=this._attribute.process(t,"string-repeat"),s.sElPos=l,s.sScrPos=h,s.eElPos=c,s.eScrPos=d,s.halfWidth=r/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+r}s.calculatePositions(v);let f,S,y=this.connectQueue.filter((t=>t.id==s.id));this.connectQueue=this.connectQueue.filter((t=>t.id!=s.id)),y.forEach((t=>{s.connects.push(t.element)})),"vertical"==this.data.sD?(f={root:null,rootMargin:`${m+this.data.wS}px 1000px ${g+this.data.wS}px 1000px`,threshold:.001},S={root:null,rootMargin:`${m+s.inviewTop}px 1000px ${g+s.inviewBottom}px 1000px`,threshold:.001}):(f={root:null,rootMargin:`1000px ${m+this.data.wS}px 1000px ${g+this.data.wS}px`,threshold:.001},S={root:null,rootMargin:`1000px ${m+s.inviewTop}px 1000px ${g+s.inviewBottom}px`,threshold:.001});let E=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?0==s.active&&(this.events.emit(`activate_object_${s.id}`,!0),s.enter()):1==s.active&&(this.events.emit(`activate_object_${s.id}`,!1),s.leave())}))}),f),w=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?this.events.emit(`intersection_${s.id}`,!0):this.events.emit(`intersection_${s.id}`,!1)}))}),{root:null,rootMargin:"0px 0px 0px 0px",threshold:.001}),M=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting?(this.events.emit(`inview_${s.id}`,!0),s.show()):(this.events.emit(`inview_${s.id}`,!1),s.hide())}))}),S);E.observe(t),w.observe(t),M.observe(t),s.showObserver=w,s.progressObserver=E,s.inviewObserver=M}addObject(t){let s,e=this._attribute.process(t,"string-inited");s=null==e?new m(t):this.objects.has(this._attribute.process(t,"string-id"))?this.objects.get(this._attribute.process(t,"string-id")):new m(t),t.setAttribute("string-inited",""),this.setupObject(t,s),this.modules.forEach((e=>{e.tryConnect(s)&&(e.initObject(s,t),e.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);for(let s=0;s<this.modules.length;s++)this.modules[s].onMouseMove(t);for(let s=0;s<this.modulesUI.length;s++)this.modulesUI[s].onMouseMove(t)}onWheelEvent(t){this.sEn.onWheel(t);for(let s=0;s<this.modules.length;s++)this.modules[s].onWheel(t);for(let s=0;s<this.modulesUI.length;s++)this.modulesUI[s].onWheel(t)}onScrollStart(){for(let t=0;t<this.modules.length;t++)this.modules[t].onScrollStart();for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onScrollStart()}onScrollStop(){for(let t=0;t<this.modules.length;t++)this.modules[t].onScrollStop();for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onScrollStop()}onChangeDirection(){for(let t=0;t<this.modules.length;t++)this.modules[t].onChangeDirection();for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onChangeDirection()}onScrollEvent(t){this.sEn.onScroll(t);for(let t=0;t<this.modules.length;t++)this.modules[t].onScroll(this.data);for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[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();for(let t=0;t<this.modules.length;t++)this.modules[t].onUpdate(this.data);for(let t=0;t<this.modulesUI.length;t++)this.modulesUI[t].onUpdate(this.data);this.events.emit("update",null)}onResizeEvent(){let t=0,s=0;try{let e=this.sEn.scrollContainer.getBoundingClientRect();t=e.width,s=e.height}catch(e){t=this.sEn.scrollContainer.innerWidth,s=this.sEn.scrollContainer.innerHeight}"vertical"==this.data.sD?(this.data.bS=this.data.psH-s,this.data.wS=s):(this.data.bS=this.data.psW-t,this.data.wS=t),(this.wW!=t||this.window.innerWidth>1024)&&(this.rebuild(),this.modules.forEach((t=>{t.onResize()})),this.modulesUI.forEach((t=>{t.onResize()}))),this.wW=t,this.wH=s}initMutationObserver(){new MutationObserver((t=>{t.forEach((t=>{"childList"===t.type&&(t.addedNodes.length>0&&t.addedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]:not([string-inited])").forEach((t=>{this.addObject(t);let s=this._attribute.process(t,"string-copy-from");if(null!=s)if(this.objects.has(s)){let e=this.objects.get(s);null!=e&&e.connects.push(t)}else this.connectQueue.push({id:s,element:t})}))})),t.removedNodes.length>0&&t.removedNodes.forEach((t=>{t.nodeType===Node.ELEMENT_NODE&&t.querySelectorAll("[string]").forEach((t=>{let s=t.getAttribute("string-id"),e=this._attribute.process(t,"string-copy-from");null!=e&&(this.connectQueue=this.connectQueue.filter((t=>t.id!=e))),null!=s&&this.removeObject(s)}))})),(t.addedNodes.length>0||t.removedNodes.length>0)&&this.modules.forEach((t=>{t.onRebuild()})))}))})).observe(document.body,{attributes:!1,childList:!0,subtree:!0})}rebuild(){try{let s=(t=this.data.sC,window.getComputedStyle(t).transform.split(/\(|,|\)/).slice(1,-1).map((function(t){return parseFloat(t)})));this.data.scsW=s[0],this.data.scsH=s[3]}catch(t){this.data.scsW=1,this.data.scsH=1}var t;try{let t=this.data.sC.getBoundingClientRect();this.wW=t.width/this.data.scsW,this.wH=t.height/this.data.scsH}catch(t){this.wW=this.data.sC.innerWidth,this.wH=this.data.sC.innerHeight}this.wW<1024||q()?this.scrollMode=this.mMode:this.scrollMode=this.dMode;let s=document.body,e=document.documentElement;this.data.psW=this.data.sC.scrollWidth,this.data.psH=this.data.sC.scrollHeight,null==this.data.psW&&(this.data.psW=Math.max(s.scrollWidth,s.offsetWidth,e.clientWidth,e.scrollWidth,e.offsetWidth)),null==this.data.psH&&(this.data.psH=Math.max(s.scrollHeight,s.offsetHeight,e.clientHeight,e.scrollHeight,e.offsetHeight)),"vertical"==this.data.sD?(this.data.bS=this.data.psH-this.wH,this.data.wS=this.wH):(this.data.bS=this.data.psW-this.wW,this.data.wS=this.wW),this.data.hnwS=-.5*this.data.wS,this.updateModeParams()}}return s})()));
2
2
  //# sourceMappingURL=index.js.map