@fiddle-digital/string-tune 0.0.39 → 0.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack://StringTune/webpack/universalModuleDefinition","webpack://StringTune/webpack/bootstrap","webpack://StringTune/webpack/runtime/define property getters","webpack://StringTune/webpack/runtime/hasOwnProperty shorthand","webpack://StringTune/webpack/runtime/make namespace object","webpack://StringTune/./src/StringModule.ts","webpack://StringTune/./src/Loading/Modules/StringLazy.ts","webpack://StringTune/./src/Loading/Modules/StringLoading.ts","webpack://StringTune/./src/Loading/Modules/StringVideoAutoplay.ts","webpack://StringTune/./src/Mouse/Modules/StringCursor.ts","webpack://StringTune/./src/Mouse/Modules/StringMagnetic.ts","webpack://StringTune/./src/Utils/StringLerpCalc.ts","webpack://StringTune/./src/Mouse/StringVirtualCursor.ts","webpack://StringTune/./src/Objects/StringObject.ts","webpack://StringTune/./src/Screen/StringResponsive.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarHorizontal.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarVertical.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbar.ts","webpack://StringTune/./src/Scroll/Modules/StringAnchor.ts","webpack://StringTune/./src/Scroll/Modules/StringGlide.ts","webpack://StringTune/./src/Scroll/Modules/StringLerp.ts","webpack://StringTune/./src/Scroll/Modules/StringParallax.ts","webpack://StringTune/./src/Scroll/Modules/StringProgress.ts","webpack://StringTune/./src/Scroll/Types/StringScroll.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDefault.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDisable.ts","webpack://StringTune/./src/Scroll/Types/StringScrollSmooth.ts","webpack://StringTune/./src/Scroll/Types/StringTypeSettings.ts","webpack://StringTune/./src/Split/Modules/StringSplit.ts","webpack://StringTune/./src/StringFPS.ts","webpack://StringTune/./src/Tracker/StringDelayLerpTracker.ts","webpack://StringTune/./src/Tracker/StringFPSTracker.ts","webpack://StringTune/./src/Tracker/StringLerpTracker.ts","webpack://StringTune/./src/Tracker/StringPositionTracker.ts","webpack://StringTune/./src/Utils/StringAttribute.ts","webpack://StringTune/./src/Utils/StringBoundingClientRect.ts","webpack://StringTune/./src/Utils/StringData.ts","webpack://StringTune/./src/Utils/StringEvent.ts","webpack://StringTune/./src/Utils/StringParser.ts","webpack://StringTune/./src/Utils/StringPosition.ts","webpack://StringTune/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"StringTune\"] = factory();\n\telse\n\t\troot[\"StringTune\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { IStringModule } from './IStringModule';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringFPS } from './StringFPS';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerpCalc } from './Utils/StringLerpCalc';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nexport class StringModule implements IStringModule {\r\n lerp: StringLerpCalc;\r\n attribute: StringAttribute;\r\n boundingClientRect: StringBoundingClientRect;\r\n position: StringPosition;\r\n events: StringEvent;\r\n data: StringData;\r\n virtualCursor: StringVirtualCursor;\r\n loop: StringFPS;\r\n settings: any = null;\r\n protected objectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected objects: Array<StringObject> = new Array<StringObject>();\r\n protected htmlKey: string = '';\r\n protected _type: number = 1;\r\n public get type() {\r\n return this._type;\r\n }\r\n constructor(visitor: any, settings: any = null) {\r\n this.data = visitor.data;\r\n this.lerp = visitor.lerp;\r\n this.attribute = visitor.attribute;\r\n this.boundingClientRect = visitor.boundingClientRect;\r\n this.position = visitor.position;\r\n this.virtualCursor = visitor.virtualCursor;\r\n this.events = visitor.events;\r\n this.loop = visitor.loop;\r\n this.settings = settings;\r\n }\r\n initObject(object: StringObject, el: HTMLElement): void {}\r\n onScrollStart(): void { }\r\n onScrollStop(): void { }\r\n onChangeDirection(): void { }\r\n \r\n destructor() { }\r\n \r\n onChangeScrollParams(): void {}\r\n\r\n tryConnect(object: StringObject): boolean {\r\n const stringModuleKeys = this.attribute.process(object.el, 'string', '').split('|');\r\n return stringModuleKeys.includes(this.htmlKey);\r\n}\r\n connect(object: StringObject) {\r\n object.connect(this);\r\n this.onConnect(object);\r\n }\r\n addObject(id: string, object: StringObject) {\r\n this.objectsMap.set(id, object);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n removeObject(id: string) {\r\n this.objectsMap.delete(id);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n\r\n onStart(): void {}\r\n onUpdate( data: StringData): void {}\r\n onResize(): void {}\r\n onConnect(object: StringObject): void {}\r\n onRebuild(): void {}\r\n onScroll(data: StringData): void {}\r\n onMouseMove(e: MouseEvent): void {}\r\n onWheel(e: WheelEvent): void {}\r\n onChangeDevice(): void {}\r\n onChangeScrollDirection(): void {}\r\n onMutationObserver(added: NodeList, removed: NodeList): void {}\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\nexport class StringLazy extends StringModule {\r\n private isStartLoaded: boolean = false\r\n private imageLoadingCount: number = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'lazy';\r\n }\r\n\r\n onStart(): void {\r\n const imagesEls = document.querySelectorAll('img[string-lazy]');\r\n imagesEls.forEach((element: any) => {\r\n this.load(element)\r\n });\r\n this.isStartLoaded = true\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n this.imageLoadingCount++\r\n if (this.isStartLoaded) {\r\n let element: any = object.el \r\n this.load(element)\r\n }\r\n }\r\n\r\n private load(element: any) {\r\n this.getImageSize(element, element.getAttribute('string-lazy'));\r\n element.classList.add(`lazyLoad`);\r\n element.src = element.getAttribute('string-lazy') as any;\r\n element.addEventListener('load', () => {\r\n element.classList.add(`-loaded`);\r\n \r\n });\r\n }\r\n\r\n private getImageSize(element: HTMLElement, url: string) {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = () => {\r\n if (xhr.status === 206 || xhr.status === 200) {\r\n const buffer = xhr.response;\r\n const blob = new Blob([buffer]);\r\n const img = new Image();\r\n img.onload = () => {\r\n element.style.aspectRatio = `${img.width} / ${img.height}`;\r\n resolve({ width: img.width, height: img.height });\r\n URL.revokeObjectURL(img.src);\r\n this.imageLoadingCount--\r\n if (this.imageLoadingCount <= 0) {\r\n this.events.emit('all-image-loaded', null)\r\n this.imageLoadingCount = 0\r\n }\r\n };\r\n img.onerror = () => {\r\n reject(new Error('Failed to load image'));\r\n };\r\n img.src = URL.createObjectURL(blob);\r\n } else {\r\n reject(new Error('Failed to load image'));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('Network error'));\r\n };\r\n xhr.setRequestHeader('Range', 'bytes=0-');\r\n xhr.send();\r\n });\r\n }\r\n}\r\n","import { StringModule } from \"../../StringModule\";\r\nimport { StringData } from \"../../Utils/StringData\";\r\n\r\n\r\nexport class StringLoading extends StringModule{\r\n loadingTimeout: number = 0\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor)\r\n this._type = 2\r\n\r\n if (settings != null) {\r\n if (settings.timeout != null) {\r\n this.loadingTimeout = settings.timeout\r\n }\r\n }\r\n }\r\n onStart(): void {\r\n setTimeout(() => {\r\n const htmlElement = document.documentElement;\r\n htmlElement.classList.add('-loaded');\r\n }, this.loadingTimeout);\r\n \r\n }\r\n}","import { StringObject } from \"../../Objects/StringObject\";\r\nimport { StringModule } from \"../../StringModule\";\r\n\r\nexport class StringVideoAutoplay extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = \"autoplay\";\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const videoSrc = this.attribute.process(videoElement, \"string-src\", \"\");\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (videoElement.tagName.toLowerCase() === \"video\" && videoSrc && started == false) {\r\n videoElement.setAttribute(\"muted\", \"muted\");\r\n videoElement.setAttribute(\"playsinline\", \"\");\r\n videoElement.setAttribute(\"loop\", \"\");\r\n videoElement.setAttribute(\"autoplay\", \"\");\r\n videoElement.src = videoSrc;\r\n videoElement.muted = true;\r\n videoElement.addEventListener(\"canplaythrough\", () => {\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (started == false) {\r\n this.tryPlay(object, videoElement); \r\n }\r\n }, { once: true });\r\n videoElement.load();\r\n } else {\r\n console.warn(\r\n \"StringVideoAutoplay: Element is not a <video> tag or string-src is missing.\",\r\n object.el\r\n );\r\n }\r\n }\r\n\r\n private tryPlay(object: StringObject, element: HTMLVideoElement) {\r\n element.play().catch((err) => {\r\n console.warn(\"Autoplay failed:\", err);\r\n object.started = false;\r\n }).then(() => {\r\n object.started = true;\r\n element.setAttribute(`string-started`, '')\r\n });\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringCursor extends StringModule {\r\n private oldX = 0;\r\n private oldY = 0;\r\n protected enterObjectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected enterObjects: Array<StringObject> = new Array<StringObject>();\r\n cursor: any;\r\n cursorContent: any;\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor, settings);\r\n this.htmlKey = 'cursor';\r\n this.cursor = document.querySelector('[string-cursor]') as HTMLElement;\r\n this.cursorContent = document.querySelector('[string-cursor-content]') as HTMLElement;\r\n\r\n }\r\n\r\n onStart(): void {\r\n if (this.settings != null) {\r\n if (this.settings['string-lerp-cursor'] != null) {\r\n this.virtualCursor.mouseLerp = this.settings['string-lerp-cursor'] / 2\r\n }\r\n }\r\n }\r\n\r\n initObject(object: StringObject, el: HTMLElement): void {\r\n if (this.settings != null) {\r\n if (this.settings['string-lerp-target'] != null) {\r\n object.lerp = this.settings['string-lerp-target'] / 2;\r\n \r\n \r\n }\r\n }\r\n }\r\n\r\n\r\n onUpdate(data: StringData): void {\r\n if (this.virtualCursor.smoothX != this.oldX || this.virtualCursor.smoothY != this.oldY) {\r\n let cursorData = {\r\n lerpX: this.virtualCursor.lerpX,\r\n lerpY: this.virtualCursor.lerpY,\r\n x: this.virtualCursor.x,\r\n y: this.virtualCursor.y,\r\n };\r\n this.events.emit('cursor', cursorData);\r\n this.cursor.style.setProperty('--x', this.virtualCursor.smoothX);\r\n this.cursor.style.setProperty('--y', this.virtualCursor.smoothY);\r\n this.oldX = this.virtualCursor.smoothX;\r\n this.oldY = this.virtualCursor.smoothY;\r\n }\r\n this.cursor.style.setProperty('--x-lerp', this.virtualCursor.lerpX.toFixed(2));\r\n this.cursor.style.setProperty('--y-lerp', this.virtualCursor.lerpY.toFixed(2));\r\n\r\n\r\n\r\n this.objects.forEach((object) => {\r\n if (object.isMouseMove) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', this.virtualCursor.x - rect.left, rect.width);\r\n const offsetY = this.calculateOffset('center', this.virtualCursor.y - rect.top, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n \r\n } else {\r\n if (object.mouseX != 0 || object.mouseY != 0) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', object.halfWidth, rect.width);\r\n const offsetY = this.calculateOffset('center', object.halfHeight, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n }\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n\r\n let onMouseEnterEventBind = () => {\r\n element.addEventListener('mousemove', onMouseMoveEventBind);\r\n element.addEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = true;\r\n \r\n this.cursor.classList.add(object.cursorTargetClass)\r\n this.cursorContent.classList.add(object.cursorTargetClass)\r\n\r\n this.cursor.classList.add('-showing');\r\n this.cursorContent.classList.add('-showing');\r\n \r\n setTimeout(() => {\r\n this.cursor.classList.remove('-showing');\r\n this.cursorContent.classList.remove('-showing');\r\n this.cursor.classList.add('-show');\r\n this.cursorContent.classList.add('-show');\r\n }, 1200);\r\n \r\n \r\n };\r\n let onMouseMoveEventBind = (event: MouseEvent) => {};\r\n let onMouseLeaveEventBind = () => {\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = false;\r\n this.cursor.classList.remove(object.cursorTargetClass)\r\n this.cursorContent.classList.remove(object.cursorTargetClass)\r\n this.cursorContent.classList.remove('-showing');\r\n this.cursor.classList.remove('-showing');\r\n this.cursorContent.classList.remove('-show');\r\n this.cursor.classList.remove('-show');\r\n\r\n };\r\n\r\n object.onEnter = () => {\r\n element.addEventListener('mouseenter', onMouseEnterEventBind);\r\n };\r\n object.onLeave = () => {\r\n element.removeEventListener('mouseenter', onMouseEnterEventBind);\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n };\r\n }\r\n\r\n private setMouseCoordinates(object: StringObject, x: number, y: number) {\r\n if (object.selfDisable == false) {\r\n object.el.style.setProperty('--x', x.toFixed(2));\r\n object.el.style.setProperty('--y', y.toFixed(2));\r\n }\r\n object.connects.forEach((element) => {\r\n element.style.setProperty('--x', x.toFixed(2));\r\n element.style.setProperty('--y', y.toFixed(2));\r\n });\r\n }\r\n\r\n private calculateOffset(position: string, mousePos: number, size: number): number {\r\n switch (position) {\r\n case 'start':\r\n return mousePos / size;\r\n case 'end':\r\n return (mousePos - size) / size;\r\n case 'center':\r\n default:\r\n return (mousePos - size / 2) / (size / 2);\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringMagnetic extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'magnetic';\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLElement;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-strength'] != null) {\r\n object.strength = this.settings['string-strength'];\r\n }\r\n if (this.settings['string-radius'] != null) {\r\n object.radius = this.settings['string-radius'];\r\n }\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.objects.forEach((object) => {\r\n const element = object.el as HTMLElement;\r\n const rect = element.getBoundingClientRect();\r\n const elementCenterX = rect.left + object.halfWidth;\r\n const elementCenterY = rect.top + object.halfHeight;\r\n const distX = e.clientX - elementCenterX;\r\n const distY = e.clientY - elementCenterY;\r\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\r\n\r\n if (distance < object.radius) {\r\n object.magneticTargetX = distX * object.strength * ((object.radius - distance) / object.radius);\r\n object.magneticTargetY = distY * object.strength * ((object.radius - distance) / object.radius);\r\n object.isMagneting = true;\r\n } else {\r\n object.magneticTargetX = 0;\r\n object.magneticTargetY = 0;\r\n }\r\n });\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n if (object.isMagneting) {\r\n let lerpX = this.lerp.process(object.magneticX, object.magneticTargetX, object.lerp);\r\n let lerpY = this.lerp.process(object.magneticY, object.magneticTargetY, object.lerp);\r\n if (lerpX > -0.01 && lerpX < 0.01) {\r\n lerpX = 0;\r\n object.magneticX = object.magneticTargetX;\r\n }\r\n if (lerpY > -0.01 && lerpY < 0.01) {\r\n lerpY = 0;\r\n object.magneticY = object.magneticTargetY;\r\n }\r\n object.magneticX += lerpX;\r\n object.magneticY += lerpY;\r\n object.el.style.setProperty('--magnetic-x', object.magneticX.toString());\r\n object.el.style.setProperty('--magnetic-y', object.magneticY.toString());\r\n if (object.magneticTargetX == object.magneticX || object.magneticTargetY == object.magneticY) {\r\n object.isMagneting = false;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export class StringLerpCalc{\r\n process(start: number, end: number, amt: number) {\r\n return amt * (end - start);\r\n }\r\n}","import { StringLerpCalc } from \"../Utils/StringLerpCalc\";\r\n\r\nexport class StringVirtualCursor{\r\n private _lF = .1\r\n private lerp = new StringLerpCalc()\r\n \r\n private _x: number = 0\r\n private _y: number = 0\r\n private _lerpX: number = 0\r\n private _lerpY: number = 0\r\n\r\n private targetX: number = 0\r\n private targetY: number = 0\r\n\r\n public get x(){\r\n return this.targetX\r\n }\r\n public get y(){\r\n return this.targetY\r\n }\r\n public get smoothX(){\r\n return this._x\r\n }\r\n public get smoothY(){\r\n return this._y\r\n }\r\n public get lerpX(){\r\n return this._lerpX\r\n }\r\n public get lerpY(){\r\n return this._lerpY\r\n }\r\n\r\n\r\n public set mouseLerp(value: number){\r\n this._lF = value\r\n }\r\n\r\n constructor(mouseLerp: number = .1) {\r\n this._lF = mouseLerp\r\n }\r\n\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.targetX = e.clientX;\r\n this.targetY = e.clientY;\r\n }\r\n onUpdate(): void {\r\n this._lerpX = this.lerp.process(this._x, this.targetX, this._lF)\r\n this._lerpY = this.lerp.process(this._y, this.targetY, this._lF)\r\n \r\n if (Math.abs(this._lerpX) < .1) {\r\n this._x = this.targetX\r\n } else {\r\n this._x = this._x + this._lerpX;\r\n }\r\n if (Math.abs(this._lerpY) < .1) {\r\n this._y = this.targetY\r\n } else {\r\n this._y = this._y + this._lerpY;\r\n }\r\n }\r\n\r\n\r\n}","import { IStringModule } from '../IStringModule';\r\n\r\nconst tS = 'top';\r\nconst bS = 'bottom';\r\nconst lS = 'left';\r\nconst rS = 'right';\r\n\r\nexport class StringObject {\r\n public el: HTMLElement;\r\n public id: string = '';\r\n public oStart: number = 0;\r\n public oEnd: number = 0;\r\n public size: number = 0;\r\n\r\n public startPos: number = 0;\r\n public endPos: number = 0;\r\n public differencePos: number = 0;\r\n public factor: number = 1;\r\n\r\n public inviewTop: number = 1;\r\n public inviewBottom: number = 1;\r\n\r\n public sElPos: string = '';\r\n public sScrPos: string = '';\r\n public eElPos: string = '';\r\n public eScrPos: string = '';\r\n\r\n public halfWidth: number = 0;\r\n public halfHeight: number = 0;\r\n\r\n public start: number = 0;\r\n public end: number = 0;\r\n\r\n public mouseX: number = 0;\r\n public mouseY: number = 0;\r\n\r\n public magneticTargetX: number = 0;\r\n public magneticTargetY: number = 0;\r\n \r\n public magneticX: number = 0;\r\n public magneticY: number = 0;\r\n \r\n public lerp: number = 0;\r\n \r\n\r\n public glide: number = 0;\r\n public strength: number = 0;\r\n public weight: number = 0;\r\n public radius: number = 0;\r\n public parallaxPositionStart: number = 0;\r\n public parallaxPositionEnd: number = 0;\r\n\r\n public progress: number = 0\r\n\r\n public connects: Array<HTMLElement> = new Array<HTMLElement>();\r\n public cursorTargetClass: string = \"\";\r\n\r\n public key: string = '--progress';\r\n\r\n public showObserver: IntersectionObserver | null = null;\r\n public progressObserver: IntersectionObserver | null = null;\r\n public inviewObserver: IntersectionObserver | null = null;\r\n\r\n public repeat: boolean = false;\r\n public selfDisable: boolean = false;\r\n public active: boolean = false;\r\n public abs: boolean = false;\r\n public isMouseMove: boolean = false;\r\n public started: boolean = false;\r\n public isMagneting: boolean = false;\r\n\r\n\r\n public onEnter = () => {};\r\n public onLeave = () => {};\r\n\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n\r\n public anchor: string = \"center center\"\r\n\r\n // === 3D Objects ===\r\n public intensity3D: number = 10\r\n public distance3D: number = 10\r\n public decay3D: number = 1\r\n public type3D: string = \"box\"\r\n public material3D: string = \"basic\"\r\n public color3D: string = \"#ffffff\"\r\n public model3D: string = \"\"\r\n public animations3D: Array<any> = new Array<any>()\r\n\r\n\r\n\r\n\r\n constructor(element: HTMLElement) {\r\n this.el = element;\r\n }\r\n\r\n enter() {\r\n this.active = true;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.addObject(this.id, this);\r\n });\r\n this.onEnter();\r\n }\r\n leave() {\r\n this.active = false;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.removeObject(this.id);\r\n });\r\n this.onLeave();\r\n }\r\n show() {\r\n this.el.classList.add('-inview');\r\n }\r\n hide() {\r\n if (this.repeat) {\r\n this.el.classList.remove('-inview');\r\n }\r\n }\r\n\r\n connect(module: IStringModule) {\r\n this.modules.push(module);\r\n }\r\n\r\n \r\n public calculatePositions(windowSize: number) {\r\n if ((this.sElPos === tS && this.sScrPos === tS) || (this.sElPos === lS && this.sScrPos === lS)) {\r\n this.startPos = this.start - this.oEnd;\r\n } else if ((this.sElPos === tS && this.sScrPos === bS) || (this.sElPos === lS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === tS) || (this.sElPos === rS && this.sScrPos === lS)) {\r\n this.startPos = this.start + this.size - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === bS) || (this.sElPos === rS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd + this.size;\r\n }\r\n\r\n if ((this.eElPos === tS && this.eScrPos === tS) || (this.eElPos === lS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.oStart;\r\n } else if ((this.eElPos === tS && this.eScrPos === bS) || (this.eElPos === lS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === tS) || (this.eElPos === rS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.size + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === bS) || (this.eElPos === rS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.size + this.oStart;\r\n }\r\n this.differencePos = this.endPos - this.startPos;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\n\nenum DeviceType {\n Mobile,\n Tablet,\n Laptop,\n Desktop,\n}\n\ninterface DeviceQueryConfig {\n min?: number;\n max?: number;\n enable?: boolean;\n}\n\ninterface QueryConfig {\n mobile?: DeviceQueryConfig;\n tablet?: DeviceQueryConfig;\n laptop?: DeviceQueryConfig;\n desktop?: DeviceQueryConfig;\n}\n\nclass StringResponsiveQueryDevice {\n public min?: number = undefined;\n public max?: number = undefined;\n public enable: boolean = true;\n\n constructor(config?: DeviceQueryConfig) {\n this.min = config?.min;\n this.max = config?.max;\n this.enable = config?.enable ?? true;\n }\n\n setEnable(enable: boolean = true) {\n this.enable = enable;\n }\n setRange(min?: number, max?: number) {\n this.min = min ?? undefined;\n this.max = max ?? undefined;\n }\n\n get mediaQuery(): string {\n let query = 'screen';\n if (this.min) {\n query += ` and (min-width: ${this.min}px)`;\n }\n if (this.max) {\n query += ` and (max-width: ${this.max}px)`;\n }\n return query;\n }\n}\n\nexport class StringResponsive extends StringModule {\n private queries: { [key in DeviceType]: StringResponsiveQueryDevice } = {\n [DeviceType.Mobile]: new StringResponsiveQueryDevice({ max: 359 }),\n [DeviceType.Tablet]: new StringResponsiveQueryDevice({ min: 360, max: 1079 }),\n [DeviceType.Laptop]: new StringResponsiveQueryDevice({ min: 1080, max: 1365 }),\n [DeviceType.Desktop]: new StringResponsiveQueryDevice({ min: 1366 }),\n };\n\n private matchMedias: { [key in DeviceType]: MediaQueryList } = {\n [DeviceType.Mobile]: window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery),\n [DeviceType.Tablet]: window.matchMedia(this.queries[DeviceType.Tablet].mediaQuery),\n [DeviceType.Laptop]: window.matchMedia(this.queries[DeviceType.Laptop].mediaQuery),\n [DeviceType.Desktop]: window.matchMedia(this.queries[DeviceType.Desktop].mediaQuery),\n };\n\n constructor(visitor: any, settings: any) {\n super(visitor, settings);\n this._type = 2;\n }\n\n onConnect() {}\n\n onStart(): void {\n if (this.settings != null) {\n if (this.settings['settings'] != null) {\n let config = this.settings['settings'];\n if (config.mobile) {\n this.queries[DeviceType.Mobile].enable = true;\n this.queries[DeviceType.Mobile].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Mobile] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Mobile].enable = false;\n }\n\n if (config.tablet) {\n this.queries[DeviceType.Tablet].enable = true;\n this.queries[DeviceType.Tablet].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Tablet] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Tablet].enable = false;\n }\n\n if (config.laptop) {\n this.queries[DeviceType.Laptop].enable = true;\n this.queries[DeviceType.Laptop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Laptop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Laptop].enable = false;\n }\n\n if (config.desktop) {\n this.queries[DeviceType.Desktop].enable = true;\n this.queries[DeviceType.Desktop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Desktop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Desktop].enable = false;\n }\n }\n }\n this.updateElements();\n }\n\n onResize(): void {\n this.updateElements();\n }\n\n private updateElements() {\n const isMobileMedia = this.matchMedias[DeviceType.Mobile].matches && this.queries[DeviceType.Mobile].enable;\n const isTabletMedia = this.matchMedias[DeviceType.Tablet].matches && this.queries[DeviceType.Tablet].enable;\n const isLaptopMedia = this.matchMedias[DeviceType.Laptop].matches && this.queries[DeviceType.Laptop].enable;\n const isDesktopMedia = this.matchMedias[DeviceType.Desktop].matches && this.queries[DeviceType.Desktop].enable;\n\n const elements = document.querySelectorAll('[string-mobile], [string-tablet], [string-laptop], [string-desktop]');\n\n elements.forEach((element: any) => {\n let showElement = false;\n\n if (element.hasAttribute('string-mobile') && isMobileMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-tablet') && isTabletMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-laptop') && isLaptopMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-desktop') && isDesktopMedia) {\n showElement = true;\n }\n\n if (showElement) {\n element.style.display = null;\n } else {\n element.style.display = `none`;\n }\n });\n }\n}\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarHorizontal {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startY: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psH;\r\n const visibleSize = this.data.wS;\r\n\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentHeight = this.data.psH;\r\n const visibleHeight = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentHeight) * visibleHeight + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startY = e.clientY;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaY = e.clientY - this.startY;\r\n const newScrollPosition = this.startScrollPosition + (deltaY / this.data.wS) * this.data.psH;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarVertical {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startCoordinate: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psW;\r\n const visibleSize = this.data.wS;\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentWidth = this.data.psW;\r\n const visibleWidth = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentWidth) * visibleWidth + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startCoordinate = e.clientX;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaX = e.clientX - this.startCoordinate;\r\n const newScrollPosition = this.startScrollPosition + (deltaX / this.data.wS) * this.data.psW;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringModule } from '../../../StringModule';\r\nimport { StringData } from '../../../Utils/StringData';\r\nimport { StringScrollbarHorizontal } from './StringScrollbarHorizontal';\r\nimport { StringScrollbarVertical } from './StringScrollbarVertical';\r\n\r\nexport class StringScrollbar extends StringModule {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private scrollTimeout: any;\r\n\r\n private isDragging = false;\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n\r\n private mouseUpEventBind: any;\r\n private mouseDownEventBind: any;\r\n private mouseMoveEventBind: any;\r\n\r\n private scrollbarState: any;\r\n private scrollbarStateHorizontal: any;\r\n private scrollbarStateVertical: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n\r\n this.mouseUpEventBind = this.mouseUpEvent.bind(this);\r\n this.mouseDownEventBind = this.mouseDownEvent.bind(this);\r\n this.mouseMoveEventBind = this.mouseMoveEvent.bind(this);\r\n }\r\n destructor(): void {\r\n document.removeEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.removeEventListener('mousedown', this.mouseDownEventBind);\r\n document.removeEventListener('mousemove', this.mouseMoveEventBind);\r\n }\r\n\r\n onStart(): void {\r\n this.createScrollbar();\r\n this.updateThumb();\r\n this.addCustomStyles();\r\n document.addEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.addEventListener('mousedown', this.mouseDownEventBind);\r\n document.addEventListener('mousemove', this.mouseMoveEventBind);\r\n document.documentElement.classList.add(`-no-scrollbar`);\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.updateThumb();\r\n this.showScrollbar();\r\n this.hideScrollbar();\r\n }\r\n\r\n onResize(): void {\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n onChangeScrollParams(): void {\r\n if (this.data.sM == 'disable' && this.scrollMode != 'disable') {\r\n this.scrollbar.classList.add('-hide');\r\n }\r\n if ((this.data.sM == 'smooth' && this.scrollMode == 'disable') || (this.data.sM == 'default' && this.scrollMode == 'disable')) {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n this.scrollMode = this.data.sM;\r\n }\r\n\r\n onChangeScrollDirection() {\r\n if (this.data.sD == 'horizontal') {\r\n this.scrollbarState = this.scrollbarStateVertical;\r\n } else {\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n private addCustomStyles() {\r\n const style = document.createElement('style');\r\n style.textContent = `\r\n ::-webkit-scrollbar {\r\n display: none;\r\n width: 0;\r\n height: 0;\r\n -webkit-appearance: none;\r\n }\r\n body {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n .-without-scrollbar::-webkit-scrollbar {\r\n display: none;\r\n }\r\n .-without-scrollbar {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n\r\n private createScrollbar() {\r\n this.scrollbar = document.createElement('div');\r\n this.scrollbar.classList.add('scrollbar');\r\n this.thumb = document.createElement('div');\r\n this.thumb.classList.add('thumb');\r\n this.scrollbar.appendChild(this.thumb);\r\n document.body.appendChild(this.scrollbar);\r\n\r\n this.scrollbarStateHorizontal = new StringScrollbarHorizontal(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarStateVertical = new StringScrollbarVertical(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n\r\n private updateThumb() {\r\n this.scrollbarState.updateThumb();\r\n }\r\n\r\n private mouseDownEvent(e: MouseEvent) {\r\n this.isDragging = true;\r\n this.scrollbarState.mouseDownEvent(e);\r\n document.body.style.userSelect = 'none';\r\n this.scrollbar.classList.add('-touch');\r\n }\r\n\r\n private mouseMoveEvent(e: MouseEvent) {\r\n if (!this.isDragging) return;\r\n\r\n this.scrollbarState.mouseMoveEvent(e);\r\n }\r\n\r\n private mouseUpEvent() {\r\n this.isDragging = false;\r\n document.body.style.userSelect = '';\r\n this.hideScrollbar();\r\n this.scrollbar.classList.remove('-touch');\r\n }\r\n\r\n private showScrollbar() {\r\n this.scrollbar.classList.add('-scroll');\r\n }\r\n\r\n private hideScrollbar() {\r\n if (this.scrollTimeout) {\r\n clearTimeout(this.scrollTimeout);\r\n }\r\n this.scrollTimeout = setTimeout(() => {\r\n this.scrollbar.classList.remove('-scroll');\r\n }, 1000);\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringAnchor extends StringModule {\r\n oldLerp: number = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'anchor';\r\n }\r\n initObject(object: StringObject, el: any): void {\r\n object.anchor = this.attribute.process(el, `string-anchor`, \"center center\");\r\n }\r\n onConnect(object: StringObject) {\r\n if (object.anchor == null || object.anchor == \"\") {\r\n object.anchor = \"center center\"\r\n }\r\n const p = object.anchor.split(' ');\r\n const x = this.parseOrig(p[0]);\r\n const y = this.parseOrig(p[1] || p[0]);\r\n object.el.style.transformOrigin = `${x} ${y}`;\r\n }\r\n\r\n private parseOrig(part: string) {\r\n part = part.trim();\r\n if (part.startsWith('random')) {\r\n const o = part.slice(7, -1).split(',').map(s => s.trim());\r\n const c = Math.floor(Math.random() * o.length);\r\n return o[c];\r\n } else {\r\n return part;\r\n }\r\n }\r\n}\r\n\r\n","import { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringGlide extends StringModule {\r\n private previousLerp: number = 0;\r\n private displacement: number = 0;\r\n private acceleration: number = 0;\r\n private velocityMultiplier: number = 0.00125;\r\n private isInitialScroll: boolean = true;\r\n\r\n private baseVelocityMultiplier: number = 0.00125;\r\n private reducedVelocityMultiplier: number = this.baseVelocityMultiplier / 20;\r\n private negativeVelocityMultiplier: number = -0.0001;\r\n\r\n private readonly ACCELERATION_STEP: number = 0.05;\r\n private readonly MIN_DISPLACEMENT: number = 0.01;\r\n private readonly MAX_DISPLACEMENT: number = 1;\r\n private readonly MIN_VELOCITY: number = -1;\r\n private readonly MAX_VELOCITY: number = 1;\r\n\r\n private maxDisplacementValue: number = 0;\r\n\r\n\r\n private setupItem = (object: any) => {\r\n const transformCompute = `translate3d(0, ${-this.data.dV * this.maxDisplacementValue * object.glide}px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n }\r\n\r\n private onUpdateDesktopEvent = ()=>{\r\n for (let i = 0; i < this.objects.length; i++) {\r\n let object = this.objects[i]\r\n this.setupItem(object)\r\n }\r\n }\r\n private onUpdateMobileEvent = ()=>{}\r\n private onUpdateEvent = this.onUpdateDesktopEvent\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor);\r\n this.htmlKey = 'glide';\r\n\r\n if (settings) {\r\n const { baseVelocityMultiplier, reducedVelocityMultiplier, negativeVelocityMultiplier } = settings;\r\n this.baseVelocityMultiplier = baseVelocityMultiplier ?? this.baseVelocityMultiplier;\r\n this.reducedVelocityMultiplier = reducedVelocityMultiplier ?? this.reducedVelocityMultiplier;\r\n this.negativeVelocityMultiplier = negativeVelocityMultiplier ?? this.negativeVelocityMultiplier;\r\n }\r\n }\r\n\r\n private calcExpanderFactor(isDirectionUp: boolean): void {\r\n const isConditionMet = isDirectionUp\r\n ? this.data.v < this.previousLerp\r\n : this.data.v > this.previousLerp;\r\n\r\n this.velocityMultiplier = isConditionMet\r\n ? (this.isInitialScroll ? this.baseVelocityMultiplier : this.reducedVelocityMultiplier)\r\n : this.negativeVelocityMultiplier;\r\n\r\n if (!isConditionMet) {\r\n this.isInitialScroll = false;\r\n }\r\n }\r\n onStart(): void {\r\n this.maxDisplacementValue = this.data.wS * 0.1\r\n }\r\n\r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.maxDisplacementValue = this.data.wS * 0.1\r\n this.onUpdateEvent = this.onUpdateDesktopEvent\r\n } else {\r\n this.onUpdateEvent = this.onUpdateMobileEvent \r\n this.resetState();\r\n this.objects.forEach((object) => {\r\n this.setupItem(object);\r\n })\r\n }\r\n }\r\n\r\n private resetState(): void {\r\n this.displacement = 0;\r\n this.acceleration = 0;\r\n this.isInitialScroll = true;\r\n this.velocityMultiplier = this.baseVelocityMultiplier;\r\n }\r\n\r\n onScrollStart(): void {\r\n this.resetState();\r\n }\r\n\r\n onScrollStop(): void {\r\n this.resetState();\r\n this.previousLerp = 0;\r\n document.documentElement.style.setProperty('--glide', '0');\r\n for (let i = 0; i < this.objects.length; i++) {\r\n let object = this.objects[i]\r\n const transformCompute = `translate3d(0, 0px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n }\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.calcExpanderFactor(this.data.sDB === false);\r\n this.acceleration = Math.min(this.MAX_DISPLACEMENT, this.acceleration + this.ACCELERATION_STEP);\r\n this.displacement = Math.max(this.MIN_DISPLACEMENT, Math.min(this.MAX_DISPLACEMENT, this.displacement + this.velocityMultiplier));\r\n this.data.dV = Math.min(this.MAX_VELOCITY, Math.max(this.MIN_VELOCITY, this.data.v * this.displacement * this.acceleration));\r\n document.documentElement.style.setProperty('--glide', this.data.dV.toString());\r\n this.previousLerp = this.data.v;\r\n this.onUpdateEvent()\r\n }\r\n}","import { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringLerp extends StringModule {\r\n oldLerp: number = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n onScrollStop(): void {\r\n document.documentElement.style.setProperty('--lerp', \"0\");\r\n }\r\n onScroll(data: StringData): void {\r\n document.documentElement.style.setProperty('--lerp', this.data.v.toString());\r\n this.oldLerp = data.v\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringParallax extends StringModule {\r\n private setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n\r\n private onScrollDesktopEvent = () => {\r\n this.objects.forEach((object) => {\r\n let progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\r\n object.el.style.setProperty(object.key, progress.toString());\r\n this.setupParallax(object, progress);\r\n });\r\n }\r\n private onScrollMobileEvent = () => {}\r\n private onScrollEvent = this.onScrollDesktopEvent\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'parallax';\r\n }\r\n\r\n onConnect(object: StringObject): void {\r\n if (this.settings != null) {\r\n if (this.settings['string-parallax-bias'] != null) {\r\n let parallaxPosition = this.attribute.process(object.el, 'string-parallax-bias', this.settings['string-parallax-bias']);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n }\r\n if (this.settings['string-parallax'] != null) {\r\n object.factor = this.settings['string-parallax'];\r\n }\r\n }\r\n \r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.onScrollEvent()\r\n }\r\n onChangeScrollDirection(): void {\r\n if (this.data.sD == 'vertical') {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n } else {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n }\r\n }\r\n\r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.onScrollEvent = this.onScrollDesktopEvent\r\n } else {\r\n this.onScrollEvent = this.onScrollMobileEvent \r\n this.objects.forEach((object) => {\r\n this.setupParallax(object, .5);\r\n })\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringProgress extends StringModule {\r\n private oldLerp = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'progress';\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n this.setUpObject(object);\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n object.onEnter = () => {\r\n this.setUpObject(object);\r\n };\r\n }\r\n\r\n private setUpObject(object: StringObject) {\r\n const progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\r\n \r\n if (object.progress !== progress) {\r\n object.progress = progress;\r\n this.applyProgress(object);\r\n }\r\n }\r\n\r\n private applyProgress(object: StringObject) {\r\n const progressStr = object.progress.toString();\r\n\r\n this.events.emit(`progress_${object.id}`, object.progress);\r\n object.el.style.setProperty(object.key, progressStr);\r\n\r\n if (object.connects.length > 0) {\r\n object.connects.forEach((element) => {\r\n element.style.setProperty(object.key, progressStr);\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import { StringData } from '../../Utils/StringData';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScroll {\r\n public data: StringData;\r\n public isProg: boolean = false;\r\n public isParallaxEnabled: boolean = false;\r\n public name: string = '';\r\n public settings: StringTypeSettings;\r\n public v = 0;\r\n protected vT: number = 0;\r\n protected d: any;\r\n\r\n public onScrollStart = ()=>{}\r\n public onScrollStop = ()=>{}\r\n public onChangeDirection = ()=>{}\r\n\r\n public scrollContainer: any;\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n this.d = document;\r\n this.settings = settings;\r\n this.data = data;\r\n this.scrollContainer = window;\r\n }\r\n\r\n onCalcUpdate: any = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n onUpdate(): void {}\r\n onWheel(e: any): void {}\r\n onScroll(e: any): void {}\r\n\r\n protected _scrollDirection: 'vertical' | 'horizontal' = 'vertical';\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this._scrollDirection = scrollDirection;\r\n if (this._scrollDirection == 'vertical') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n } else if (this._scrollDirection == 'horizontal') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(this.data.c, 0);\r\n };\r\n }\r\n }\r\n}\r\n","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDefault extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'mobile';\r\n }\r\n public onUpdate() {\r\n if (this.data.d!=0) {\r\n let delta = this.data.d * this.settings.speedAccelerate\r\n this.data.d -= delta\r\n this.data.v = delta \r\n\r\n if (Math.abs(this.data.v) < .1) {\r\n this.data.d = 0\r\n this.data.v = 0\r\n this.onScrollStop();\r\n } \r\n }\r\n }\r\n public onScroll(e: any) {\r\n this.data.c = this.d.documentElement.scrollTop;\r\n this.data.t = this.d.documentElement.scrollTop;\r\n }\r\n\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n if (this.data.d == 0) {\r\n this.onScrollStart()\r\n }\r\n let plusDelta = e.deltaY\r\n if (this.data.t == 0) {\r\n this.data.d += Math.max(0, e.deltaY);\r\n }\r\n this.data.d += plusDelta;\r\n }\r\n }\r\n}","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDisable extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'disable';\r\n }\r\n\r\n public onUpdate() {}\r\n\r\n public onWheel(e: any) {\r\n e.preventDefault();\r\n }\r\n\r\n public onScroll(e: any) {\r\n e.preventDefault();\r\n }\r\n}","import { StringData } from '../../Utils/StringData';\r\nimport { StringScroll } from './StringScroll';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nconst SCROLL_DIRECTION = {\r\n FORWARD: 'forward',\r\n BACK: 'back',\r\n} as const;\r\n\r\nconst CLASS_NAMES = {\r\n SCROLL_FORWARD: '-scroll-forward',\r\n SCROLL_BACK: '-scroll-back',\r\n} as const;\r\n\r\nexport class StringScrollSmooth extends StringScroll {\r\n public readonly name: string = 'desktop';\r\n private isScrollbarManipulation = false;\r\n private isBottomScrollDirection = false;\r\n private readonly velocityThreshold = 0.1;\r\n private previousCurrent: number = 0\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n }\r\n\r\n private updateScrollDirection(newDirection: boolean) {\r\n if (this.isBottomScrollDirection === newDirection) return;\r\n\r\n this.isBottomScrollDirection = newDirection;\r\n this.data.sDB = newDirection;\r\n this.onChangeDirection();\r\n\r\n const isForward = newDirection;\r\n document.documentElement.classList.toggle(CLASS_NAMES.SCROLL_FORWARD, isForward);\r\n document.documentElement.classList.toggle(CLASS_NAMES.SCROLL_BACK, !isForward);\r\n }\r\n\r\n private clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n }\r\n\r\n public stopScroll(): void {\r\n this.data.v = 0;\r\n this.data.d = 0;\r\n this.data.t = this.data.c;\r\n this.isProg = false;\r\n \r\n this.onCalcUpdate();\r\n document.documentElement.classList.remove(CLASS_NAMES.SCROLL_BACK, CLASS_NAMES.SCROLL_FORWARD);\r\n \r\n }\r\n\r\n public onUpdate(): void {\r\n if (this.data.d!=0) {\r\n const { data, settings } = this;\r\n let delta = this.data.d * this.settings.speedAccelerate\r\n this.data.t = Math.min(Math.max(0, this.data.t + delta), this.data.bS);\r\n this.data.d -= delta\r\n this.data.v = (this.data.t - this.data.c) * this.settings.speed\r\n\r\n if (this.isScrollbarManipulation) {\r\n this.isScrollbarManipulation = false;\r\n data.c = data.t;\r\n return;\r\n }\r\n\r\n const absVelocity = Math.abs(data.v);\r\n if (absVelocity === 0) return;\r\n if (data.v > 0) {\r\n this.data.c = Math.ceil(data.c + data.v)\r\n this.updateScrollDirection(true);\r\n } else {\r\n this.data.c = Math.floor(data.c + data.v)\r\n this.updateScrollDirection(false);\r\n }\r\n\r\n if (absVelocity < this.velocityThreshold) {\r\n this.stopScroll();\r\n this.onScrollStop();\r\n } else {\r\n this.isProg = true;\r\n if (this.previousCurrent != this.data.c) {\r\n this.previousCurrent = this.data.c\r\n this.onCalcUpdate();\r\n }\r\n \r\n }\r\n }\r\n \r\n }\r\n\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n e.preventDefault();\r\n if (this.data.d == 0) {\r\n this.onScrollStart()\r\n }\r\n let plusDelta = e.deltaY\r\n if (this.data.t == 0) {\r\n this.data.d += Math.max(0, e.deltaY);\r\n }\r\n if (this.data.t == this.data.bS) {\r\n this.data.d += Math.min(0, e.deltaY);\r\n }\r\n this.data.d += plusDelta;\r\n }\r\n }\r\n\r\n public onScroll(e: Event): void {\r\n if (!this.isProg) {\r\n this.isScrollbarManipulation = true;\r\n this.data.t = this.scrollContainer?.scrollTop ?? document.documentElement.scrollTop;\r\n }\r\n }\r\n}","export class StringTypeSettings{\r\n private sC: number = 0.1\r\n private sA: number = 0.25\r\n private mL: number = 1\r\n\r\n public get speed() {\r\n return this.sC\r\n }\r\n public get speedAccelerate() {\r\n return this.sA\r\n }\r\n\r\n public set speedAccelerate(speed: number) {\r\n this.sA = speed\r\n }\r\n public set speed(speed: number) {\r\n this.sC = speed\r\n }\r\n\r\n public get mouseLerp() {\r\n return this.mL\r\n }\r\n public set mouseLerp(mouseLerp: number) {\r\n this.mL = mouseLerp\r\n }\r\n \r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\ninterface ISplitOptions {\r\n line?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n word?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n char?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n charLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n charWord?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n wordLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n}\r\n\r\nexport class StringSplit extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'split';\r\n }\r\n\r\n onStart(): void {}\r\n onResize(): void {\r\n document.querySelectorAll(`[string=\"split\"].-splited`).forEach((element) => {\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n if (!element.classList.contains('-splited')) {\r\n element.classList.add('-splited');\r\n element.setAttribute('string-split-original', element.innerHTML);\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n \r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n }\r\n }\r\n\r\n private parseSplitOptions(attributeValue: string | null): ISplitOptions {\r\n const options: ISplitOptions = {\r\n line: [],\r\n word: [],\r\n char: [],\r\n charLine: [],\r\n charWord: [],\r\n wordLine: [],\r\n };\r\n\r\n if (attributeValue) {\r\n const parts = attributeValue.split('|');\r\n\r\n parts.forEach((part) => {\r\n const match = part.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\r\n\r\n if (match) {\r\n const prefix = match[1] || '';\r\n const option = match[2];\r\n const params = match[4] ? match[4].split(',') : [];\r\n switch (prefix + option) {\r\n case 'char-line':\r\n (options.charLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char-word':\r\n (options.charWord as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word-line':\r\n (options.wordLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'line':\r\n (options.line as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word':\r\n (options.word as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char':\r\n (options.char as any[]).push(this.parseParam(params));\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private parseParam(params: string[]): { align: string; random?: { min: number; max: number }; abs?: boolean } {\r\n const result: { align: string; random?: { min: number; max: number }; abs?: boolean } = { align: 'start' };\r\n\r\n params.forEach((param) => {\r\n if (param === 'abs') {\r\n result.abs = true;\r\n } else if (param.startsWith('random')) {\r\n const match = param.match(/random\\((\\d+),(\\d+)\\)/);\r\n if (match) {\r\n result.random = { min: parseInt(match[1]), max: parseInt(match[2]) };\r\n result.align = 'random';\r\n } else {\r\n result.align = 'random';\r\n }\r\n } else if (['start', 'center', 'end'].includes(param)) {\r\n result.align = param;\r\n } else {\r\n result.align = 'start';\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public split(options: ISplitOptions, elementRoot: any): any {\r\n //let text = elementRoot.innerHTML;\r\n let text = elementRoot.getAttribute('string-split-original');\r\n if (text.length === 0) return '';\r\n\r\n text = this.decodeHtmlEntity(text);\r\n \r\n const element = document.createElement('span');\r\n const words = text.split(/\\s+/);\r\n let globalCharIndex = 0;\r\n let globalWordIndex = 0;\r\n const totalChars = text.replace(/\\s/g, '').length;\r\n\r\n const tempSpan = document.createElement('span');\r\n const compStyles = window.getComputedStyle(elementRoot);\r\n\r\n tempSpan.style.fontFamily = compStyles.fontFamily;\r\n tempSpan.style.fontSize = compStyles.fontSize;\r\n tempSpan.style.letterSpacing = compStyles.letterSpacing;\r\n tempSpan.style.lineHeight = compStyles.lineHeight;\r\n tempSpan.style.fontWeight = compStyles.fontWeight;\r\n tempSpan.classList.add('-s-char');\r\n document.body.appendChild(tempSpan);\r\n\r\n let virtualLines: any[] = [];\r\n let virtualLine: any[] = [];\r\n let currentLineWidth = 0;\r\n words.forEach((word: any, wordIndex: any) => {\r\n tempSpan.textContent = word;\r\n if (word.length > 0) {\r\n tempSpan.textContent += '\\u00a0';\r\n }\r\n\r\n const wordWidth = tempSpan.offsetWidth;\r\n\r\n const virtualWordSpan = {\r\n text: word,\r\n width: wordWidth,\r\n chars: new Array<any>(),\r\n };\r\n const chars = Array.from(word);\r\n chars.forEach((char, charIndex) => {\r\n const virtualCharSpan = {\r\n text: char,\r\n };\r\n\r\n virtualWordSpan.chars.push(virtualCharSpan);\r\n });\r\n if (currentLineWidth + wordWidth > elementRoot.offsetWidth) {\r\n virtualLines.push(virtualLine);\r\n virtualLine = [];\r\n currentLineWidth = 0;\r\n globalCharIndex += virtualLine.length;\r\n }\r\n virtualLine.push(virtualWordSpan);\r\n currentLineWidth += wordWidth;\r\n });\r\n\r\n virtualLines.push(virtualLine);\r\n\r\n let hasLineOptions = false;\r\n if (options.line != null) {\r\n if (options.line.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.wordLine != null) {\r\n if (options.wordLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.charLine != null) {\r\n if (options.charLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n\r\n let addedWordsCount = 0;\r\n if (hasLineOptions) {\r\n // for (let i = 0; i < virtualLines.length; i++) {\r\n // addedWordsCount += virtualLines[i].length;\r\n // }\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n this.appendVirtualLineToDOM(\r\n i,\r\n virtualLines.length,\r\n words.length,\r\n element,\r\n virtualLines[i],\r\n options,\r\n globalCharIndex,\r\n totalChars,\r\n addedWordsCount\r\n );\r\n addedWordsCount += virtualLines[i].length;\r\n }\r\n } else {\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n virtualLines[i].forEach((virtualWordSpan: any, wordIndex: any) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n if ((options.char!=null && options.char?.length > 0) || (options.charWord != null && options.charWord?.length > 0)) {\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n });\r\n } else {\r\n wordSpan.textContent = virtualWordSpan.text;\r\n }\r\n \r\n\r\n this.applyOptions(wordSpan, options.word, globalWordIndex, 'word', wordIndex, words.length);\r\n if (virtualWordSpan.chars.length > 0) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n element.appendChild(wordSpan);\r\n globalWordIndex++;\r\n }\r\n });\r\n }\r\n }\r\n\r\n document.body.removeChild(tempSpan);\r\n return { html: element.innerHTML };\r\n }\r\n\r\n // TODO: remove line - char,word\r\n private appendVirtualLineToDOM(\r\n lineIndex: number,\r\n length: number,\r\n totalWords: number,\r\n element: HTMLSpanElement,\r\n virtualLine: any[],\r\n options: ISplitOptions,\r\n globalCharIndex: number,\r\n totalChars: number,\r\n addedWordsCount: number\r\n ) {\r\n const lineSpan = document.createElement('span');\r\n lineSpan.classList.add('-s-line');\r\n\r\n this.applyOptions(lineSpan, options.line, lineIndex, 'line', 0, length);\r\n\r\n let lineCharIndex = 0;\r\n let globalWordIndex = 0;\r\n let totalLineChars = 0;\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n totalLineChars += virtualWordSpan.text.length;\r\n });\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charLine, lineCharIndex, 'char-line', charIndex, totalLineChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n lineCharIndex++;\r\n });\r\n\r\n this.applyOptions(\r\n wordSpan,\r\n options.word,\r\n addedWordsCount + globalWordIndex,\r\n 'word',\r\n addedWordsCount + globalWordIndex,\r\n totalWords - 1\r\n );\r\n this.applyOptions(wordSpan, options.wordLine, wordIndex, 'word-line', wordIndex, virtualLine.length);\r\n\r\n if (wordIndex < virtualLine.length - 1) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n // +'\\u00a0';\r\n\r\n lineSpan.appendChild(wordSpan);\r\n // if (wordIndex < virtualLine.length - 1) {\r\n // lineSpan.appendChild(this.createSpaceSpan());\r\n // }\r\n globalWordIndex++;\r\n }\r\n });\r\n\r\n element.appendChild(lineSpan);\r\n }\r\n\r\n private applyOptions(\r\n span: HTMLSpanElement,\r\n optionArray: any[] | undefined,\r\n globalIndex: number,\r\n type: string,\r\n localIndex: number,\r\n parentLength: number\r\n ) {\r\n if (optionArray) {\r\n optionArray.forEach((option, optionIndex) => {\r\n let index = this.calculateIndex(option, globalIndex, localIndex, parentLength);\r\n\r\n const variableName = this.generateVariableName(type, option, optionIndex);\r\n span.style.setProperty(variableName, String(index));\r\n });\r\n }\r\n }\r\n\r\n private createSpaceSpan(): HTMLSpanElement {\r\n const spaceSpan = document.createElement('span');\r\n spaceSpan.innerHTML = '\\u00a0';\r\n return spaceSpan;\r\n }\r\n\r\n private decodeHtmlEntity(str: string) {\r\n return str.replace(/&amp;/g, '&');\r\n }\r\n\r\n private calculateIndex(\r\n options: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n globalIndex: number,\r\n localIndex: number,\r\n parentLength: number\r\n ): number {\r\n let index = globalIndex;\r\n if (options.align === 'random') {\r\n if (options.random === undefined) {\r\n options.random = { min: 0, max: parentLength };\r\n }\r\n const min = options.random.min || 0;\r\n const max = options.random.max || parentLength;\r\n index = Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n if (options.align === 'end') {\r\n index = parentLength - index - 1;\r\n } else if (options.align === 'center') {\r\n index = index - Math.floor(parentLength / 2);\r\n }\r\n\r\n if (options.abs) {\r\n index = Math.abs(index);\r\n }\r\n return index;\r\n }\r\n\r\n private generateVariableName(\r\n type: string,\r\n option: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n index: number\r\n ): string {\r\n let variableName = `--${type}`;\r\n if (option.align) {\r\n variableName += `-${option.align}`;\r\n }\r\n return variableName;\r\n }\r\n}\r\n","export class StringFPS{\r\n private isAnimationStarted: boolean = false\r\n private fpsInterval: any\r\n private _now: any\r\n private then: any\r\n private elapsed: any;\r\n private requestAnimationId: number = 0\r\n\r\n public get now() {\r\n return this._now\r\n }\r\n public onFrame = ()=>{}\r\n public start(fps: number) {\r\n if (this.isAnimationStarted) { return }\r\n this.fpsInterval = 1000 / fps;\r\n this.then = Date.now();\r\n this.animate();\r\n this.isAnimationStarted = true\r\n }\r\n public stop() {\r\n if (!this.isAnimationStarted) { return }\r\n cancelAnimationFrame(this.requestAnimationId)\r\n this.isAnimationStarted = false\r\n }\r\n private animate() {\r\n this.requestAnimationId = requestAnimationFrame(() => { this.animate() })\r\n this._now = Date.now();\r\n this.elapsed = this._now - this.then;\r\n if (this.elapsed > this.fpsInterval) {\r\n this.then = this._now - (this.elapsed % this.fpsInterval);\r\n this.onFrame()\r\n }\r\n }\r\n}","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringDelayLerpTracker extends StringModule {\r\n private canvas: any\r\n private context: any\r\n private positionHistory: any\r\n private maxHistory: any\r\n private currentPosition: any\r\n private targetPosition: any\r\n\r\n private canvasHeight = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n\r\n \r\n\r\n \r\n }\r\n\r\n onStart(): void {\r\n this.canvas = document.createElement('canvas');\r\n this.context = this.canvas.getContext('2d');\r\n this.canvas.width = window.innerWidth * .5;\r\n this.canvas.height = window.innerHeight / 15 - 20;\r\n this.canvasHeight = window.innerHeight / 15 - 20;\r\n this.canvas.style.position = 'fixed';\r\n this.canvas.style.bottom = `${window.innerHeight / 20 + 10}px`;\r\n this.canvas.style.left = '50%';\r\n this.canvas.style.transform = 'translateX(-50%)';\r\n this.canvas.style.backgroundColor = '#000000';\r\n this.canvas.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.canvas.style.zIndex = '1000';\r\n document.body.appendChild(this.canvas);\r\n\r\n this.positionHistory = [];\r\n this.maxHistory = this.canvas.width;\r\n this.currentPosition = 0;\r\n this.targetPosition = 0;\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.currentPosition = Math.abs(this.data.dV);\r\n this.positionHistory.push(this.currentPosition);\r\n if (this.positionHistory.length > this.maxHistory) {\r\n this.positionHistory.shift();\r\n }\r\n this.drawGraph();\r\n }\r\n\r\n\r\n drawGraph() {\r\n const ctx = this.context;\r\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n ctx.strokeStyle = '#e0e0e0';\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = 'red';\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n this.positionHistory.forEach((pos: any, index: any) => {\r\n const x = index;\r\n const y = this.canvas.height - pos * this.canvasHeight;\r\n if (index === 0) {\r\n ctx.moveTo(x, y);\r\n } else {\r\n ctx.lineTo(x, y);\r\n }\r\n });\r\n ctx.stroke();\r\n }\r\n\r\n setTargetPosition(position: number) {\r\n this.targetPosition = position;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringFPSTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.right = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-fps', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-fps]::after {\r\n content: 'FPS: ' attr(fps);\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n this.intervalId = setInterval(() => {\r\n this.displayElement.setAttribute('fps', `${this.callCount}`);\r\n this.callCount = 0;\r\n }, 1000);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n clearInterval(this.intervalId);\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringLerpTracker extends StringModule {\r\n private canvas: any\r\n private context: any\r\n private positionHistory: any\r\n private maxHistory: any\r\n private currentPosition: any\r\n private targetPosition: any\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n\r\n \r\n\r\n \r\n }\r\n\r\n onStart(): void {\r\n this.canvas = document.createElement('canvas');\r\n this.context = this.canvas.getContext('2d');\r\n this.canvas.width = window.innerWidth * .5;\r\n this.canvas.height = window.innerHeight / 15 - 20;\r\n this.canvas.style.position = 'fixed';\r\n this.canvas.style.bottom = '10px';\r\n this.canvas.style.left = '50%';\r\n this.canvas.style.transform = 'translateX(-50%)';\r\n this.canvas.style.backgroundColor = '#000000';\r\n this.canvas.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.canvas.style.zIndex = '1000';\r\n document.body.appendChild(this.canvas);\r\n\r\n this.positionHistory = [];\r\n this.maxHistory = this.canvas.width;\r\n this.currentPosition = 0;\r\n this.targetPosition = 0;\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.currentPosition = Math.abs(this.data.v);\r\n this.positionHistory.push(this.currentPosition);\r\n if (this.positionHistory.length > this.maxHistory) {\r\n this.positionHistory.shift();\r\n }\r\n this.drawGraph();\r\n }\r\n\r\n\r\n drawGraph() {\r\n const ctx = this.context;\r\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n ctx.strokeStyle = '#e0e0e0';\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = '#007bff';\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n this.positionHistory.forEach((pos: any, index: any) => {\r\n const x = index;\r\n const y = this.canvas.height - pos / 2;\r\n if (index === 0) {\r\n ctx.moveTo(x, y);\r\n } else {\r\n ctx.lineTo(x, y);\r\n }\r\n });\r\n ctx.stroke();\r\n }\r\n\r\n setTargetPosition(position: number) {\r\n this.targetPosition = position;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringPositionTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.left = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-position', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-position]::after {\r\n content: attr(direction) 'Top: ' attr(value) 'px';\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n let dirSymbol = ``;\r\n if (data.c < data.t) {\r\n dirSymbol = `↓`;\r\n }\r\n if (data.c > data.t) {\r\n dirSymbol = `↑`;\r\n }\r\n this.displayElement.setAttribute('direction', dirSymbol);\r\n this.displayElement.setAttribute('value', `${this.data.c}`);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","export class StringAttribute{\r\n process(e: any, n: string, d: any = null) {\r\n return e.getAttribute(n) == null ? d : e.getAttribute(n)\r\n }\r\n}","export class StringBoundingClientRect {\r\n process(e: any) {\r\n return e.getBoundingClientRect();\r\n }\r\n}\r\n","export class StringData {\r\n three: any = null;\r\n\r\n t: number = 0;\r\n c: number = 0;\r\n d: number = 0;\r\n v: number = 0;\r\n dV: number = 0;\r\n sDB: boolean = false;\r\n\r\n bS: number = 0;\r\n cF: number = 1;\r\n wS: number = 0;\r\n hnwS: number = 0;\r\n\r\n psW: number = 0;\r\n psH: number = 0;\r\n\r\n scsW: number = 1;\r\n scsH: number = 1;\r\n sD: 'vertical' | 'horizontal' = 'vertical';\r\n sC: any;\r\n sM: 'smooth' | 'disable' | 'default' = 'smooth';\r\n}\r\n","export class StringEvent{\r\n\r\n private eventsByKey: Map<string, Array<Function>> = new Map<string, Array<Function>>()\r\n private events: Array<Function> = new Array<Function>()\r\n on(id: string, event: Function){\r\n if ( this.eventsByKey.has(id) == false) { \r\n this.eventsByKey.set(id, [])\r\n }\r\n this.eventsByKey.get(id)?.push(event)\r\n this.updateAllEvents()\r\n }\r\n public has(id: string) {\r\n return this.eventsByKey.has(id)\r\n }\r\n public emit(id: string, value: any) {\r\n if (this.eventsByKey.has(id)) {\r\n this.eventsByKey.get(id)?.forEach((event: any) => {\r\n event(value)\r\n });\r\n }\r\n }\r\n public off(id: string, event: Function) {\r\n let ea = this.eventsByKey.get(id)\r\n if (ea!=null) {\r\n this.eventsByKey.set(id, ea.filter((h: any) => h !== event))\r\n }\r\n this.updateAllEvents()\r\n }\r\n public all(value: any) {\r\n this.events.forEach(event => {\r\n event(value)\r\n });\r\n }\r\n private updateAllEvents() {\r\n Array.from(this.eventsByKey.values()).forEach(listOfEvents => {\r\n listOfEvents.forEach(event => {\r\n this.events.push(event)\r\n });\r\n });\r\n }\r\n}","export class StringParser{\r\n public parseSingle(v: string, element: any, wH: any, baseRem: number): number {\r\n let isNegative = v.startsWith('-');\r\n if (isNegative) {\r\n v = v.slice(1);\r\n }\r\n let pV;\r\n if (v === 'selfHeight') {\r\n pV = element.offsetHeight;\r\n } else if (v.endsWith('px')) {\r\n pV = parseFloat(v);\r\n } else if (v.endsWith('%')) {\r\n pV = parseFloat(v) * wH / 100;\r\n } else if (v.endsWith('rem')) {\r\n pV = parseFloat(v) * baseRem;\r\n }\r\n return isNegative ? -pV : pV;\r\n }\r\n}","function nullifyTransforms(el: any) {\r\n let { top, left, width, height } = el.getBoundingClientRect();\r\n let transformArr = parseTransform(el);\r\n if (transformArr.length == 6) {\r\n var t = transformArr;\r\n let det = t[0] * t[3] - t[1] * t[2];\r\n return {\r\n width: width / t[0] == 0 ? 1 : t[0],\r\n height: height / t[3] == 0 ? 1 : t[3],\r\n left: (left * t[3] - top * t[2] + t[2] * t[5] - t[4] * t[3]) / det,\r\n top: (-left * t[1] + top * t[0] + t[4] * t[1] - t[0] * t[5]) / det,\r\n };\r\n } else {\r\n return { top, left, width, height };\r\n }\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n}\r\n\r\nexport class StringPosition {\r\n process(e: any, container: any = document.body) {\r\n let br;\r\n try {\r\n br = container.getBoundingClientRect();\r\n } catch (error) {\r\n br = document.body.getBoundingClientRect();\r\n }\r\n let er = nullifyTransforms(e);\r\n let o = er.top - br.top;\r\n let oL = er.left - br.left;\r\n return { top: o, left: oL };\r\n }\r\n}\r\n","import { IStringModule } from './IStringModule';\r\nimport { StringLazy } from './Loading/Modules/StringLazy';\r\nimport { StringLoading } from './Loading/Modules/StringLoading';\r\nimport { StringVideoAutoplay } from './Loading/Modules/StringVideoAutoplay';\r\nimport { StringCursor } from './Mouse/Modules/StringCursor';\r\nimport { StringMagnetic } from './Mouse/Modules/StringMagnetic';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringResponsive } from './Screen/StringResponsive';\r\nimport { StringScrollbar } from './Scroll/Modules/Scrollbar/StringScrollbar';\r\nimport { StringAnchor } from './Scroll/Modules/StringAnchor';\r\nimport { StringGlide } from './Scroll/Modules/StringGlide';\r\nimport { StringLerp } from './Scroll/Modules/StringLerp';\r\nimport { StringParallax } from './Scroll/Modules/StringParallax';\r\nimport { StringProgress } from './Scroll/Modules/StringProgress';\r\nimport { StringScroll } from './Scroll/Types/StringScroll';\r\nimport { StringScrollDefault } from './Scroll/Types/StringScrollDefault';\r\nimport { StringScrollDisable } from './Scroll/Types/StringScrollDisable';\r\nimport { StringScrollSmooth } from './Scroll/Types/StringScrollSmooth';\r\nimport { StringTypeSettings } from './Scroll/Types/StringTypeSettings';\r\nimport { StringSplit } from './Split/Modules/StringSplit';\r\nimport { StringFPS } from './StringFPS';\r\nimport { StringModule } from './StringModule';\r\nimport { StringDelayLerpTracker } from './Tracker/StringDelayLerpTracker';\r\nimport { StringFPSTracker } from './Tracker/StringFPSTracker';\r\nimport { StringLerpTracker } from './Tracker/StringLerpTracker';\r\nimport { StringPositionTracker } from './Tracker/StringPositionTracker';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerpCalc } from './Utils/StringLerpCalc';\r\nimport { StringParser } from './Utils/StringParser';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nfunction isTouchDevice() {\r\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n}\r\n\r\nclass StringTune {\r\n private static i: StringTune;\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n private modulesUI: Array<IStringModule> = new Array<IStringModule>();\r\n private events: StringEvent = new StringEvent();\r\n private loop: StringFPS = new StringFPS();\r\n\r\n private onWheelBind: any;\r\n private onScrollBind: any;\r\n private onResizeBind: any;\r\n private onMouseMoveBind: any;\r\n\r\n private wW: number = 0;\r\n private wH: number = 0;\r\n\r\n private root: any;\r\n private window: any;\r\n\r\n private _virtualCursor: StringVirtualCursor = new StringVirtualCursor();\r\n private _lerp: StringLerpCalc = new StringLerpCalc();\r\n private _attribute: StringAttribute = new StringAttribute();\r\n private _boundingClientRect: StringBoundingClientRect = new StringBoundingClientRect();\r\n private _position: StringPosition = new StringPosition();\r\n\r\n private sEn: StringScroll;\r\n private sEnSmooth: StringScrollSmooth;\r\n private sEnDefault: StringScrollDefault;\r\n private sEnDisable: StringScrollDisable;\r\n\r\n private settings: StringTypeSettings;\r\n private data: StringData;\r\n\r\n protected objects: Map<string, StringObject> = new Map<string, StringObject>();\r\n\r\n protected connectQueue: Array<any> = new Array<any>();\r\n\r\n private globalId: number = 1;\r\n\r\n private _parser = new StringParser();\r\n private isStarted: boolean = false\r\n\r\n get scrollDirection() {\r\n return this.data.sD;\r\n }\r\n\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this.data.sD = scrollDirection;\r\n\r\n this.sEn.scrollDirection = scrollDirection;\r\n this.sEnSmooth.scrollDirection = scrollDirection;\r\n this.sEnDefault.scrollDirection = scrollDirection;\r\n this.sEnDisable.scrollDirection = scrollDirection;\r\n\r\n if (scrollDirection == 'horizontal') {\r\n document.documentElement.classList.add('-horizontal');\r\n document.documentElement.classList.remove('-vertical');\r\n } else {\r\n document.documentElement.classList.add('-vertical');\r\n document.documentElement.classList.remove('-horizontal');\r\n }\r\n\r\n this.rebuild();\r\n this.initObjects();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onChangeScrollDirection();\r\n });\r\n }\r\n get speedAccelerate() {\r\n return this.settings.speedAccelerate;\r\n }\r\n set speedAccelerate(speed: number) {\r\n this.settings.speedAccelerate = 0.1 + (0.5 - 0.1) * speed;\r\n }\r\n get speed() {\r\n return this.settings.speed;\r\n }\r\n set speed(speed: number) {\r\n this.settings.speed = speed;\r\n }\r\n\r\n get mouseLerp() {\r\n return this.settings.mouseLerp;\r\n }\r\n set mouseLerp(mouseLerp: number) {\r\n this.settings.mouseLerp = mouseLerp;\r\n }\r\n\r\n get scrollPosition() {\r\n return this.data.c;\r\n }\r\n set scrollPosition(scrollPosition: number) {\r\n this.data.c = scrollPosition;\r\n this.data.t = scrollPosition;\r\n window.scrollTo(0, this.data.c);\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScroll(this.data);\r\n }\r\n \r\n }\r\n set scrollContainer(container: any) {\r\n let isUpdateEvents = this.data.sC != null;\r\n if (isUpdateEvents) {\r\n this.data.sC.removeEventListener('scroll', this.onScrollBind);\r\n this.data.sC.removeEventListener('resize', this.onResizeBind);\r\n }\r\n this.sEn.scrollContainer = container;\r\n this.sEnSmooth.scrollContainer = container;\r\n this.sEnDefault.scrollContainer = container;\r\n this.sEnDisable.scrollContainer = container;\r\n this.data.sC = container;\r\n if (isUpdateEvents) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n }\r\n this.rebuild();\r\n this.initObjects();\r\n }\r\n\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n private mMode: 'disable' | 'default' = 'default';\r\n set scrollMobileMode(mobileMode: 'disable' | 'default') {\r\n this.mMode = mobileMode;\r\n this.updateModeParams();\r\n }\r\n private dMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n set scrollDesktopMode(desktopMode: 'smooth' | 'disable' | 'default') {\r\n this.dMode = desktopMode;\r\n this.updateModeParams();\r\n }\r\n private updateModeParams() {\r\n if (this.window.innerWidth < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n switch (this.scrollMode) {\r\n case 'disable':\r\n this.data.sM = 'disable';\r\n this.sEn = this.sEnDisable;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'hidden';\r\n break;\r\n case 'default':\r\n this.data.sM = 'default';\r\n this.sEn = this.sEnDefault;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n case 'smooth':\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n default:\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n }\r\n }\r\n\r\n private constructor() {\r\n this.root = document.body;\r\n this.window = window;\r\n\r\n this.settings = new StringTypeSettings();\r\n this.data = new StringData();\r\n\r\n this._virtualCursor.mouseLerp = this.mouseLerp\r\n \r\n\r\n this.sEnSmooth = new StringScrollSmooth(document, this.settings, this.data);\r\n this.sEnDefault = new StringScrollDefault(document, this.settings, this.data);\r\n this.sEnDisable = new StringScrollDisable(document, this.settings, this.data);\r\n\r\n this.sEnSmooth.onScrollStop = this.onScrollStop.bind(this);\r\n this.sEnDefault.onScrollStop = this.onScrollStop.bind(this);\r\n this.sEnDisable.onScrollStop = this.onScrollStop.bind(this);\r\n\r\n this.sEnSmooth.onChangeDirection = this.onChangeDirection.bind(this);\r\n this.sEnDefault.onChangeDirection = this.onChangeDirection.bind(this);\r\n this.sEnDisable.onChangeDirection = this.onChangeDirection.bind(this);\r\n\r\n this.sEnSmooth.onScrollStart = this.onScrollStart.bind(this);\r\n this.sEnDefault.onScrollStart = this.onScrollStart.bind(this);\r\n this.sEnDisable.onScrollStart = this.onScrollStart.bind(this);\r\n\r\n this.sEn = this.sEnSmooth;\r\n this.scrollContainer = window;\r\n this.data.sC = this.window;\r\n\r\n this.data.sD = 'vertical';\r\n document.documentElement.classList.add('-vertical');\r\n\r\n this.onWheelBind = this.onWheelEvent.bind(this);\r\n this.onScrollBind = this.onScrollEvent.bind(this);\r\n this.onResizeBind = this.onResize.bind(this);\r\n this.onMouseMoveBind = this.onMouseMoveEvent.bind(this);\r\n const observer = new ResizeObserver(() => {\r\n this.onResize()\r\n });\r\n\r\n observer.observe(document.documentElement);\r\n this.loop.onFrame = () => {\r\n this.onUpdateEvent();\r\n };\r\n this.rebuild();\r\n\r\n this.on('lazy-loaded', ()=>{\r\n this.rebuild();\r\n })\r\n }\r\n\r\n public static getInstance(): StringTune {\r\n if (!StringTune.i) {\r\n StringTune.i = new StringTune();\r\n }\r\n return StringTune.i;\r\n }\r\n\r\n public reuse<T>(type: new (...args: any[]) => T): T | undefined {\r\n const foundModule = this.modules.find((module: any) => module instanceof type);\r\n return foundModule as T | undefined;\r\n }\r\n\r\n public use(objectClass: typeof StringModule, settings: any = null) {\r\n const module = new objectClass(\r\n {\r\n data: this.data,\r\n lerp: this._lerp,\r\n attribute: this._attribute,\r\n boundingClientRect: this._boundingClientRect,\r\n position: this._position,\r\n virtualCursor: this._virtualCursor,\r\n events: this.events,\r\n loop: this.loop,\r\n },\r\n settings\r\n );\r\n\r\n if (module.type == 1) {\r\n this.modules.push(module);\r\n }\r\n if (module.type == 2) {\r\n this.modulesUI.push(module);\r\n }\r\n }\r\n public start(fps: number) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n\r\n this.root.addEventListener('wheel', this.onWheelBind, { passive: false });\r\n this.root.addEventListener('mousemove', this.onMouseMoveBind);\r\n\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n Array.from(this.objects.values()).forEach((object) => {\r\n this.setupObject(object.el, object);\r\n });\r\n });\r\n resizeObserver.observe(document.body);\r\n\r\n this.loop.start(fps);\r\n document.documentElement.classList.add('-string');\r\n \r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onStart();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onStart();\r\n }\r\n\r\n this.initObjects();\r\n this.initMutationObserver();\r\n this.isStarted = true\r\n this.events.emit(`start`, null);\r\n }\r\n\r\n private onChangeScrollParams() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onChangeScrollParams();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onChangeScrollParams();\r\n }\r\n }\r\n\r\n private initObjects() {\r\n document.querySelectorAll('[string]').forEach((element) => {\r\n this.addObject(element as any);\r\n });\r\n document.querySelectorAll('[string-copy-from]').forEach((element) => {\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null && this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n }\r\n });\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n module.onScroll(this.data);\r\n module.onUpdate(this.data);\r\n });\r\n }\r\n\r\n public destroy() {\r\n this.window.removeEventListener('scroll', this.onScrollBind);\r\n this.root.removeEventListener('wheel', this.onScrollBind);\r\n this.window.removeEventListener('resize', this.onResizeBind);\r\n this.root.removeEventListener('mousemove', this.onMouseMoveBind);\r\n this.loop.stop();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n }\r\n\r\n public on(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor' | 'lazy-loaded' | 'update' | 'start', event: any, id: string = '') {\r\n switch (key) {\r\n case 'start':\r\n if (this.isStarted) {\r\n event()\r\n }\r\n this.events.on(`start`, event);\r\n\r\n break;\r\n case 'update':\r\n this.events.on(`update`, event);\r\n break;\r\n case 'scroll':\r\n this.events.on(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.on(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.on(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.on(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.on(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.on(`cursor`, event);\r\n break;\r\n case 'lazy-loaded':\r\n this.events.on(`all-image-loaded`, event);\r\n break;\r\n }\r\n }\r\n public off(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor' | 'lazy-loaded' | 'update' | 'start', event: any, id: string = '') {\r\n switch (key) {\r\n case 'start':\r\n this.events.off(`start`, event);\r\n break;\r\n case 'update':\r\n this.events.off(`update`, event);\r\n break;\r\n case 'scroll':\r\n this.events.off(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.off(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.off(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.off(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.off(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.off(`cursor`, event);\r\n break;\r\n case 'lazy-loaded':\r\n this.events.off(`all-image-loaded`, event);\r\n break;\r\n }\r\n }\r\n\r\n private defaultSettings: any = {\r\n stringOffsetStart: '0%',\r\n stringOffsetEnd: '0%',\r\n\r\n stringEnterEl: 'top',\r\n stringExitEl: 'bottom',\r\n stringEnterVp: 'bottom',\r\n stringExitVp: 'top',\r\n\r\n stringInviewTop: '0%',\r\n stringInviewBottom: '0%',\r\n\r\n stringKey: '--progress',\r\n\r\n stringStrength: 0.3,\r\n stringRadius: 150,\r\n stringLerp: 0.2,\r\n stringParallaxBias: 0.0,\r\n stringParallax: 0.2,\r\n };\r\n\r\n public setupSettings(settings: any) {\r\n if (settings['string-offset-top'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-top'];\r\n }\r\n if (settings['string-offset-bottom'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-bottom'];\r\n }\r\n if (settings['string-offset-left'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-left'];\r\n }\r\n if (settings['string-offset-right'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-right'];\r\n }\r\n\r\n if (settings[`string-inview-top`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-top`];\r\n }\r\n if (settings[`string-inview-left`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-left`];\r\n }\r\n if (settings[`string-inview-bottom`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-bottom'];\r\n }\r\n if (settings[`string-inview-right`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-right'];\r\n }\r\n\r\n if (settings['string-enter-el'] != null) {\r\n this.defaultSettings.stringEnterEl = settings['string-enter-el'];\r\n }\r\n if (settings['string-enter-vp'] != null) {\r\n this.defaultSettings.stringEnterVp = settings['string-enter-vp'];\r\n }\r\n if (settings['string-exit-el'] != null) {\r\n this.defaultSettings.stringExitEl = settings['string-exit-el'];\r\n }\r\n if (settings['string-exit-vp'] != null) {\r\n this.defaultSettings.stringExitVp = settings['string-exit-vp'];\r\n }\r\n if (settings['string-key'] != null) {\r\n this.defaultSettings.stringKey = settings['string-key'];\r\n }\r\n\r\n if (settings['string-strength'] != null) {\r\n this.defaultSettings.stringStrength = settings['string-strength'];\r\n }\r\n if (settings['string-radius'] != null) {\r\n this.defaultSettings.stringRadius = settings['string-radius'];\r\n }\r\n if (settings['string-lerp'] != null) {\r\n this.defaultSettings.stringLerp = settings['string-lerp'];\r\n }\r\n\r\n if (settings['string-parallax-bias'] != null) {\r\n this.defaultSettings.stringParallaxBias = settings['string-parallax-bias'];\r\n }\r\n if (settings['string-parallax'] != null) {\r\n this.defaultSettings.stringParallax = settings['string-parallax'];\r\n }\r\n }\r\n\r\n protected setupObject(el: HTMLElement, object: StringObject) {\r\n object.showObserver?.disconnect();\r\n object.progressObserver?.disconnect();\r\n object.inviewObserver?.disconnect();\r\n\r\n let r = this._boundingClientRect.process(el);\r\n let rW = r.width / this.data.scsW;\r\n let rH = r.height / this.data.scsH;\r\n\r\n let startElementPosition = this._attribute.process(el, `string-enter-el`) || this.defaultSettings.stringEnterEl;\r\n let startSourcePosition = this._attribute.process(el, `string-enter-vp`) || this.defaultSettings.stringEnterVp;\r\n let endElementPosition = this._attribute.process(el, `string-exit-el`) || this.defaultSettings.stringExitEl;\r\n let endSourcePosition = this._attribute.process(el, `string-exit-vp`) || this.defaultSettings.stringExitVp;\r\n\r\n object.inviewTop =\r\n this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview-top`,\r\n this._attribute.process(el, `string-inview-left`, this.defaultSettings.stringInviewTop)\r\n ),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n object.inviewBottom =\r\n this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview`,\r\n this._attribute.process(\r\n el,\r\n `string-inview-bottom`,\r\n this._attribute.process(el, `string-inview-right`, this.defaultSettings.stringInviewBottom)\r\n )\r\n ),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n\r\n object.selfDisable = this._attribute.process(el, `string-self-disable`) == null ? false : true;\r\n object.abs = this._attribute.process(el, `string-abs`) == null ? false : true;\r\n\r\n let targetQuery = this._attribute.process(el, `string-cursor-target`);\r\n\r\n if (targetQuery != null) {\r\n object.cursorTargetClass = targetQuery;\r\n }\r\n\r\n object.id = this._attribute.process(el, `string-id`, `string-${this.globalId}`);\r\n object.key = this._attribute.process(el, `string-key`, this.defaultSettings.stringKey);\r\n\r\n object.strength = this._attribute.process(el, 'string-strength', this.defaultSettings.stringStrength);\r\n object.radius = this._attribute.process(el, 'string-radius', this.defaultSettings.stringRadius);\r\n object.lerp = this._attribute.process(el, 'string-lerp', this.defaultSettings.stringLerp);\r\n object.weight = this._attribute.process(el, 'string-weight', 0.0);\r\n object.glide = this._attribute.process(el, 'string-glide', 1);\r\n let parallaxPosition = this._attribute.process(el, 'string-parallax-bias', this.defaultSettings.stringParallaxBias);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n\r\n el.setAttribute(`string-id`, object.id);\r\n if (this.data.sD == 'vertical') {\r\n object.size = rH;\r\n } else {\r\n object.size = rW;\r\n }\r\n\r\n object.oStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n object.oEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let observerStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n let observerEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let stringModuleKeys = this._attribute.process(object.el, 'string', '').split('|');\r\n object.factor = 0;\r\n if (stringModuleKeys.includes('parallax')) {\r\n observerStart = 0;\r\n observerEnd = 0;\r\n object.oStart = 0;\r\n object.oEnd = 0;\r\n object.factor = this._attribute.process(el, `string-parallax`, this.defaultSettings.stringParallax);\r\n object.oStart += object.factor * this.data.wS;\r\n object.oEnd += object.factor * this.data.wS;\r\n }\r\n\r\n object.repeat = this._attribute.process(el, `string-repeat`) == null ? false : true;\r\n object.sElPos = startElementPosition;\r\n object.sScrPos = startSourcePosition;\r\n object.eElPos = endElementPosition;\r\n object.eScrPos = endSourcePosition;\r\n\r\n object.halfWidth = rW / 2;\r\n object.halfHeight = rH / 2;\r\n\r\n let windowSize = this.data.wS;\r\n if (this.data.sD == 'vertical') {\r\n let startPos = this._position.process(el, this.data.sC).top / this.data.scsH;\r\n object.start = startPos;\r\n object.end = startPos + rH;\r\n } else {\r\n let startPos = this._position.process(el, this.data.sC).left / this.data.scsW;\r\n object.start = startPos;\r\n object.end = startPos + rW;\r\n }\r\n object.calculatePositions(windowSize);\r\n\r\n let connectItems = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id == object.id;\r\n });\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id != object.id;\r\n });\r\n\r\n connectItems.forEach((connectItem) => {\r\n object.connects.push(connectItem.element);\r\n });\r\n\r\n let callbackProgress = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n if (object.active == false) {\r\n this.events.emit(`activate_object_${object.id}`, true);\r\n object.enter();\r\n }\r\n } else {\r\n if (object.active == true) {\r\n this.events.emit(`activate_object_${object.id}`, false);\r\n object.leave();\r\n }\r\n }\r\n });\r\n };\r\n \r\n let callbackInview = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`inview_${object.id}`, true);\r\n object.show();\r\n } else {\r\n this.events.emit(`inview_${object.id}`, false);\r\n object.hide();\r\n }\r\n });\r\n };\r\n let callbackIntersection = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`intersection_${object.id}`, true);\r\n } else {\r\n this.events.emit(`intersection_${object.id}`, false);\r\n }\r\n });\r\n };\r\n\r\n let optionsProgress: any;\r\n let optionsInview: any;\r\n if (this.data.sD == 'vertical') {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `${observerStart + this.data.wS}px 1000px ${observerEnd + this.data.wS}px 1000px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `${observerStart + object.inviewTop}px 1000px ${observerEnd + object.inviewBottom}px 1000px`,\r\n threshold: 0.001,\r\n };\r\n } else {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `1000px ${observerStart + this.data.wS}px 1000px ${observerEnd + this.data.wS}px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `1000px ${observerStart + object.inviewTop}px 1000px ${observerEnd + object.inviewBottom}px`,\r\n threshold: 0.001,\r\n };\r\n }\r\n\r\n let optionsIntersection = {\r\n root: null,\r\n rootMargin: `0px 0px 0px 0px`,\r\n threshold: 0.001,\r\n };\r\n\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obIntersection = new IntersectionObserver(callbackIntersection, optionsIntersection);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n \r\n //object.show();\r\n obProgress.observe(el);\r\n obIntersection.observe(el);\r\n obInview.observe(el);\r\n\r\n object.showObserver = obIntersection;\r\n object.progressObserver = obProgress;\r\n object.inviewObserver = obInview;\r\n\r\n this.modules.forEach((module: IStringModule) => {\r\n if (module.tryConnect(object)) {\r\n module.initObject(object,el);\r\n module.connect(object);\r\n \r\n }\r\n });\r\n }\r\n\r\n addObject(el: HTMLElement) {\r\n let isInit = this._attribute.process(el, 'string-inited');\r\n \r\n let object: any;\r\n if (isInit == null) {\r\n object = new StringObject(el);\r\n } else {\r\n if (this.objects.has(this._attribute.process(el, 'string-id'))) {\r\n object = this.objects.get(this._attribute.process(el, 'string-id'));\r\n } else {\r\n object = new StringObject(el);\r\n }\r\n }\r\n el.setAttribute(`string-inited`, '');\r\n this.setupObject(el, object);\r\n this.objects.set(object.id, object);\r\n this.globalId++;\r\n }\r\n\r\n public removeObject(id: string) {\r\n let removedObject = this.objects.get(id);\r\n if (removedObject?.showObserver != null) {\r\n removedObject?.showObserver.disconnect();\r\n }\r\n if (removedObject?.progressObserver != null) {\r\n removedObject?.progressObserver.disconnect();\r\n }\r\n if (removedObject?.inviewObserver != null) {\r\n removedObject?.inviewObserver.disconnect();\r\n }\r\n this.objects.delete(id);\r\n removedObject?.el.removeAttribute(`string-inited`);\r\n removedObject?.leave();\r\n removedObject = undefined;\r\n }\r\n\r\n private onMouseMoveEvent(e: MouseEvent) {\r\n this._virtualCursor.onMouseMove(e);\r\n\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onMouseMove(e);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onMouseMove(e);\r\n }\r\n \r\n }\r\n private onWheelEvent(e: WheelEvent) {\r\n this.sEn.onWheel(e);\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onWheel(e);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onWheel(e);\r\n }\r\n }\r\n private onScrollStart() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScrollStart();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onScrollStart();\r\n }\r\n }\r\n private onScrollStop() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScrollStop();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onScrollStop();\r\n }\r\n }\r\n private onChangeDirection() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onChangeDirection();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onChangeDirection();\r\n }\r\n }\r\n private onScrollEvent(e: Event) {\r\n this.sEn.onScroll(e);\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScroll(this.data);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onScroll(this.data);\r\n }\r\n this.events.emit(`lerp`, this.data.v);\r\n this.events.emit(`scroll`, this.data.c);\r\n }\r\n private onUpdateEvent() {\r\n this._virtualCursor.onUpdate();\r\n this.sEn.onUpdate();\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onUpdate(this.data);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onUpdate(this.data);\r\n }\r\n this.events.emit(`update`, null);\r\n }\r\n public onResize() {\r\n let newWW = 0;\r\n let newWH = 0;\r\n try {\r\n let rect = this.sEn.scrollContainer.getBoundingClientRect();\r\n newWW = rect.width;\r\n newWH = rect.height;\r\n } catch (error) {\r\n newWW = this.sEn.scrollContainer.innerWidth;\r\n newWH = this.sEn.scrollContainer.innerHeight;\r\n }\r\n if (this.data.sD == 'vertical') {\r\n this.data.bS = this.data.psH - newWH;\r\n this.data.wS = newWH;\r\n } else {\r\n this.data.bS = this.data.psW - newWW;\r\n this.data.wS = newWW;\r\n }\r\n if (this.wW != newWW || this.window.innerWidth > 1024) {\r\n this.rebuild();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n }\r\n this.wW = newWW;\r\n this.wH = newWH;\r\n }\r\n private initMutationObserver() {\r\n\r\n \r\n const handleRemovedElement = (element: Element) => {\r\n let removeId = element.getAttribute('string-id');\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n\r\n if (connectTargetId != null) {\r\n this.connectQueue = this.connectQueue.filter(\r\n (connectQueueItem: any) => connectQueueItem.id != connectTargetId\r\n );\r\n }\r\n if (removeId != null) {\r\n this.removeObject(removeId);\r\n }\r\n };\r\n\r\n const handleAddedElement = (element: Element) => {\r\n \r\n this.addObject(element as any);\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n if (this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n } else {\r\n this.connectQueue.push({\r\n id: connectTargetId,\r\n element,\r\n });\r\n }\r\n }\r\n };\r\n\r\n\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.type === 'childList') {\r\n if (mutation.removedNodes.length > 0) {\r\n mutation.removedNodes.forEach((removedNode) => {\r\n if (removedNode.nodeType === Node.ELEMENT_NODE) {\r\n const element = removedNode as Element;\r\n if (element.hasAttribute('string')) {\r\n handleRemovedElement(element);\r\n }\r\n element.querySelectorAll('[string]').forEach((childElement) => {\r\n handleRemovedElement(childElement);\r\n });\r\n }\r\n });\r\n }\r\n if (mutation.addedNodes.length > 0) {\r\n \r\n mutation.addedNodes.forEach((addedNode) => {\r\n if (addedNode.nodeType === Node.ELEMENT_NODE) {\r\n const element = addedNode as Element;\r\n if (element.hasAttribute('string') && !element.hasAttribute('string-inited')) {\r\n handleAddedElement(element);\r\n }\r\n element.querySelectorAll('[string]:not([string-inited])').forEach((childElement) => {\r\n handleAddedElement(childElement);\r\n });\r\n }\r\n });\r\n }\r\n \r\n if (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0) {\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onRebuild();\r\n });\r\n }\r\n }\r\n });\r\n });\r\n const config = {\r\n attributes: false,\r\n childList: true,\r\n subtree: true,\r\n };\r\n observer.observe(document.body, config);\r\n }\r\n private rebuild() {\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n\r\n try {\r\n let transformContainer: any = parseTransform(this.data.sC);\r\n this.data.scsW = transformContainer[0];\r\n this.data.scsH = transformContainer[3];\r\n } catch (error) {\r\n this.data.scsW = 1;\r\n this.data.scsH = 1;\r\n }\r\n\r\n try {\r\n let rect = this.data.sC.getBoundingClientRect();\r\n this.wW = rect.width / this.data.scsW;\r\n this.wH = rect.height / this.data.scsH;\r\n } catch (error) {\r\n this.wW = this.data.sC.innerWidth;\r\n this.wH = this.data.sC.innerHeight;\r\n }\r\n\r\n if (this.wW < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n\r\n let b = document.body,\r\n h = document.documentElement;\r\n\r\n this.data.psW = this.data.sC.scrollWidth;\r\n this.data.psH = this.data.sC.scrollHeight;\r\n if (this.data.psW == undefined) {\r\n this.data.psW = Math.max(b.scrollWidth, b.offsetWidth, h.clientWidth, h.scrollWidth, h.offsetWidth);\r\n }\r\n if (this.data.psH == undefined) {\r\n this.data.psH = Math.max(b.scrollHeight, b.offsetHeight, h.clientHeight, h.scrollHeight, h.offsetHeight);\r\n }\r\n\r\n if (this.data.sD == 'vertical') {\r\n this.data.bS = this.data.psH - this.wH;\r\n this.data.wS = this.wH;\r\n } else {\r\n this.data.bS = this.data.psW - this.wW;\r\n this.data.wS = this.wW;\r\n }\r\n\r\n this.data.hnwS = this.data.wS * -0.5;\r\n\r\n this.updateModeParams();\r\n }\r\n}\r\n\r\n\r\n \r\nexport {\r\n StringTune as default, StringCursor, StringDelayLerpTracker, StringFPSTracker, StringGlide, StringLazy, StringLerp, StringLerpTracker, StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, StringResponsive, StringScrollbar, StringSplit, StringAnchor, StringTune as StringTune, StringVideoAutoplay\r\n};\r\n\r\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","StringModule","type","_type","constructor","visitor","settings","objectsMap","Map","objects","Array","htmlKey","data","lerp","attribute","boundingClientRect","position","virtualCursor","events","loop","initObject","object","el","onScrollStart","onScrollStop","onChangeDirection","destructor","onChangeScrollParams","tryConnect","process","split","includes","connect","onConnect","addObject","id","set","from","map","name","removeObject","delete","onStart","onUpdate","onResize","onRebuild","onScroll","onMouseMove","e","onWheel","onChangeDevice","onChangeScrollDirection","onMutationObserver","added","removed","StringLazy","super","isStartLoaded","imageLoadingCount","document","querySelectorAll","forEach","element","load","getImageSize","getAttribute","classList","add","src","addEventListener","url","Promise","resolve","reject","xhr","XMLHttpRequest","open","responseType","onload","status","buffer","response","blob","Blob","img","Image","style","aspectRatio","width","height","URL","revokeObjectURL","emit","onerror","Error","createObjectURL","setRequestHeader","send","StringLoading","loadingTimeout","timeout","setTimeout","documentElement","StringVideoAutoplay","videoElement","videoSrc","started","tagName","toLowerCase","setAttribute","muted","tryPlay","once","console","warn","play","catch","err","then","StringCursor","oldX","oldY","enterObjectsMap","enterObjects","cursor","querySelector","cursorContent","mouseLerp","smoothX","smoothY","cursorData","lerpX","lerpY","x","y","setProperty","toFixed","isMouseMove","rect","getBoundingClientRect","offsetX","calculateOffset","left","offsetY","top","mouseX","mouseY","setMouseCoordinates","halfWidth","halfHeight","onMouseEnterEventBind","onMouseMoveEventBind","onMouseLeaveEventBind","cursorTargetClass","remove","event","removeEventListener","onEnter","onLeave","selfDisable","connects","mousePos","size","StringMagnetic","strength","radius","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","Math","sqrt","magneticTargetX","magneticTargetY","isMagneting","magneticX","magneticY","toString","StringLerpCalc","start","end","amt","StringVirtualCursor","targetX","targetY","_x","_y","_lerpX","_lerpY","_lF","abs","tS","bS","lS","rS","StringObject","oStart","oEnd","startPos","endPos","differencePos","factor","inviewTop","inviewBottom","sElPos","sScrPos","eElPos","eScrPos","glide","weight","parallaxPositionStart","parallaxPositionEnd","progress","showObserver","progressObserver","inviewObserver","repeat","active","modules","anchor","intensity3D","distance3D","decay3D","type3D","material3D","color3D","model3D","animations3D","enter","leave","show","hide","push","calculatePositions","windowSize","DeviceType","StringResponsiveQueryDevice","config","min","undefined","max","enable","setEnable","setRange","mediaQuery","query","StringResponsive","queries","Mobile","Tablet","Laptop","Desktop","matchMedias","window","matchMedia","mobile","tablet","laptop","desktop","updateElements","isMobileMedia","matches","isTabletMedia","isLaptopMedia","isDesktopMedia","showElement","hasAttribute","display","StringScrollbarHorizontal","scrollbar","thumb","isDragging","startY","startScrollPosition","contentSize","psH","visibleSize","wS","thumbSize","updateThumb","contentHeight","visibleHeight","c","mouseDownEvent","mouseMoveEvent","deltaY","newScrollPosition","t","scrollTo","StringScrollbarVertical","startCoordinate","psW","contentWidth","visibleWidth","deltaX","StringScrollbar","scrollMode","mouseUpEventBind","mouseUpEvent","bind","mouseDownEventBind","mouseMoveEventBind","createScrollbar","addCustomStyles","showScrollbar","hideScrollbar","scrollbarState","sM","sD","scrollbarStateVertical","scrollbarStateHorizontal","createElement","textContent","head","appendChild","body","userSelect","scrollTimeout","clearTimeout","StringAnchor","oldLerp","p","parseOrig","transformOrigin","part","trim","startsWith","slice","s","floor","random","length","StringGlide","previousLerp","displacement","acceleration","velocityMultiplier","isInitialScroll","baseVelocityMultiplier","reducedVelocityMultiplier","negativeVelocityMultiplier","ACCELERATION_STEP","MIN_DISPLACEMENT","MAX_DISPLACEMENT","MIN_VELOCITY","MAX_VELOCITY","maxDisplacementValue","setupItem","transformCompute","dV","transform","onUpdateDesktopEvent","i","onUpdateMobileEvent","onUpdateEvent","calcExpanderFactor","isDirectionUp","isConditionMet","v","innerWidth","resetState","sDB","StringLerp","StringParallax","setupParallax","onScrollDesktopEvent","onScrollMobileEvent","onScrollEvent","parallaxPosition","StringProgress","setUpObject","applyProgress","progressStr","StringScroll","isProg","isParallaxEnabled","vT","onCalcUpdate","scrollContainer","_scrollDirection","d","scrollDirection","StringScrollDefault","delta","speedAccelerate","scrollTop","plusDelta","StringScrollDisable","preventDefault","CLASS_NAMES","StringScrollSmooth","isScrollbarManipulation","isBottomScrollDirection","velocityThreshold","previousCurrent","updateScrollDirection","newDirection","isForward","toggle","clamp","stopScroll","speed","absVelocity","ceil","StringTypeSettings","sC","sA","mL","StringSplit","splitOptions","parseSplitOptions","innerHTML","html","contains","attributeValue","options","line","word","char","charLine","charWord","wordLine","match","prefix","option","params","parseParam","result","align","param","parseInt","elementRoot","text","decodeHtmlEntity","words","globalCharIndex","globalWordIndex","totalChars","replace","tempSpan","compStyles","getComputedStyle","fontFamily","fontSize","letterSpacing","lineHeight","fontWeight","virtualLines","virtualLine","currentLineWidth","wordIndex","wordWidth","offsetWidth","virtualWordSpan","chars","charIndex","virtualCharSpan","hasLineOptions","addedWordsCount","appendVirtualLineToDOM","wordSpan","charSpan","applyOptions","removeChild","lineIndex","totalWords","lineSpan","lineCharIndex","totalLineChars","span","optionArray","globalIndex","localIndex","parentLength","optionIndex","index","calculateIndex","variableName","generateVariableName","String","createSpaceSpan","spaceSpan","str","StringFPS","isAnimationStarted","requestAnimationId","onFrame","now","_now","fps","fpsInterval","Date","animate","stop","cancelAnimationFrame","requestAnimationFrame","elapsed","StringDelayLerpTracker","canvasHeight","canvas","context","getContext","innerHeight","bottom","backgroundColor","border","zIndex","positionHistory","maxHistory","currentPosition","targetPosition","shift","drawGraph","ctx","clearRect","strokeStyle","lineWidth","beginPath","pos","moveTo","lineTo","stroke","setTargetPosition","StringFPSTracker","callCount","createDisplayElement","displayElement","right","intervalId","setInterval","clearInterval","StringLerpTracker","StringPositionTracker","dirSymbol","StringAttribute","n","StringBoundingClientRect","StringData","three","cF","hnwS","scsW","scsH","StringEvent","eventsByKey","on","has","updateAllEvents","off","ea","filter","h","all","values","listOfEvents","StringParser","parseSingle","wH","baseRem","pV","isNegative","offsetHeight","endsWith","parseFloat","StringPosition","container","br","error","er","transformArr","parseTransform","det","nullifyTransforms","isTouchDevice","navigator","maxTouchPoints","StringTune","sEn","sEnSmooth","sEnDefault","sEnDisable","rebuild","initObjects","scrollPosition","isUpdateEvents","onScrollBind","onResizeBind","scrollMobileMode","mobileMode","mMode","updateModeParams","scrollDesktopMode","desktopMode","dMode","overflow","modulesUI","wW","_virtualCursor","_lerp","_attribute","_boundingClientRect","_position","connectQueue","globalId","_parser","isStarted","defaultSettings","stringOffsetStart","stringOffsetEnd","stringEnterEl","stringExitEl","stringEnterVp","stringExitVp","stringInviewTop","stringInviewBottom","stringKey","stringStrength","stringRadius","stringLerp","stringParallaxBias","stringParallax","onWheelBind","onWheelEvent","onMouseMoveBind","onMouseMoveEvent","ResizeObserver","observe","getInstance","reuse","find","use","objectClass","passive","entries","setupObject","initMutationObserver","connectTargetId","connectTargetObject","destroy","setupSettings","disconnect","r","rW","rH","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","targetQuery","observerStart","observerEnd","stringModuleKeys","optionsProgress","optionsInview","connectItems","connectQueueItem","connectItem","rootMargin","threshold","obProgress","IntersectionObserver","es","isIntersecting","obIntersection","obInview","removedObject","removeAttribute","newWW","newWH","handleRemovedElement","removeId","handleAddedElement","MutationObserver","mutations","mutation","removedNodes","removedNode","nodeType","Node","ELEMENT_NODE","childElement","addedNodes","addedNode","attributes","childList","subtree","transformContainer","b","scrollWidth","scrollHeight","clientWidth","clientHeight"],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://StringTune/webpack/universalModuleDefinition","webpack://StringTune/webpack/bootstrap","webpack://StringTune/webpack/runtime/define property getters","webpack://StringTune/webpack/runtime/hasOwnProperty shorthand","webpack://StringTune/webpack/runtime/make namespace object","webpack://StringTune/./src/StringModule.ts","webpack://StringTune/./src/Loading/Modules/StringLazy.ts","webpack://StringTune/./src/Loading/Modules/StringLoading.ts","webpack://StringTune/./src/Loading/Modules/StringVideoAutoplay.ts","webpack://StringTune/./src/Mouse/Modules/StringCursor.ts","webpack://StringTune/./src/Mouse/Modules/StringMagnetic.ts","webpack://StringTune/./src/Utils/StringLerpCalc.ts","webpack://StringTune/./src/Mouse/StringVirtualCursor.ts","webpack://StringTune/./src/Objects/StringObject.ts","webpack://StringTune/./src/Screen/StringResponsive.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarHorizontal.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbarVertical.ts","webpack://StringTune/./src/Scroll/Modules/Scrollbar/StringScrollbar.ts","webpack://StringTune/./src/Scroll/Modules/StringAnchor.ts","webpack://StringTune/./src/Scroll/Modules/StringGlide.ts","webpack://StringTune/./src/Scroll/Modules/StringLerp.ts","webpack://StringTune/./src/Scroll/Modules/StringParallax.ts","webpack://StringTune/./src/Scroll/Modules/StringProgress.ts","webpack://StringTune/./src/Scroll/Types/StringScroll.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDefault.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDisable.ts","webpack://StringTune/./src/Scroll/Types/StringScrollSmooth.ts","webpack://StringTune/./src/Scroll/Types/StringTypeSettings.ts","webpack://StringTune/./src/Split/Modules/StringSplit.ts","webpack://StringTune/./src/StringFPS.ts","webpack://StringTune/./src/Tracker/StringDelayLerpTracker.ts","webpack://StringTune/./src/Tracker/StringFPSTracker.ts","webpack://StringTune/./src/Tracker/StringLerpTracker.ts","webpack://StringTune/./src/Tracker/StringPositionTracker.ts","webpack://StringTune/./src/Utils/StringAttribute.ts","webpack://StringTune/./src/Utils/StringBoundingClientRect.ts","webpack://StringTune/./src/Utils/StringData.ts","webpack://StringTune/./src/Utils/StringEvent.ts","webpack://StringTune/./src/Utils/StringParser.ts","webpack://StringTune/./src/Utils/StringPosition.ts","webpack://StringTune/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"StringTune\"] = factory();\n\telse\n\t\troot[\"StringTune\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { IStringModule } from './IStringModule';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringFPS } from './StringFPS';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerpCalc } from './Utils/StringLerpCalc';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nexport class StringModule implements IStringModule {\r\n lerp: StringLerpCalc;\r\n attribute: StringAttribute;\r\n boundingClientRect: StringBoundingClientRect;\r\n position: StringPosition;\r\n events: StringEvent;\r\n data: StringData;\r\n virtualCursor: StringVirtualCursor;\r\n loop: StringFPS;\r\n settings: any = null;\r\n protected objectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected objects: Array<StringObject> = new Array<StringObject>();\r\n protected htmlKey: string = '';\r\n protected _type: number = 1;\r\n public get type() {\r\n return this._type;\r\n }\r\n constructor(visitor: any, settings: any = null) {\r\n this.data = visitor.data;\r\n this.lerp = visitor.lerp;\r\n this.attribute = visitor.attribute;\r\n this.boundingClientRect = visitor.boundingClientRect;\r\n this.position = visitor.position;\r\n this.virtualCursor = visitor.virtualCursor;\r\n this.events = visitor.events;\r\n this.loop = visitor.loop;\r\n this.settings = settings;\r\n }\r\n initObject(object: StringObject, el: HTMLElement): void {}\r\n onScrollStart(): void { }\r\n onScrollStop(): void { }\r\n onChangeDirection(): void { }\r\n \r\n destructor() { }\r\n \r\n onChangeScrollParams(): void {}\r\n\r\n tryConnect(object: StringObject): boolean {\r\n const stringModuleKeys = this.attribute.process(object.el, 'string', '').split('|');\r\n return stringModuleKeys.includes(this.htmlKey);\r\n}\r\n connect(object: StringObject) {\r\n object.connect(this);\r\n this.onConnect(object);\r\n }\r\n addObject(id: string, object: StringObject) {\r\n this.objectsMap.set(id, object);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n removeObject(id: string) {\r\n this.objectsMap.delete(id);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n\r\n onStart(): void {}\r\n onUpdate( data: StringData): void {}\r\n onResize(): void {}\r\n onConnect(object: StringObject): void {}\r\n onRebuild(): void {}\r\n onScroll(data: StringData): void {}\r\n onMouseMove(e: MouseEvent): void {}\r\n onWheel(e: WheelEvent): void {}\r\n onChangeDevice(): void {}\r\n onChangeScrollDirection(): void {}\r\n onMutationObserver(added: NodeList, removed: NodeList): void {}\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\nexport class StringLazy extends StringModule {\r\n private isStartLoaded: boolean = false\r\n private imageLoadingCount: number = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'lazy';\r\n }\r\n\r\n onStart(): void {\r\n const imagesEls = document.querySelectorAll('img[string-lazy]');\r\n imagesEls.forEach((element: any) => {\r\n this.load(element)\r\n });\r\n this.isStartLoaded = true\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n this.imageLoadingCount++\r\n if (this.isStartLoaded) {\r\n let element: any = object.el \r\n this.load(element)\r\n }\r\n }\r\n\r\n private load(element: any) {\r\n this.getImageSize(element, element.getAttribute('string-lazy'));\r\n element.classList.add(`lazyLoad`);\r\n element.src = element.getAttribute('string-lazy') as any;\r\n element.addEventListener('load', () => {\r\n element.classList.add(`-loaded`);\r\n \r\n });\r\n }\r\n\r\n private getImageSize(element: HTMLElement, url: string) {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = () => {\r\n if (xhr.status === 206 || xhr.status === 200) {\r\n const buffer = xhr.response;\r\n const blob = new Blob([buffer]);\r\n const img = new Image();\r\n img.onload = () => {\r\n element.style.aspectRatio = `${img.width} / ${img.height}`;\r\n resolve({ width: img.width, height: img.height });\r\n URL.revokeObjectURL(img.src);\r\n this.imageLoadingCount--\r\n if (this.imageLoadingCount <= 0) {\r\n this.events.emit('all-image-loaded', null)\r\n this.imageLoadingCount = 0\r\n }\r\n };\r\n img.onerror = () => {\r\n reject(new Error('Failed to load image'));\r\n };\r\n img.src = URL.createObjectURL(blob);\r\n } else {\r\n reject(new Error('Failed to load image'));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('Network error'));\r\n };\r\n xhr.setRequestHeader('Range', 'bytes=0-');\r\n xhr.send();\r\n });\r\n }\r\n}\r\n","import { StringModule } from \"../../StringModule\";\r\nimport { StringData } from \"../../Utils/StringData\";\r\n\r\n\r\nexport class StringLoading extends StringModule{\r\n loadingTimeout: number = 0\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor)\r\n this._type = 2\r\n\r\n if (settings != null) {\r\n if (settings.timeout != null) {\r\n this.loadingTimeout = settings.timeout\r\n }\r\n }\r\n }\r\n onStart(): void {\r\n setTimeout(() => {\r\n const htmlElement = document.documentElement;\r\n htmlElement.classList.add('-loaded');\r\n }, this.loadingTimeout);\r\n \r\n }\r\n}","import { StringObject } from \"../../Objects/StringObject\";\r\nimport { StringModule } from \"../../StringModule\";\r\n\r\nexport class StringVideoAutoplay extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = \"autoplay\";\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const videoSrc = this.attribute.process(videoElement, \"string-src\", \"\");\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (videoElement.tagName.toLowerCase() === \"video\" && videoSrc && started == false) {\r\n videoElement.setAttribute(\"muted\", \"muted\");\r\n videoElement.setAttribute(\"playsinline\", \"\");\r\n videoElement.setAttribute(\"loop\", \"\");\r\n videoElement.setAttribute(\"autoplay\", \"\");\r\n videoElement.src = videoSrc;\r\n videoElement.muted = true;\r\n videoElement.addEventListener(\"canplaythrough\", () => {\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (started == false) {\r\n this.tryPlay(object, videoElement); \r\n }\r\n }, { once: true });\r\n videoElement.load();\r\n } else {\r\n console.warn(\r\n \"StringVideoAutoplay: Element is not a <video> tag or string-src is missing.\",\r\n object.el\r\n );\r\n }\r\n }\r\n\r\n private tryPlay(object: StringObject, element: HTMLVideoElement) {\r\n element.play().catch((err) => {\r\n console.warn(\"Autoplay failed:\", err);\r\n object.started = false;\r\n }).then(() => {\r\n object.started = true;\r\n element.setAttribute(`string-started`, '')\r\n });\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringCursor extends StringModule {\r\n private oldX = 0;\r\n private oldY = 0;\r\n protected enterObjectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected enterObjects: Array<StringObject> = new Array<StringObject>();\r\n cursor: any;\r\n cursorContent: any;\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor, settings);\r\n this.htmlKey = 'cursor';\r\n this.cursor = document.querySelector('[string-cursor]') as HTMLElement;\r\n this.cursorContent = document.querySelector('[string-cursor-content]') as HTMLElement;\r\n\r\n }\r\n\r\n onStart(): void {\r\n if (this.settings != null) {\r\n if (this.settings['string-lerp-cursor'] != null) {\r\n this.virtualCursor.mouseLerp = this.settings['string-lerp-cursor'] / 2\r\n }\r\n \r\n }\r\n }\r\n\r\n initObject(object: StringObject, el: HTMLElement): void {\r\n object.lerp = this.attribute.process(el, `string-lerp`, .2);\r\n if (this.settings != null) {\r\n if (this.settings['string-lerp-target'] != null) {\r\n object.lerp = this.attribute.process(el, `string-lerp`, this.settings['string-lerp-target']) / 2;\r\n }\r\n }\r\n }\r\n\r\n\r\n onUpdate(data: StringData): void {\r\n if (this.virtualCursor.smoothX != this.oldX || this.virtualCursor.smoothY != this.oldY) {\r\n let cursorData = {\r\n lerpX: this.virtualCursor.lerpX,\r\n lerpY: this.virtualCursor.lerpY,\r\n x: this.virtualCursor.smoothX,\r\n y: this.virtualCursor.smoothY,\r\n };\r\n this.events.emit('cursor', cursorData);\r\n this.cursor.style.setProperty('--x', this.virtualCursor.smoothX);\r\n this.cursor.style.setProperty('--y', this.virtualCursor.smoothY);\r\n this.oldX = this.virtualCursor.smoothX;\r\n this.oldY = this.virtualCursor.smoothY;\r\n } else {\r\n \r\n }\r\n this.cursor.style.setProperty('--x-lerp', this.virtualCursor.lerpX.toFixed(2));\r\n this.cursor.style.setProperty('--y-lerp', this.virtualCursor.lerpY.toFixed(2));\r\n\r\n\r\n\r\n this.objects.forEach((object) => {\r\n if (object.isMouseOver) {\r\n let rect = object.el.getBoundingClientRect();\r\n const elementX = this.virtualCursor.x - rect.left;\r\n const elementY = this.virtualCursor.y - rect.top;\r\n const distance = Math.sqrt(Math.pow(object.mousePixelFloatX - elementX, 2) + Math.pow(object.mousePixelFloatY - elementY, 2));\r\n if (distance > 0.25) {\r\n if (object.isMouseMove == false) {\r\n object.isMouseMove = true\r\n object.mousePixelFloatX = elementX;\r\n object.mousePixelFloatY = elementY;\r\n this.events.emit(`mousemove_start_${object.id}`, null)\r\n }\r\n let lerpX = this.lerp.process(object.mousePixelFloatX, elementX, object.lerp);\r\n let lerpY = this.lerp.process(object.mousePixelFloatY, elementY, object.lerp);\r\n object.mousePixelFloatX = object.mousePixelFloatX + lerpX\r\n object.mousePixelFloatY = object.mousePixelFloatY + lerpY\r\n const offsetX = this.calculateOffset(object.alignment, object.mousePixelFloatX, rect.width);\r\n const offsetY = this.calculateOffset(object.alignment, object.mousePixelFloatY, rect.height);\r\n object.mouseX = offsetX;\r\n object.mouseY = offsetY;\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n this.events.emit(`mousemove_${object.id}`, {\r\n x: object.mouseX,\r\n y: object.mouseY,\r\n })\r\n this.events.emit(`mousemove_pixel_${object.id}`, {\r\n x: object.mousePixelFloatX,\r\n y: object.mousePixelFloatY,\r\n })\r\n } else {\r\n object.mousePixelFloatX = elementX;\r\n object.mousePixelFloatY = elementY;\r\n this.events.emit(`mousemove_end_${object.id}`, null);\r\n }\r\n } else {\r\n if (object.mouseX != 0 || object.mouseY != 0) {\r\n object.isMouseMove = false;\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', object.halfWidth, rect.width);\r\n const offsetY = this.calculateOffset('center', object.halfHeight, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n if (object.mouseX < 1 && object.mouseY < 1) {\r\n object.mouseX = 0\r\n object.mouseY = 0\r\n object.mousePixelFloatX = 0\r\n object.mousePixelFloatY = 0\r\n }\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n }\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n\r\n let onMouseEnterEventBind = () => {\r\n element.addEventListener('mousemove', onMouseMoveEventBind);\r\n element.addEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseOver = true;\r\n \r\n if (object.cursorTargetClass!= null && object.cursorTargetClass.length > 0) {\r\n this.cursor.classList.add(object.cursorTargetClass)\r\n this.cursorContent.classList.add(object.cursorTargetClass)\r\n }\r\n\r\n this.cursor.classList.add('-showing');\r\n this.cursorContent.classList.add('-showing');\r\n \r\n setTimeout(() => {\r\n this.cursor.classList.remove('-showing');\r\n this.cursorContent.classList.remove('-showing');\r\n this.cursor.classList.add('-show');\r\n this.cursorContent.classList.add('-show');\r\n }, 1200);\r\n \r\n \r\n };\r\n let onMouseMoveEventBind = (event: MouseEvent) => {};\r\n let onMouseLeaveEventBind = () => {\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseOver = false;\r\n if (object.cursorTargetClass != null && object.cursorTargetClass.length > 0) {\r\n this.cursor.classList.remove(object.cursorTargetClass)\r\n this.cursorContent.classList.remove(object.cursorTargetClass)\r\n }\r\n this.cursorContent.classList.remove('-showing');\r\n this.cursor.classList.remove('-showing');\r\n this.cursorContent.classList.remove('-show');\r\n this.cursor.classList.remove('-show');\r\n\r\n };\r\n\r\n object.onEnter = () => {\r\n element.addEventListener('mouseenter', onMouseEnterEventBind);\r\n };\r\n object.onLeave = () => {\r\n element.removeEventListener('mouseenter', onMouseEnterEventBind);\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n };\r\n }\r\n\r\n private setMouseCoordinates(object: StringObject, x: number, y: number) {\r\n if (object.selfDisable == false) {\r\n object.el.style.setProperty('--x', x.toFixed(2));\r\n object.el.style.setProperty('--y', y.toFixed(2));\r\n }\r\n object.connects.forEach((element) => {\r\n element.style.setProperty('--x', x.toFixed(2));\r\n element.style.setProperty('--y', y.toFixed(2));\r\n });\r\n }\r\n\r\n private calculateOffset(alignment: string, mousePos: number, size: number): number {\r\n switch (alignment) {\r\n case 'start':\r\n return mousePos / size;\r\n case 'end':\r\n return (mousePos - size) / size;\r\n case 'center':\r\n default:\r\n return (mousePos - size / 2) / (size / 2);\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringMagnetic extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'magnetic';\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLElement;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-strength'] != null) {\r\n object.strength = this.settings['string-strength'];\r\n }\r\n if (this.settings['string-radius'] != null) {\r\n object.radius = this.settings['string-radius'];\r\n }\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.objects.forEach((object) => {\r\n const element = object.el as HTMLElement;\r\n const rect = element.getBoundingClientRect();\r\n const elementCenterX = rect.left + object.halfWidth;\r\n const elementCenterY = rect.top + object.halfHeight;\r\n const distX = e.clientX - elementCenterX;\r\n const distY = e.clientY - elementCenterY;\r\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\r\n\r\n if (distance < object.radius) {\r\n object.magneticTargetX = distX * object.strength * ((object.radius - distance) / object.radius);\r\n object.magneticTargetY = distY * object.strength * ((object.radius - distance) / object.radius);\r\n object.isMagneting = true;\r\n } else {\r\n object.magneticTargetX = 0;\r\n object.magneticTargetY = 0;\r\n }\r\n });\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n if (object.isMagneting) {\r\n let lerpX = this.lerp.process(object.magneticX, object.magneticTargetX, object.lerp);\r\n let lerpY = this.lerp.process(object.magneticY, object.magneticTargetY, object.lerp);\r\n if (lerpX > -0.01 && lerpX < 0.01) {\r\n lerpX = 0;\r\n object.magneticX = object.magneticTargetX;\r\n }\r\n if (lerpY > -0.01 && lerpY < 0.01) {\r\n lerpY = 0;\r\n object.magneticY = object.magneticTargetY;\r\n }\r\n object.magneticX += lerpX;\r\n object.magneticY += lerpY;\r\n object.el.style.setProperty('--magnetic-x', object.magneticX.toString());\r\n object.el.style.setProperty('--magnetic-y', object.magneticY.toString());\r\n if (object.magneticTargetX == object.magneticX || object.magneticTargetY == object.magneticY) {\r\n object.isMagneting = false;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export class StringLerpCalc {\r\n process(current: number, target: number, amt: number) {\r\n const difference = target - current;\r\n if (Math.abs(difference) < 0.01) {\r\n return difference;\r\n }\r\n return difference * amt;\r\n }\r\n}","import { StringLerpCalc } from \"../Utils/StringLerpCalc\";\r\n\r\nexport class StringVirtualCursor{\r\n private _lF = .1\r\n private lerp = new StringLerpCalc()\r\n \r\n private _x: number = 0\r\n private _y: number = 0\r\n private _lerpX: number = 0\r\n private _lerpY: number = 0\r\n\r\n private targetX: number = 0\r\n private targetY: number = 0\r\n\r\n public get x(){\r\n return this.targetX\r\n }\r\n public get y(){\r\n return this.targetY\r\n }\r\n public get smoothX(){\r\n return this._x\r\n }\r\n public get smoothY(){\r\n return this._y\r\n }\r\n public get lerpX(){\r\n return this._lerpX\r\n }\r\n public get lerpY(){\r\n return this._lerpY\r\n }\r\n\r\n\r\n public set mouseLerp(value: number){\r\n this._lF = value\r\n }\r\n\r\n constructor(mouseLerp: number = .1) {\r\n this._lF = mouseLerp\r\n }\r\n\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.targetX = e.clientX;\r\n this.targetY = e.clientY;\r\n }\r\n onUpdate(): void {\r\n this._lerpX = this.lerp.process(this._x, this.targetX, this._lF)\r\n this._lerpY = this.lerp.process(this._y, this.targetY, this._lF)\r\n \r\n if (Math.abs(this._lerpX) < .1) {\r\n this._x = this.targetX\r\n } else {\r\n this._x = this._x + this._lerpX;\r\n }\r\n if (Math.abs(this._lerpY) < .1) {\r\n this._y = this.targetY\r\n } else {\r\n this._y = this._y + this._lerpY;\r\n }\r\n }\r\n\r\n\r\n}","import { IStringModule } from '../IStringModule';\r\n\r\nconst tS = 'top';\r\nconst bS = 'bottom';\r\nconst lS = 'left';\r\nconst rS = 'right';\r\n\r\nexport class StringObject {\r\n public el: HTMLElement;\r\n public id: string = '';\r\n public oStart: number = 0;\r\n public oEnd: number = 0;\r\n public size: number = 0;\r\n\r\n public startPos: number = 0;\r\n public endPos: number = 0;\r\n public differencePos: number = 0;\r\n public factor: number = 1;\r\n\r\n public inviewTop: number = 1;\r\n public inviewBottom: number = 1;\r\n\r\n public sElPos: string = '';\r\n public sScrPos: string = '';\r\n public eElPos: string = '';\r\n public eScrPos: string = '';\r\n\r\n public halfWidth: number = 0;\r\n public halfHeight: number = 0;\r\n\r\n public start: number = 0;\r\n public end: number = 0;\r\n\r\n public mouseX: number = 0;\r\n public mouseY: number = 0;\r\n\r\n public magneticTargetX: number = 0;\r\n public magneticTargetY: number = 0;\r\n \r\n public magneticX: number = 0;\r\n public magneticY: number = 0;\r\n \r\n public lerp: number = 0;\r\n \r\n\r\n public mousePixelFloatX: number = 0;\r\n public mousePixelFloatY: number = 0;\r\n\r\n public glide: number = 0;\r\n public strength: number = 0;\r\n public weight: number = 0;\r\n public radius: number = 0;\r\n public parallaxPositionStart: number = 0;\r\n public parallaxPositionEnd: number = 0;\r\n\r\n public progress: number = 0\r\n\r\n public connects: Array<HTMLElement> = new Array<HTMLElement>();\r\n public cursorTargetClass: string = \"\";\r\n\r\n public key: string = '--progress';\r\n public alignment: string = 'center';\r\n\r\n public showObserver: IntersectionObserver | null = null;\r\n public progressObserver: IntersectionObserver | null = null;\r\n public inviewObserver: IntersectionObserver | null = null;\r\n\r\n public repeat: boolean = false;\r\n public selfDisable: boolean = false;\r\n public active: boolean = false;\r\n public abs: boolean = false;\r\n public started: boolean = false;\r\n public isMagneting: boolean = false;\r\n \r\n public isMouseOver: boolean = false;\r\n public isMouseMove: boolean = false;\r\n \r\n\r\n public onEnter = () => {};\r\n public onLeave = () => {};\r\n\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n\r\n public anchor: string = \"center center\"\r\n\r\n // === 3D Objects ===\r\n public intensity3D: number = 10\r\n public distance3D: number = 10\r\n public decay3D: number = 1\r\n public type3D: string = \"box\"\r\n public material3D: string = \"basic\"\r\n public color3D: string = \"#ffffff\"\r\n public model3D: string = \"\"\r\n public animations3D: Array<any> = new Array<any>()\r\n\r\n\r\n\r\n\r\n constructor(element: HTMLElement) {\r\n this.el = element;\r\n }\r\n\r\n enter() {\r\n this.active = true;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.addObject(this.id, this);\r\n });\r\n this.onEnter();\r\n }\r\n leave() {\r\n this.active = false;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.removeObject(this.id);\r\n });\r\n this.onLeave();\r\n }\r\n show() {\r\n this.el.classList.add('-inview');\r\n }\r\n hide() {\r\n if (this.repeat) {\r\n this.el.classList.remove('-inview');\r\n }\r\n }\r\n\r\n connect(module: IStringModule) {\r\n this.modules.push(module);\r\n }\r\n\r\n \r\n public calculatePositions(windowSize: number) {\r\n if ((this.sElPos === tS && this.sScrPos === tS) || (this.sElPos === lS && this.sScrPos === lS)) {\r\n this.startPos = this.start - this.oEnd;\r\n } else if ((this.sElPos === tS && this.sScrPos === bS) || (this.sElPos === lS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === tS) || (this.sElPos === rS && this.sScrPos === lS)) {\r\n this.startPos = this.start + this.size - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === bS) || (this.sElPos === rS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd + this.size;\r\n }\r\n\r\n if ((this.eElPos === tS && this.eScrPos === tS) || (this.eElPos === lS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.oStart;\r\n } else if ((this.eElPos === tS && this.eScrPos === bS) || (this.eElPos === lS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === tS) || (this.eElPos === rS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.size + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === bS) || (this.eElPos === rS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.size + this.oStart;\r\n }\r\n this.differencePos = this.endPos - this.startPos;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\n\nenum DeviceType {\n Mobile,\n Tablet,\n Laptop,\n Desktop,\n}\n\ninterface DeviceQueryConfig {\n min?: number;\n max?: number;\n enable?: boolean;\n}\n\ninterface QueryConfig {\n mobile?: DeviceQueryConfig;\n tablet?: DeviceQueryConfig;\n laptop?: DeviceQueryConfig;\n desktop?: DeviceQueryConfig;\n}\n\nclass StringResponsiveQueryDevice {\n public min?: number = undefined;\n public max?: number = undefined;\n public enable: boolean = true;\n\n constructor(config?: DeviceQueryConfig) {\n this.min = config?.min;\n this.max = config?.max;\n this.enable = config?.enable ?? true;\n }\n\n setEnable(enable: boolean = true) {\n this.enable = enable;\n }\n setRange(min?: number, max?: number) {\n this.min = min ?? undefined;\n this.max = max ?? undefined;\n }\n\n get mediaQuery(): string {\n let query = 'screen';\n if (this.min) {\n query += ` and (min-width: ${this.min}px)`;\n }\n if (this.max) {\n query += ` and (max-width: ${this.max}px)`;\n }\n return query;\n }\n}\n\nexport class StringResponsive extends StringModule {\n private queries: { [key in DeviceType]: StringResponsiveQueryDevice } = {\n [DeviceType.Mobile]: new StringResponsiveQueryDevice({ max: 359 }),\n [DeviceType.Tablet]: new StringResponsiveQueryDevice({ min: 360, max: 1079 }),\n [DeviceType.Laptop]: new StringResponsiveQueryDevice({ min: 1080, max: 1365 }),\n [DeviceType.Desktop]: new StringResponsiveQueryDevice({ min: 1366 }),\n };\n\n private matchMedias: { [key in DeviceType]: MediaQueryList } = {\n [DeviceType.Mobile]: window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery),\n [DeviceType.Tablet]: window.matchMedia(this.queries[DeviceType.Tablet].mediaQuery),\n [DeviceType.Laptop]: window.matchMedia(this.queries[DeviceType.Laptop].mediaQuery),\n [DeviceType.Desktop]: window.matchMedia(this.queries[DeviceType.Desktop].mediaQuery),\n };\n\n constructor(visitor: any, settings: any) {\n super(visitor, settings);\n this._type = 2;\n }\n\n onConnect() {}\n\n onStart(): void {\n if (this.settings != null) {\n if (this.settings['settings'] != null) {\n let config = this.settings['settings'];\n if (config.mobile) {\n this.queries[DeviceType.Mobile].enable = true;\n this.queries[DeviceType.Mobile].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Mobile] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Mobile].enable = false;\n }\n\n if (config.tablet) {\n this.queries[DeviceType.Tablet].enable = true;\n this.queries[DeviceType.Tablet].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Tablet] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Tablet].enable = false;\n }\n\n if (config.laptop) {\n this.queries[DeviceType.Laptop].enable = true;\n this.queries[DeviceType.Laptop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Laptop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Laptop].enable = false;\n }\n\n if (config.desktop) {\n this.queries[DeviceType.Desktop].enable = true;\n this.queries[DeviceType.Desktop].setRange(config.mobile.min == undefined ? null : config.mobile.min, config.mobile.max ?? null);\n this.matchMedias[DeviceType.Desktop] = window.matchMedia(this.queries[DeviceType.Mobile].mediaQuery);\n } else {\n this.queries[DeviceType.Desktop].enable = false;\n }\n }\n }\n this.updateElements();\n }\n\n onResize(): void {\n this.updateElements();\n }\n\n private updateElements() {\n const isMobileMedia = this.matchMedias[DeviceType.Mobile].matches && this.queries[DeviceType.Mobile].enable;\n const isTabletMedia = this.matchMedias[DeviceType.Tablet].matches && this.queries[DeviceType.Tablet].enable;\n const isLaptopMedia = this.matchMedias[DeviceType.Laptop].matches && this.queries[DeviceType.Laptop].enable;\n const isDesktopMedia = this.matchMedias[DeviceType.Desktop].matches && this.queries[DeviceType.Desktop].enable;\n\n const elements = document.querySelectorAll('[string-mobile], [string-tablet], [string-laptop], [string-desktop]');\n\n elements.forEach((element: any) => {\n let showElement = false;\n\n if (element.hasAttribute('string-mobile') && isMobileMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-tablet') && isTabletMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-laptop') && isLaptopMedia) {\n showElement = true;\n }\n if (element.hasAttribute('string-desktop') && isDesktopMedia) {\n showElement = true;\n }\n\n if (showElement) {\n element.style.display = null;\n } else {\n element.style.display = `none`;\n }\n });\n }\n}\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarHorizontal {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startY: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psH;\r\n const visibleSize = this.data.wS;\r\n\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentHeight = this.data.psH;\r\n const visibleHeight = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentHeight) * visibleHeight + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startY = e.clientY;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaY = e.clientY - this.startY;\r\n const newScrollPosition = this.startScrollPosition + (deltaY / this.data.wS) * this.data.psH;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarVertical {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startCoordinate: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psW;\r\n const visibleSize = this.data.wS;\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentWidth = this.data.psW;\r\n const visibleWidth = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentWidth) * visibleWidth + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startCoordinate = e.clientX;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaX = e.clientX - this.startCoordinate;\r\n const newScrollPosition = this.startScrollPosition + (deltaX / this.data.wS) * this.data.psW;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringModule } from '../../../StringModule';\r\nimport { StringData } from '../../../Utils/StringData';\r\nimport { StringScrollbarHorizontal } from './StringScrollbarHorizontal';\r\nimport { StringScrollbarVertical } from './StringScrollbarVertical';\r\n\r\nexport class StringScrollbar extends StringModule {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private scrollTimeout: any;\r\n\r\n private isDragging = false;\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n\r\n private mouseUpEventBind: any;\r\n private mouseDownEventBind: any;\r\n private mouseMoveEventBind: any;\r\n\r\n private scrollbarState: any;\r\n private scrollbarStateHorizontal: any;\r\n private scrollbarStateVertical: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n\r\n this.mouseUpEventBind = this.mouseUpEvent.bind(this);\r\n this.mouseDownEventBind = this.mouseDownEvent.bind(this);\r\n this.mouseMoveEventBind = this.mouseMoveEvent.bind(this);\r\n }\r\n destructor(): void {\r\n document.removeEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.removeEventListener('mousedown', this.mouseDownEventBind);\r\n document.removeEventListener('mousemove', this.mouseMoveEventBind);\r\n }\r\n\r\n onStart(): void {\r\n this.createScrollbar();\r\n this.updateThumb();\r\n this.addCustomStyles();\r\n document.addEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.addEventListener('mousedown', this.mouseDownEventBind);\r\n document.addEventListener('mousemove', this.mouseMoveEventBind);\r\n document.documentElement.classList.add(`-no-scrollbar`);\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.updateThumb();\r\n this.showScrollbar();\r\n this.hideScrollbar();\r\n }\r\n\r\n onResize(): void {\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n onChangeScrollParams(): void {\r\n if (this.data.sM == 'disable' && this.scrollMode != 'disable') {\r\n this.scrollbar.classList.add('-hide');\r\n }\r\n if ((this.data.sM == 'smooth' && this.scrollMode == 'disable') || (this.data.sM == 'default' && this.scrollMode == 'disable')) {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n this.scrollMode = this.data.sM;\r\n }\r\n\r\n onChangeScrollDirection() {\r\n if (this.data.sD == 'horizontal') {\r\n this.scrollbarState = this.scrollbarStateVertical;\r\n } else {\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n private addCustomStyles() {\r\n const style = document.createElement('style');\r\n style.textContent = `\r\n ::-webkit-scrollbar {\r\n display: none;\r\n width: 0;\r\n height: 0;\r\n -webkit-appearance: none;\r\n }\r\n body {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n .-without-scrollbar::-webkit-scrollbar {\r\n display: none;\r\n }\r\n .-without-scrollbar {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n\r\n private createScrollbar() {\r\n this.scrollbar = document.createElement('div');\r\n this.scrollbar.classList.add('scrollbar');\r\n this.thumb = document.createElement('div');\r\n this.thumb.classList.add('thumb');\r\n this.scrollbar.appendChild(this.thumb);\r\n document.body.appendChild(this.scrollbar);\r\n\r\n this.scrollbarStateHorizontal = new StringScrollbarHorizontal(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarStateVertical = new StringScrollbarVertical(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n\r\n private updateThumb() {\r\n this.scrollbarState.updateThumb();\r\n }\r\n\r\n private mouseDownEvent(e: MouseEvent) {\r\n this.isDragging = true;\r\n this.scrollbarState.mouseDownEvent(e);\r\n document.body.style.userSelect = 'none';\r\n this.scrollbar.classList.add('-touch');\r\n }\r\n\r\n private mouseMoveEvent(e: MouseEvent) {\r\n if (!this.isDragging) return;\r\n\r\n this.scrollbarState.mouseMoveEvent(e);\r\n }\r\n\r\n private mouseUpEvent() {\r\n this.isDragging = false;\r\n document.body.style.userSelect = '';\r\n this.hideScrollbar();\r\n this.scrollbar.classList.remove('-touch');\r\n }\r\n\r\n private showScrollbar() {\r\n this.scrollbar.classList.add('-scroll');\r\n }\r\n\r\n private hideScrollbar() {\r\n if (this.scrollTimeout) {\r\n clearTimeout(this.scrollTimeout);\r\n }\r\n this.scrollTimeout = setTimeout(() => {\r\n this.scrollbar.classList.remove('-scroll');\r\n }, 1000);\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringAnchor extends StringModule {\r\n oldLerp: number = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'anchor';\r\n }\r\n initObject(object: StringObject, el: any): void {\r\n object.anchor = this.attribute.process(el, `string-anchor`, \"center center\");\r\n }\r\n onConnect(object: StringObject) {\r\n if (object.anchor == null || object.anchor == \"\") {\r\n object.anchor = \"center center\"\r\n }\r\n const p = object.anchor.split(' ');\r\n const x = this.parseOrig(p[0]);\r\n const y = this.parseOrig(p[1] || p[0]);\r\n object.el.style.transformOrigin = `${x} ${y}`;\r\n }\r\n\r\n private parseOrig(part: string) {\r\n part = part.trim();\r\n if (part.startsWith('random')) {\r\n const o = part.slice(7, -1).split(',').map(s => s.trim());\r\n const c = Math.floor(Math.random() * o.length);\r\n return o[c];\r\n } else {\r\n return part;\r\n }\r\n }\r\n}\r\n\r\n","import { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringGlide extends StringModule {\r\n private previousLerp: number = 0;\r\n private displacement: number = 0;\r\n private acceleration: number = 0;\r\n private velocityMultiplier: number = 0.00125;\r\n private isInitialScroll: boolean = true;\r\n\r\n private baseVelocityMultiplier: number = 0.00125;\r\n private reducedVelocityMultiplier: number = this.baseVelocityMultiplier / 20;\r\n private negativeVelocityMultiplier: number = -0.0001;\r\n\r\n private readonly ACCELERATION_STEP: number = 0.05;\r\n private readonly MIN_DISPLACEMENT: number = 0.01;\r\n private readonly MAX_DISPLACEMENT: number = 1;\r\n private readonly MIN_VELOCITY: number = -1;\r\n private readonly MAX_VELOCITY: number = 1;\r\n\r\n private maxDisplacementValue: number = 0;\r\n\r\n\r\n private setupItem = (object: any) => {\r\n const transformCompute = `translate3d(0, ${-this.data.dV * this.maxDisplacementValue * object.glide}px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n }\r\n\r\n private onUpdateDesktopEvent = ()=>{\r\n for (let i = 0; i < this.objects.length; i++) {\r\n let object = this.objects[i]\r\n this.setupItem(object)\r\n }\r\n }\r\n private onUpdateMobileEvent = ()=>{}\r\n private onUpdateEvent = this.onUpdateDesktopEvent\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor);\r\n this.htmlKey = 'glide';\r\n\r\n if (settings) {\r\n const { baseVelocityMultiplier, reducedVelocityMultiplier, negativeVelocityMultiplier } = settings;\r\n this.baseVelocityMultiplier = baseVelocityMultiplier ?? this.baseVelocityMultiplier;\r\n this.reducedVelocityMultiplier = reducedVelocityMultiplier ?? this.reducedVelocityMultiplier;\r\n this.negativeVelocityMultiplier = negativeVelocityMultiplier ?? this.negativeVelocityMultiplier;\r\n }\r\n }\r\n\r\n private calcExpanderFactor(isDirectionUp: boolean): void {\r\n const isConditionMet = isDirectionUp\r\n ? this.data.v < this.previousLerp\r\n : this.data.v > this.previousLerp;\r\n\r\n this.velocityMultiplier = isConditionMet\r\n ? (this.isInitialScroll ? this.baseVelocityMultiplier : this.reducedVelocityMultiplier)\r\n : this.negativeVelocityMultiplier;\r\n\r\n if (!isConditionMet) {\r\n this.isInitialScroll = false;\r\n }\r\n }\r\n onStart(): void {\r\n this.maxDisplacementValue = this.data.wS * 0.1\r\n }\r\n\r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.maxDisplacementValue = this.data.wS * 0.1\r\n this.onUpdateEvent = this.onUpdateDesktopEvent\r\n } else {\r\n this.onUpdateEvent = this.onUpdateMobileEvent \r\n this.resetState();\r\n this.objects.forEach((object) => {\r\n this.setupItem(object);\r\n })\r\n }\r\n }\r\n\r\n private resetState(): void {\r\n this.displacement = 0;\r\n this.acceleration = 0;\r\n this.isInitialScroll = true;\r\n this.velocityMultiplier = this.baseVelocityMultiplier;\r\n }\r\n\r\n onScrollStart(): void {\r\n this.resetState();\r\n }\r\n\r\n onScrollStop(): void {\r\n this.resetState();\r\n this.previousLerp = 0;\r\n document.documentElement.style.setProperty('--glide', '0');\r\n for (let i = 0; i < this.objects.length; i++) {\r\n let object = this.objects[i]\r\n const transformCompute = `translate3d(0, 0px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n }\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.calcExpanderFactor(this.data.sDB === false);\r\n this.acceleration = Math.min(this.MAX_DISPLACEMENT, this.acceleration + this.ACCELERATION_STEP);\r\n this.displacement = Math.max(this.MIN_DISPLACEMENT, Math.min(this.MAX_DISPLACEMENT, this.displacement + this.velocityMultiplier));\r\n this.data.dV = Math.min(this.MAX_VELOCITY, Math.max(this.MIN_VELOCITY, this.data.v * this.displacement * this.acceleration));\r\n document.documentElement.style.setProperty('--glide', this.data.dV.toString());\r\n this.previousLerp = this.data.v;\r\n this.onUpdateEvent()\r\n }\r\n}","import { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringLerp extends StringModule {\r\n oldLerp: number = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n onScrollStop(): void {\r\n document.documentElement.style.setProperty('--lerp', \"0\");\r\n }\r\n onScroll(data: StringData): void {\r\n document.documentElement.style.setProperty('--lerp', this.data.v.toString());\r\n this.oldLerp = data.v\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringParallax extends StringModule {\r\n private setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n\r\n private onScrollDesktopEvent = () => {\r\n this.objects.forEach((object) => {\r\n let progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\r\n object.el.style.setProperty(object.key, progress.toString());\r\n this.setupParallax(object, progress);\r\n });\r\n }\r\n private onScrollMobileEvent = () => {}\r\n private onScrollEvent = this.onScrollDesktopEvent\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'parallax';\r\n }\r\n\r\n onConnect(object: StringObject): void {\r\n if (this.settings != null) {\r\n if (this.settings['string-parallax-bias'] != null) {\r\n let parallaxPosition = this.attribute.process(object.el, 'string-parallax-bias', this.settings['string-parallax-bias']);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n }\r\n if (this.settings['string-parallax'] != null) {\r\n object.factor = this.settings['string-parallax'];\r\n }\r\n }\r\n \r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.onScrollEvent()\r\n }\r\n onChangeScrollDirection(): void {\r\n if (this.data.sD == 'vertical') {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n } else {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(${\r\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\r\n }px, 0, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n }\r\n }\r\n\r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.onScrollEvent = this.onScrollDesktopEvent\r\n } else {\r\n this.onScrollEvent = this.onScrollMobileEvent \r\n this.objects.forEach((object) => {\r\n this.setupParallax(object, .5);\r\n })\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringProgress extends StringModule {\r\n private oldLerp = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'progress';\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n this.setUpObject(object);\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n object.onEnter = () => {\r\n this.setUpObject(object);\r\n };\r\n }\r\n\r\n private setUpObject(object: StringObject) {\r\n const progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\r\n \r\n if (object.progress !== progress) {\r\n object.progress = progress;\r\n this.applyProgress(object);\r\n }\r\n }\r\n\r\n private applyProgress(object: StringObject) {\r\n const progressStr = object.progress.toString();\r\n\r\n this.events.emit(`progress_${object.id}`, object.progress);\r\n object.el.style.setProperty(object.key, progressStr);\r\n\r\n if (object.connects.length > 0) {\r\n object.connects.forEach((element) => {\r\n element.style.setProperty(object.key, progressStr);\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import { StringData } from '../../Utils/StringData';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScroll {\r\n public data: StringData;\r\n public isProg: boolean = false;\r\n public isParallaxEnabled: boolean = false;\r\n public name: string = '';\r\n public settings: StringTypeSettings;\r\n public v = 0;\r\n protected vT: number = 0;\r\n protected d: any;\r\n\r\n public onScrollStart = ()=>{}\r\n public onScrollStop = ()=>{}\r\n public onChangeDirection = ()=>{}\r\n\r\n public scrollContainer: any;\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n this.d = document;\r\n this.settings = settings;\r\n this.data = data;\r\n this.scrollContainer = window;\r\n }\r\n\r\n onCalcUpdate: any = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n onUpdate(): void {}\r\n onWheel(e: any): void {}\r\n onScroll(e: any): void {}\r\n\r\n protected _scrollDirection: 'vertical' | 'horizontal' = 'vertical';\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this._scrollDirection = scrollDirection;\r\n if (this._scrollDirection == 'vertical') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n } else if (this._scrollDirection == 'horizontal') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(this.data.c, 0);\r\n };\r\n }\r\n }\r\n}\r\n","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDefault extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'mobile';\r\n }\r\n public onUpdate() {\r\n if (this.data.d!=0) {\r\n let delta = this.data.d * this.settings.speedAccelerate\r\n this.data.d -= delta\r\n this.data.v = delta \r\n\r\n if (Math.abs(this.data.v) < .1) {\r\n this.data.d = 0\r\n this.data.v = 0\r\n this.onScrollStop();\r\n } \r\n }\r\n }\r\n public onScroll(e: any) {\r\n this.data.c = this.d.documentElement.scrollTop;\r\n this.data.t = this.d.documentElement.scrollTop;\r\n }\r\n\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n if (this.data.d == 0) {\r\n this.onScrollStart()\r\n }\r\n let plusDelta = e.deltaY\r\n if (this.data.t == 0) {\r\n this.data.d += Math.max(0, e.deltaY);\r\n }\r\n this.data.d += plusDelta;\r\n }\r\n }\r\n}","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDisable extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'disable';\r\n }\r\n\r\n public onUpdate() {}\r\n\r\n public onWheel(e: any) {\r\n e.preventDefault();\r\n }\r\n\r\n public onScroll(e: any) {\r\n e.preventDefault();\r\n }\r\n}","import { StringData } from '../../Utils/StringData';\r\nimport { StringScroll } from './StringScroll';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nconst SCROLL_DIRECTION = {\r\n FORWARD: 'forward',\r\n BACK: 'back',\r\n} as const;\r\n\r\nconst CLASS_NAMES = {\r\n SCROLL_FORWARD: '-scroll-forward',\r\n SCROLL_BACK: '-scroll-back',\r\n} as const;\r\n\r\nexport class StringScrollSmooth extends StringScroll {\r\n public readonly name: string = 'desktop';\r\n private isScrollbarManipulation = false;\r\n private isBottomScrollDirection = false;\r\n private readonly velocityThreshold = 0.1;\r\n private previousCurrent: number = 0\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n }\r\n\r\n private updateScrollDirection(newDirection: boolean) {\r\n if (this.isBottomScrollDirection === newDirection) return;\r\n\r\n this.isBottomScrollDirection = newDirection;\r\n this.data.sDB = newDirection;\r\n this.onChangeDirection();\r\n\r\n const isForward = newDirection;\r\n document.documentElement.classList.toggle(CLASS_NAMES.SCROLL_FORWARD, isForward);\r\n document.documentElement.classList.toggle(CLASS_NAMES.SCROLL_BACK, !isForward);\r\n }\r\n\r\n private clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n }\r\n\r\n public stopScroll(): void {\r\n this.data.v = 0;\r\n this.data.d = 0;\r\n this.data.t = this.data.c;\r\n this.isProg = false;\r\n \r\n this.onCalcUpdate();\r\n document.documentElement.classList.remove(CLASS_NAMES.SCROLL_BACK, CLASS_NAMES.SCROLL_FORWARD);\r\n \r\n }\r\n\r\n public onUpdate(): void {\r\n if (this.data.d!=0) {\r\n const { data, settings } = this;\r\n let delta = this.data.d * this.settings.speedAccelerate\r\n this.data.t = Math.min(Math.max(0, this.data.t + delta), this.data.bS);\r\n this.data.d -= delta\r\n this.data.v = (this.data.t - this.data.c) * this.settings.speed\r\n\r\n if (this.isScrollbarManipulation) {\r\n this.isScrollbarManipulation = false;\r\n data.c = data.t;\r\n return;\r\n }\r\n\r\n const absVelocity = Math.abs(data.v);\r\n if (absVelocity === 0) return;\r\n if (data.v > 0) {\r\n this.data.c = Math.ceil(data.c + data.v)\r\n this.updateScrollDirection(true);\r\n } else {\r\n this.data.c = Math.floor(data.c + data.v)\r\n this.updateScrollDirection(false);\r\n }\r\n\r\n if (absVelocity < this.velocityThreshold) {\r\n this.stopScroll();\r\n this.onScrollStop();\r\n } else {\r\n this.isProg = true;\r\n if (this.previousCurrent != this.data.c) {\r\n this.previousCurrent = this.data.c\r\n this.onCalcUpdate();\r\n }\r\n \r\n }\r\n }\r\n \r\n }\r\n\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n e.preventDefault();\r\n if (this.data.d == 0) {\r\n this.onScrollStart()\r\n }\r\n let plusDelta = e.deltaY\r\n if (this.data.t == 0) {\r\n this.data.d += Math.max(0, e.deltaY);\r\n }\r\n if (this.data.t == this.data.bS) {\r\n this.data.d += Math.min(0, e.deltaY);\r\n }\r\n this.data.d += plusDelta;\r\n }\r\n }\r\n\r\n public onScroll(e: Event): void {\r\n if (!this.isProg) {\r\n this.isScrollbarManipulation = true;\r\n this.data.t = this.scrollContainer?.scrollTop ?? document.documentElement.scrollTop;\r\n }\r\n }\r\n}","export class StringTypeSettings{\r\n private sC: number = 0.1\r\n private sA: number = 0.25\r\n private mL: number = 1\r\n\r\n public get speed() {\r\n return this.sC\r\n }\r\n public get speedAccelerate() {\r\n return this.sA\r\n }\r\n\r\n public set speedAccelerate(speed: number) {\r\n this.sA = speed\r\n }\r\n public set speed(speed: number) {\r\n this.sC = speed\r\n }\r\n\r\n public get mouseLerp() {\r\n return this.mL\r\n }\r\n public set mouseLerp(mouseLerp: number) {\r\n this.mL = mouseLerp\r\n }\r\n \r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\ninterface ISplitOptions {\r\n line?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n word?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n char?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n charLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n charWord?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n wordLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n}\r\n\r\nexport class StringSplit extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'split';\r\n }\r\n\r\n onStart(): void {}\r\n onResize(): void {\r\n document.querySelectorAll(`[string=\"split\"].-splited`).forEach((element) => {\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n if (!element.classList.contains('-splited')) {\r\n element.classList.add('-splited');\r\n element.setAttribute('string-split-original', element.innerHTML);\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n \r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n }\r\n }\r\n\r\n private parseSplitOptions(attributeValue: string | null): ISplitOptions {\r\n const options: ISplitOptions = {\r\n line: [],\r\n word: [],\r\n char: [],\r\n charLine: [],\r\n charWord: [],\r\n wordLine: [],\r\n };\r\n\r\n if (attributeValue) {\r\n const parts = attributeValue.split('|');\r\n\r\n parts.forEach((part) => {\r\n const match = part.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\r\n\r\n if (match) {\r\n const prefix = match[1] || '';\r\n const option = match[2];\r\n const params = match[4] ? match[4].split(',') : [];\r\n switch (prefix + option) {\r\n case 'char-line':\r\n (options.charLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char-word':\r\n (options.charWord as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word-line':\r\n (options.wordLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'line':\r\n (options.line as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word':\r\n (options.word as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char':\r\n (options.char as any[]).push(this.parseParam(params));\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private parseParam(params: string[]): { align: string; random?: { min: number; max: number }; abs?: boolean } {\r\n const result: { align: string; random?: { min: number; max: number }; abs?: boolean } = { align: 'start' };\r\n\r\n params.forEach((param) => {\r\n if (param === 'abs') {\r\n result.abs = true;\r\n } else if (param.startsWith('random')) {\r\n const match = param.match(/random\\((\\d+),(\\d+)\\)/);\r\n if (match) {\r\n result.random = { min: parseInt(match[1]), max: parseInt(match[2]) };\r\n result.align = 'random';\r\n } else {\r\n result.align = 'random';\r\n }\r\n } else if (['start', 'center', 'end'].includes(param)) {\r\n result.align = param;\r\n } else {\r\n result.align = 'start';\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public split(options: ISplitOptions, elementRoot: any): any {\r\n //let text = elementRoot.innerHTML;\r\n let text = elementRoot.getAttribute('string-split-original');\r\n if (text.length === 0) return '';\r\n\r\n text = this.decodeHtmlEntity(text);\r\n \r\n const element = document.createElement('span');\r\n const words = text.split(/\\s+/);\r\n let globalCharIndex = 0;\r\n let globalWordIndex = 0;\r\n const totalChars = text.replace(/\\s/g, '').length;\r\n\r\n const tempSpan = document.createElement('span');\r\n const compStyles = window.getComputedStyle(elementRoot);\r\n\r\n tempSpan.style.fontFamily = compStyles.fontFamily;\r\n tempSpan.style.fontSize = compStyles.fontSize;\r\n tempSpan.style.letterSpacing = compStyles.letterSpacing;\r\n tempSpan.style.lineHeight = compStyles.lineHeight;\r\n tempSpan.style.fontWeight = compStyles.fontWeight;\r\n tempSpan.classList.add('-s-char');\r\n document.body.appendChild(tempSpan);\r\n\r\n let virtualLines: any[] = [];\r\n let virtualLine: any[] = [];\r\n let currentLineWidth = 0;\r\n words.forEach((word: any, wordIndex: any) => {\r\n tempSpan.textContent = word;\r\n if (word.length > 0) {\r\n tempSpan.textContent += '\\u00a0';\r\n }\r\n\r\n const wordWidth = tempSpan.offsetWidth;\r\n\r\n const virtualWordSpan = {\r\n text: word,\r\n width: wordWidth,\r\n chars: new Array<any>(),\r\n };\r\n const chars = Array.from(word);\r\n chars.forEach((char, charIndex) => {\r\n const virtualCharSpan = {\r\n text: char,\r\n };\r\n\r\n virtualWordSpan.chars.push(virtualCharSpan);\r\n });\r\n if (currentLineWidth + wordWidth > elementRoot.offsetWidth) {\r\n virtualLines.push(virtualLine);\r\n virtualLine = [];\r\n currentLineWidth = 0;\r\n globalCharIndex += virtualLine.length;\r\n }\r\n virtualLine.push(virtualWordSpan);\r\n currentLineWidth += wordWidth;\r\n });\r\n\r\n virtualLines.push(virtualLine);\r\n\r\n let hasLineOptions = false;\r\n if (options.line != null) {\r\n if (options.line.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.wordLine != null) {\r\n if (options.wordLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.charLine != null) {\r\n if (options.charLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n\r\n let addedWordsCount = 0;\r\n if (hasLineOptions) {\r\n // for (let i = 0; i < virtualLines.length; i++) {\r\n // addedWordsCount += virtualLines[i].length;\r\n // }\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n this.appendVirtualLineToDOM(\r\n i,\r\n virtualLines.length,\r\n words.length,\r\n element,\r\n virtualLines[i],\r\n options,\r\n globalCharIndex,\r\n totalChars,\r\n addedWordsCount\r\n );\r\n addedWordsCount += virtualLines[i].length;\r\n }\r\n } else {\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n virtualLines[i].forEach((virtualWordSpan: any, wordIndex: any) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n if ((options.char!=null && options.char?.length > 0) || (options.charWord != null && options.charWord?.length > 0)) {\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n });\r\n } else {\r\n wordSpan.textContent = virtualWordSpan.text;\r\n }\r\n \r\n\r\n this.applyOptions(wordSpan, options.word, globalWordIndex, 'word', wordIndex, words.length);\r\n if (virtualWordSpan.chars.length > 0) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n element.appendChild(wordSpan);\r\n globalWordIndex++;\r\n }\r\n });\r\n }\r\n }\r\n\r\n document.body.removeChild(tempSpan);\r\n return { html: element.innerHTML };\r\n }\r\n\r\n // TODO: remove line - char,word\r\n private appendVirtualLineToDOM(\r\n lineIndex: number,\r\n length: number,\r\n totalWords: number,\r\n element: HTMLSpanElement,\r\n virtualLine: any[],\r\n options: ISplitOptions,\r\n globalCharIndex: number,\r\n totalChars: number,\r\n addedWordsCount: number\r\n ) {\r\n const lineSpan = document.createElement('span');\r\n lineSpan.classList.add('-s-line');\r\n\r\n this.applyOptions(lineSpan, options.line, lineIndex, 'line', 0, length);\r\n\r\n let lineCharIndex = 0;\r\n let globalWordIndex = 0;\r\n let totalLineChars = 0;\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n totalLineChars += virtualWordSpan.text.length;\r\n });\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charLine, lineCharIndex, 'char-line', charIndex, totalLineChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n lineCharIndex++;\r\n });\r\n\r\n this.applyOptions(\r\n wordSpan,\r\n options.word,\r\n addedWordsCount + globalWordIndex,\r\n 'word',\r\n addedWordsCount + globalWordIndex,\r\n totalWords - 1\r\n );\r\n this.applyOptions(wordSpan, options.wordLine, wordIndex, 'word-line', wordIndex, virtualLine.length);\r\n\r\n if (wordIndex < virtualLine.length - 1) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n // +'\\u00a0';\r\n\r\n lineSpan.appendChild(wordSpan);\r\n // if (wordIndex < virtualLine.length - 1) {\r\n // lineSpan.appendChild(this.createSpaceSpan());\r\n // }\r\n globalWordIndex++;\r\n }\r\n });\r\n\r\n element.appendChild(lineSpan);\r\n }\r\n\r\n private applyOptions(\r\n span: HTMLSpanElement,\r\n optionArray: any[] | undefined,\r\n globalIndex: number,\r\n type: string,\r\n localIndex: number,\r\n parentLength: number\r\n ) {\r\n if (optionArray) {\r\n optionArray.forEach((option, optionIndex) => {\r\n let index = this.calculateIndex(option, globalIndex, localIndex, parentLength);\r\n\r\n const variableName = this.generateVariableName(type, option, optionIndex);\r\n span.style.setProperty(variableName, String(index));\r\n });\r\n }\r\n }\r\n\r\n private createSpaceSpan(): HTMLSpanElement {\r\n const spaceSpan = document.createElement('span');\r\n spaceSpan.innerHTML = '\\u00a0';\r\n return spaceSpan;\r\n }\r\n\r\n private decodeHtmlEntity(str: string) {\r\n return str.replace(/&amp;/g, '&');\r\n }\r\n\r\n private calculateIndex(\r\n options: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n globalIndex: number,\r\n localIndex: number,\r\n parentLength: number\r\n ): number {\r\n let index = globalIndex;\r\n if (options.align === 'random') {\r\n if (options.random === undefined) {\r\n options.random = { min: 0, max: parentLength };\r\n }\r\n const min = options.random.min || 0;\r\n const max = options.random.max || parentLength;\r\n index = Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n if (options.align === 'end') {\r\n index = parentLength - index - 1;\r\n } else if (options.align === 'center') {\r\n index = index - Math.floor(parentLength / 2);\r\n }\r\n\r\n if (options.abs) {\r\n index = Math.abs(index);\r\n }\r\n return index;\r\n }\r\n\r\n private generateVariableName(\r\n type: string,\r\n option: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n index: number\r\n ): string {\r\n let variableName = `--${type}`;\r\n if (option.align) {\r\n variableName += `-${option.align}`;\r\n }\r\n return variableName;\r\n }\r\n}\r\n","export class StringFPS{\r\n private isAnimationStarted: boolean = false\r\n private fpsInterval: any\r\n private _now: any\r\n private then: any\r\n private elapsed: any;\r\n private requestAnimationId: number = 0\r\n\r\n public get now() {\r\n return this._now\r\n }\r\n public onFrame = ()=>{}\r\n public start(fps: number) {\r\n if (this.isAnimationStarted) { return }\r\n this.fpsInterval = 1000 / fps;\r\n this.then = Date.now();\r\n this.animate();\r\n this.isAnimationStarted = true\r\n }\r\n public stop() {\r\n if (!this.isAnimationStarted) { return }\r\n cancelAnimationFrame(this.requestAnimationId)\r\n this.isAnimationStarted = false\r\n }\r\n private animate() {\r\n this.requestAnimationId = requestAnimationFrame(() => { this.animate() })\r\n this._now = Date.now();\r\n this.elapsed = this._now - this.then;\r\n if (this.elapsed > this.fpsInterval) {\r\n this.then = this._now - (this.elapsed % this.fpsInterval);\r\n this.onFrame()\r\n }\r\n }\r\n}","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringDelayLerpTracker extends StringModule {\r\n private canvas: any\r\n private context: any\r\n private positionHistory: any\r\n private maxHistory: any\r\n private currentPosition: any\r\n private targetPosition: any\r\n\r\n private canvasHeight = 0\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n\r\n \r\n\r\n \r\n }\r\n\r\n onStart(): void {\r\n this.canvas = document.createElement('canvas');\r\n this.context = this.canvas.getContext('2d');\r\n this.canvas.width = window.innerWidth * .5;\r\n this.canvas.height = window.innerHeight / 15 - 20;\r\n this.canvasHeight = window.innerHeight / 15 - 20;\r\n this.canvas.style.position = 'fixed';\r\n this.canvas.style.bottom = `${window.innerHeight / 20 + 10}px`;\r\n this.canvas.style.left = '50%';\r\n this.canvas.style.transform = 'translateX(-50%)';\r\n this.canvas.style.backgroundColor = '#000000';\r\n this.canvas.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.canvas.style.zIndex = '1000';\r\n document.body.appendChild(this.canvas);\r\n\r\n this.positionHistory = [];\r\n this.maxHistory = this.canvas.width;\r\n this.currentPosition = 0;\r\n this.targetPosition = 0;\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.currentPosition = Math.abs(this.data.dV);\r\n this.positionHistory.push(this.currentPosition);\r\n if (this.positionHistory.length > this.maxHistory) {\r\n this.positionHistory.shift();\r\n }\r\n this.drawGraph();\r\n }\r\n\r\n\r\n drawGraph() {\r\n const ctx = this.context;\r\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n ctx.strokeStyle = '#e0e0e0';\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = 'red';\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n this.positionHistory.forEach((pos: any, index: any) => {\r\n const x = index;\r\n const y = this.canvas.height - pos * this.canvasHeight;\r\n if (index === 0) {\r\n ctx.moveTo(x, y);\r\n } else {\r\n ctx.lineTo(x, y);\r\n }\r\n });\r\n ctx.stroke();\r\n }\r\n\r\n setTargetPosition(position: number) {\r\n this.targetPosition = position;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringFPSTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.right = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-fps', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-fps]::after {\r\n content: 'FPS: ' attr(fps);\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n this.intervalId = setInterval(() => {\r\n this.displayElement.setAttribute('fps', `${this.callCount}`);\r\n this.callCount = 0;\r\n }, 1000);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n clearInterval(this.intervalId);\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringLerpTracker extends StringModule {\r\n private canvas: any\r\n private context: any\r\n private positionHistory: any\r\n private maxHistory: any\r\n private currentPosition: any\r\n private targetPosition: any\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n\r\n \r\n\r\n \r\n }\r\n\r\n onStart(): void {\r\n this.canvas = document.createElement('canvas');\r\n this.context = this.canvas.getContext('2d');\r\n this.canvas.width = window.innerWidth * .5;\r\n this.canvas.height = window.innerHeight / 15 - 20;\r\n this.canvas.style.position = 'fixed';\r\n this.canvas.style.bottom = '10px';\r\n this.canvas.style.left = '50%';\r\n this.canvas.style.transform = 'translateX(-50%)';\r\n this.canvas.style.backgroundColor = '#000000';\r\n this.canvas.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.canvas.style.zIndex = '1000';\r\n document.body.appendChild(this.canvas);\r\n\r\n this.positionHistory = [];\r\n this.maxHistory = this.canvas.width;\r\n this.currentPosition = 0;\r\n this.targetPosition = 0;\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.currentPosition = Math.abs(this.data.v);\r\n this.positionHistory.push(this.currentPosition);\r\n if (this.positionHistory.length > this.maxHistory) {\r\n this.positionHistory.shift();\r\n }\r\n this.drawGraph();\r\n }\r\n\r\n\r\n drawGraph() {\r\n const ctx = this.context;\r\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n ctx.strokeStyle = '#e0e0e0';\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = '#007bff';\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n this.positionHistory.forEach((pos: any, index: any) => {\r\n const x = index;\r\n const y = this.canvas.height - pos / 2;\r\n if (index === 0) {\r\n ctx.moveTo(x, y);\r\n } else {\r\n ctx.lineTo(x, y);\r\n }\r\n });\r\n ctx.stroke();\r\n }\r\n\r\n setTargetPosition(position: number) {\r\n this.targetPosition = position;\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringPositionTracker extends StringModule {\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.left = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-position', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-position]::after {\r\n content: attr(direction) 'Top: ' attr(value) 'px';\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n let dirSymbol = ``;\r\n if (data.c < data.t) {\r\n dirSymbol = `↓`;\r\n }\r\n if (data.c > data.t) {\r\n dirSymbol = `↑`;\r\n }\r\n this.displayElement.setAttribute('direction', dirSymbol);\r\n this.displayElement.setAttribute('value', `${this.data.c}`);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","export class StringAttribute{\r\n process(e: any, n: string, d: any = null) {\r\n return e.getAttribute(n) == null ? d : e.getAttribute(n)\r\n }\r\n}","export class StringBoundingClientRect {\r\n process(e: any) {\r\n return e.getBoundingClientRect();\r\n }\r\n}\r\n","export class StringData {\r\n three: any = null;\r\n\r\n t: number = 0;\r\n c: number = 0;\r\n d: number = 0;\r\n v: number = 0;\r\n dV: number = 0;\r\n sDB: boolean = false;\r\n\r\n bS: number = 0;\r\n cF: number = 1;\r\n wS: number = 0;\r\n hnwS: number = 0;\r\n\r\n psW: number = 0;\r\n psH: number = 0;\r\n\r\n scsW: number = 1;\r\n scsH: number = 1;\r\n sD: 'vertical' | 'horizontal' = 'vertical';\r\n sC: any;\r\n sM: 'smooth' | 'disable' | 'default' = 'smooth';\r\n}\r\n","export class StringEvent{\r\n\r\n private eventsByKey: Map<string, Array<Function>> = new Map<string, Array<Function>>()\r\n private events: Array<Function> = new Array<Function>()\r\n on(id: string, event: Function){\r\n if ( this.eventsByKey.has(id) == false) { \r\n this.eventsByKey.set(id, [])\r\n }\r\n this.eventsByKey.get(id)?.push(event)\r\n this.updateAllEvents()\r\n }\r\n public has(id: string) {\r\n return this.eventsByKey.has(id)\r\n }\r\n public emit(id: string, value: any) {\r\n if (this.eventsByKey.has(id)) {\r\n this.eventsByKey.get(id)?.forEach((event: any) => {\r\n event(value)\r\n });\r\n }\r\n }\r\n public off(id: string, event: Function) {\r\n let ea = this.eventsByKey.get(id)\r\n if (ea!=null) {\r\n this.eventsByKey.set(id, ea.filter((h: any) => h !== event))\r\n }\r\n this.updateAllEvents()\r\n }\r\n public all(value: any) {\r\n this.events.forEach(event => {\r\n event(value)\r\n });\r\n }\r\n private updateAllEvents() {\r\n Array.from(this.eventsByKey.values()).forEach(listOfEvents => {\r\n listOfEvents.forEach(event => {\r\n this.events.push(event)\r\n });\r\n });\r\n }\r\n}","export class StringParser{\r\n public parseSingle(v: string, element: any, wH: any, baseRem: number): number {\r\n let isNegative = v.startsWith('-');\r\n if (isNegative) {\r\n v = v.slice(1);\r\n }\r\n let pV;\r\n if (v === 'selfHeight') {\r\n pV = element.offsetHeight;\r\n } else if (v.endsWith('px')) {\r\n pV = parseFloat(v);\r\n } else if (v.endsWith('%')) {\r\n pV = parseFloat(v) * wH / 100;\r\n } else if (v.endsWith('rem')) {\r\n pV = parseFloat(v) * baseRem;\r\n }\r\n return isNegative ? -pV : pV;\r\n }\r\n}","function nullifyTransforms(el: any) {\r\n let { top, left, width, height } = el.getBoundingClientRect();\r\n let transformArr = parseTransform(el);\r\n if (transformArr.length == 6) {\r\n var t = transformArr;\r\n let det = t[0] * t[3] - t[1] * t[2];\r\n return {\r\n width: width / t[0] == 0 ? 1 : t[0],\r\n height: height / t[3] == 0 ? 1 : t[3],\r\n left: (left * t[3] - top * t[2] + t[2] * t[5] - t[4] * t[3]) / det,\r\n top: (-left * t[1] + top * t[0] + t[4] * t[1] - t[0] * t[5]) / det,\r\n };\r\n } else {\r\n return { top, left, width, height };\r\n }\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n}\r\n\r\nexport class StringPosition {\r\n process(e: any, container: any = document.body) {\r\n let br;\r\n try {\r\n br = container.getBoundingClientRect();\r\n } catch (error) {\r\n br = document.body.getBoundingClientRect();\r\n }\r\n let er = nullifyTransforms(e);\r\n let o = er.top - br.top;\r\n let oL = er.left - br.left;\r\n return { top: o, left: oL };\r\n }\r\n}\r\n","import { IStringModule } from './IStringModule';\r\nimport { StringLazy } from './Loading/Modules/StringLazy';\r\nimport { StringLoading } from './Loading/Modules/StringLoading';\r\nimport { StringVideoAutoplay } from './Loading/Modules/StringVideoAutoplay';\r\nimport { StringCursor } from './Mouse/Modules/StringCursor';\r\nimport { StringMagnetic } from './Mouse/Modules/StringMagnetic';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringResponsive } from './Screen/StringResponsive';\r\nimport { StringScrollbar } from './Scroll/Modules/Scrollbar/StringScrollbar';\r\nimport { StringAnchor } from './Scroll/Modules/StringAnchor';\r\nimport { StringGlide } from './Scroll/Modules/StringGlide';\r\nimport { StringLerp } from './Scroll/Modules/StringLerp';\r\nimport { StringParallax } from './Scroll/Modules/StringParallax';\r\nimport { StringProgress } from './Scroll/Modules/StringProgress';\r\nimport { StringScroll } from './Scroll/Types/StringScroll';\r\nimport { StringScrollDefault } from './Scroll/Types/StringScrollDefault';\r\nimport { StringScrollDisable } from './Scroll/Types/StringScrollDisable';\r\nimport { StringScrollSmooth } from './Scroll/Types/StringScrollSmooth';\r\nimport { StringTypeSettings } from './Scroll/Types/StringTypeSettings';\r\nimport { StringSplit } from './Split/Modules/StringSplit';\r\nimport { StringFPS } from './StringFPS';\r\nimport { StringModule } from './StringModule';\r\nimport { StringDelayLerpTracker } from './Tracker/StringDelayLerpTracker';\r\nimport { StringFPSTracker } from './Tracker/StringFPSTracker';\r\nimport { StringLerpTracker } from './Tracker/StringLerpTracker';\r\nimport { StringPositionTracker } from './Tracker/StringPositionTracker';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerpCalc } from './Utils/StringLerpCalc';\r\nimport { StringParser } from './Utils/StringParser';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nfunction isTouchDevice() {\r\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n}\r\n\r\nclass StringTune {\r\n private static i: StringTune;\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n private modulesUI: Array<IStringModule> = new Array<IStringModule>();\r\n private events: StringEvent = new StringEvent();\r\n private loop: StringFPS = new StringFPS();\r\n\r\n private onWheelBind: any;\r\n private onScrollBind: any;\r\n private onResizeBind: any;\r\n private onMouseMoveBind: any;\r\n\r\n private wW: number = 0;\r\n private wH: number = 0;\r\n\r\n private root: any;\r\n private window: any;\r\n\r\n private _virtualCursor: StringVirtualCursor = new StringVirtualCursor();\r\n private _lerp: StringLerpCalc = new StringLerpCalc();\r\n private _attribute: StringAttribute = new StringAttribute();\r\n private _boundingClientRect: StringBoundingClientRect = new StringBoundingClientRect();\r\n private _position: StringPosition = new StringPosition();\r\n\r\n private sEn: StringScroll;\r\n private sEnSmooth: StringScrollSmooth;\r\n private sEnDefault: StringScrollDefault;\r\n private sEnDisable: StringScrollDisable;\r\n\r\n private settings: StringTypeSettings;\r\n private data: StringData;\r\n\r\n protected objects: Map<string, StringObject> = new Map<string, StringObject>();\r\n\r\n protected connectQueue: Array<any> = new Array<any>();\r\n\r\n private globalId: number = 1;\r\n\r\n private _parser = new StringParser();\r\n private isStarted: boolean = false\r\n\r\n get scrollDirection() {\r\n return this.data.sD;\r\n }\r\n\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this.data.sD = scrollDirection;\r\n\r\n this.sEn.scrollDirection = scrollDirection;\r\n this.sEnSmooth.scrollDirection = scrollDirection;\r\n this.sEnDefault.scrollDirection = scrollDirection;\r\n this.sEnDisable.scrollDirection = scrollDirection;\r\n\r\n if (scrollDirection == 'horizontal') {\r\n document.documentElement.classList.add('-horizontal');\r\n document.documentElement.classList.remove('-vertical');\r\n } else {\r\n document.documentElement.classList.add('-vertical');\r\n document.documentElement.classList.remove('-horizontal');\r\n }\r\n\r\n this.rebuild();\r\n this.initObjects();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onChangeScrollDirection();\r\n });\r\n }\r\n get speedAccelerate() {\r\n return this.settings.speedAccelerate;\r\n }\r\n set speedAccelerate(speed: number) {\r\n this.settings.speedAccelerate = 0.1 + (0.5 - 0.1) * speed;\r\n }\r\n get speed() {\r\n return this.settings.speed;\r\n }\r\n set speed(speed: number) {\r\n this.settings.speed = speed;\r\n }\r\n\r\n get mouseLerp() {\r\n return this.settings.mouseLerp;\r\n }\r\n set mouseLerp(mouseLerp: number) {\r\n this.settings.mouseLerp = mouseLerp;\r\n }\r\n\r\n get scrollPosition() {\r\n return this.data.c;\r\n }\r\n set scrollPosition(scrollPosition: number) {\r\n this.data.c = scrollPosition;\r\n this.data.t = scrollPosition;\r\n window.scrollTo(0, this.data.c);\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScroll(this.data);\r\n }\r\n \r\n }\r\n set scrollContainer(container: any) {\r\n let isUpdateEvents = this.data.sC != null;\r\n if (isUpdateEvents) {\r\n this.data.sC.removeEventListener('scroll', this.onScrollBind);\r\n this.data.sC.removeEventListener('resize', this.onResizeBind);\r\n }\r\n this.sEn.scrollContainer = container;\r\n this.sEnSmooth.scrollContainer = container;\r\n this.sEnDefault.scrollContainer = container;\r\n this.sEnDisable.scrollContainer = container;\r\n this.data.sC = container;\r\n if (isUpdateEvents) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n }\r\n this.rebuild();\r\n this.initObjects();\r\n }\r\n\r\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n private mMode: 'disable' | 'default' = 'default';\r\n set scrollMobileMode(mobileMode: 'disable' | 'default') {\r\n this.mMode = mobileMode;\r\n this.updateModeParams();\r\n }\r\n private dMode: 'smooth' | 'disable' | 'default' = 'smooth';\r\n set scrollDesktopMode(desktopMode: 'smooth' | 'disable' | 'default') {\r\n this.dMode = desktopMode;\r\n this.updateModeParams();\r\n }\r\n private updateModeParams() {\r\n if (this.window.innerWidth < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n switch (this.scrollMode) {\r\n case 'disable':\r\n this.data.sM = 'disable';\r\n this.sEn = this.sEnDisable;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'hidden';\r\n break;\r\n case 'default':\r\n this.data.sM = 'default';\r\n this.sEn = this.sEnDefault;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n case 'smooth':\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n default:\r\n this.data.sM = 'smooth';\r\n this.sEn = this.sEnSmooth;\r\n this.onChangeScrollParams();\r\n document.documentElement.style.overflow = 'auto';\r\n break;\r\n }\r\n }\r\n\r\n private constructor() {\r\n this.root = document.body;\r\n this.window = window;\r\n\r\n this.settings = new StringTypeSettings();\r\n this.data = new StringData();\r\n\r\n this._virtualCursor.mouseLerp = this.mouseLerp\r\n \r\n\r\n this.sEnSmooth = new StringScrollSmooth(document, this.settings, this.data);\r\n this.sEnDefault = new StringScrollDefault(document, this.settings, this.data);\r\n this.sEnDisable = new StringScrollDisable(document, this.settings, this.data);\r\n\r\n this.sEnSmooth.onScrollStop = this.onScrollStop.bind(this);\r\n this.sEnDefault.onScrollStop = this.onScrollStop.bind(this);\r\n this.sEnDisable.onScrollStop = this.onScrollStop.bind(this);\r\n\r\n this.sEnSmooth.onChangeDirection = this.onChangeDirection.bind(this);\r\n this.sEnDefault.onChangeDirection = this.onChangeDirection.bind(this);\r\n this.sEnDisable.onChangeDirection = this.onChangeDirection.bind(this);\r\n\r\n this.sEnSmooth.onScrollStart = this.onScrollStart.bind(this);\r\n this.sEnDefault.onScrollStart = this.onScrollStart.bind(this);\r\n this.sEnDisable.onScrollStart = this.onScrollStart.bind(this);\r\n\r\n this.sEn = this.sEnSmooth;\r\n this.scrollContainer = window;\r\n this.data.sC = this.window;\r\n\r\n this.data.sD = 'vertical';\r\n document.documentElement.classList.add('-vertical');\r\n\r\n this.onWheelBind = this.onWheelEvent.bind(this);\r\n this.onScrollBind = this.onScrollEvent.bind(this);\r\n this.onResizeBind = this.onResize.bind(this);\r\n this.onMouseMoveBind = this.onMouseMoveEvent.bind(this);\r\n const observer = new ResizeObserver(() => {\r\n this.onResize()\r\n });\r\n\r\n observer.observe(document.documentElement);\r\n this.loop.onFrame = () => {\r\n this.onUpdateEvent();\r\n };\r\n this.rebuild();\r\n\r\n this.on('lazy-loaded', ()=>{\r\n this.rebuild();\r\n })\r\n }\r\n\r\n public static getInstance(): StringTune {\r\n if (!StringTune.i) {\r\n StringTune.i = new StringTune();\r\n }\r\n return StringTune.i;\r\n }\r\n\r\n public reuse<T>(type: new (...args: any[]) => T): T | undefined {\r\n const foundModule = this.modules.find((module: any) => module instanceof type);\r\n return foundModule as T | undefined;\r\n }\r\n\r\n public use(objectClass: typeof StringModule, settings: any = null) {\r\n const module = new objectClass(\r\n {\r\n data: this.data,\r\n lerp: this._lerp,\r\n attribute: this._attribute,\r\n boundingClientRect: this._boundingClientRect,\r\n position: this._position,\r\n virtualCursor: this._virtualCursor,\r\n events: this.events,\r\n loop: this.loop,\r\n },\r\n settings\r\n );\r\n\r\n if (module.type == 1) {\r\n this.modules.push(module);\r\n }\r\n if (module.type == 2) {\r\n this.modulesUI.push(module);\r\n }\r\n }\r\n public start(fps: number) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n\r\n this.root.addEventListener('wheel', this.onWheelBind, { passive: false });\r\n this.root.addEventListener('mousemove', this.onMouseMoveBind);\r\n\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n Array.from(this.objects.values()).forEach((object) => {\r\n this.setupObject(object.el, object);\r\n });\r\n });\r\n resizeObserver.observe(document.body);\r\n\r\n this.loop.start(fps);\r\n document.documentElement.classList.add('-string');\r\n \r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onStart();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onStart();\r\n }\r\n\r\n this.initObjects();\r\n this.initMutationObserver();\r\n this.isStarted = true\r\n this.events.emit(`start`, null);\r\n }\r\n\r\n private onChangeScrollParams() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onChangeScrollParams();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onChangeScrollParams();\r\n }\r\n }\r\n\r\n private initObjects() {\r\n document.querySelectorAll('[string]').forEach((element) => {\r\n this.addObject(element as any);\r\n });\r\n document.querySelectorAll('[string-copy-from]').forEach((element) => {\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null && this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n }\r\n });\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n module.onScroll(this.data);\r\n module.onUpdate(this.data);\r\n });\r\n }\r\n\r\n public destroy() {\r\n this.window.removeEventListener('scroll', this.onScrollBind);\r\n this.root.removeEventListener('wheel', this.onScrollBind);\r\n this.window.removeEventListener('resize', this.onResizeBind);\r\n this.root.removeEventListener('mousemove', this.onMouseMoveBind);\r\n this.loop.stop();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n }\r\n\r\n private eventMap: { [key in 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor' | 'lazy-loaded' | 'update' | 'start' | 'mousemove-pixel' | 'mousemove-start' | 'mousemove-end']: string } = {\r\n 'scroll': 'scroll',\r\n 'progress': 'progress_',\r\n 'intersection': 'intersection_',\r\n 'lerp': 'lerp',\r\n 'inview': 'inview_',\r\n 'cursor': 'cursor',\r\n 'lazy-loaded': 'all-image-loaded',\r\n 'update': 'update',\r\n 'start': 'start',\r\n 'mousemove-pixel': 'mousemove_pixel_',\r\n 'mousemove-start': 'mousemove_start_',\r\n 'mousemove-end': 'mousemove_end_',\r\n};\r\n public on(key: keyof typeof this.eventMap, event: any, id: string = '') {\r\n const eventName = this.eventMap[key] + id;\r\n if (key === 'start' && this.isStarted) {\r\n event();\r\n }\r\n this.events.on(eventName, event);\r\n }\r\n\r\n public off(key: keyof typeof this.eventMap, event: any, id: string = '') {\r\n const eventName = this.eventMap[key] + id;\r\n this.events.off(eventName, event);\r\n }\r\n\r\n private defaultSettings: any = {\r\n stringOffsetStart: '0%',\r\n stringOffsetEnd: '0%',\r\n\r\n stringEnterEl: 'top',\r\n stringExitEl: 'bottom',\r\n stringEnterVp: 'bottom',\r\n stringExitVp: 'top',\r\n\r\n stringInviewTop: '0%',\r\n stringInviewBottom: '0%',\r\n\r\n stringKey: '--progress',\r\n\r\n stringStrength: 0.3,\r\n stringRadius: 150,\r\n stringLerp: 0.2,\r\n stringParallaxBias: 0.0,\r\n stringParallax: 0.2,\r\n };\r\n\r\n public setupSettings(settings: any) {\r\n if (settings['string-offset-top'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-top'];\r\n }\r\n if (settings['string-offset-bottom'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-bottom'];\r\n }\r\n if (settings['string-offset-left'] != null) {\r\n this.defaultSettings.stringOffsetStart = settings['string-offset-left'];\r\n }\r\n if (settings['string-offset-right'] != null) {\r\n this.defaultSettings.stringOffsetEnd = settings['string-offset-right'];\r\n }\r\n\r\n if (settings[`string-inview-top`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-top`];\r\n }\r\n if (settings[`string-inview-left`] != null) {\r\n this.defaultSettings.stringInviewTop = settings[`string-inview-left`];\r\n }\r\n if (settings[`string-inview-bottom`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-bottom'];\r\n }\r\n if (settings[`string-inview-right`] != null) {\r\n this.defaultSettings.stringInviewBottom = settings['string-inview-right'];\r\n }\r\n\r\n if (settings['string-enter-el'] != null) {\r\n this.defaultSettings.stringEnterEl = settings['string-enter-el'];\r\n }\r\n if (settings['string-enter-vp'] != null) {\r\n this.defaultSettings.stringEnterVp = settings['string-enter-vp'];\r\n }\r\n if (settings['string-exit-el'] != null) {\r\n this.defaultSettings.stringExitEl = settings['string-exit-el'];\r\n }\r\n if (settings['string-exit-vp'] != null) {\r\n this.defaultSettings.stringExitVp = settings['string-exit-vp'];\r\n }\r\n if (settings['string-key'] != null) {\r\n this.defaultSettings.stringKey = settings['string-key'];\r\n }\r\n\r\n if (settings['string-strength'] != null) {\r\n this.defaultSettings.stringStrength = settings['string-strength'];\r\n }\r\n if (settings['string-radius'] != null) {\r\n this.defaultSettings.stringRadius = settings['string-radius'];\r\n }\r\n if (settings['string-lerp'] != null) {\r\n this.defaultSettings.stringLerp = settings['string-lerp'];\r\n }\r\n\r\n if (settings['string-parallax-bias'] != null) {\r\n this.defaultSettings.stringParallaxBias = settings['string-parallax-bias'];\r\n }\r\n if (settings['string-parallax'] != null) {\r\n this.defaultSettings.stringParallax = settings['string-parallax'];\r\n }\r\n }\r\n\r\n protected setupObject(el: HTMLElement, object: StringObject) {\r\n object.showObserver?.disconnect();\r\n object.progressObserver?.disconnect();\r\n object.inviewObserver?.disconnect();\r\n\r\n let r = this._boundingClientRect.process(el);\r\n let rW = r.width / this.data.scsW;\r\n let rH = r.height / this.data.scsH;\r\n\r\n let startElementPosition = this._attribute.process(el, `string-enter-el`) || this.defaultSettings.stringEnterEl;\r\n let startSourcePosition = this._attribute.process(el, `string-enter-vp`) || this.defaultSettings.stringEnterVp;\r\n let endElementPosition = this._attribute.process(el, `string-exit-el`) || this.defaultSettings.stringExitEl;\r\n let endSourcePosition = this._attribute.process(el, `string-exit-vp`) || this.defaultSettings.stringExitVp;\r\n\r\n object.inviewTop =\r\n this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview-top`,\r\n this._attribute.process(el, `string-inview-left`, this.defaultSettings.stringInviewTop)\r\n ),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n object.inviewBottom =\r\n this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-inview`,\r\n this._attribute.process(\r\n el,\r\n `string-inview-bottom`,\r\n this._attribute.process(el, `string-inview-right`, this.defaultSettings.stringInviewBottom)\r\n )\r\n ),\r\n el,\r\n this.data.sD == 'vertical' ? rH : rW,\r\n 16\r\n ) * -1;\r\n\r\n object.selfDisable = this._attribute.process(el, `string-self-disable`) == null ? false : true;\r\n object.abs = this._attribute.process(el, `string-abs`) == null ? false : true;\r\n\r\n let targetQuery = this._attribute.process(el, `string-cursor-target`);\r\n\r\n if (targetQuery != null) {\r\n object.cursorTargetClass = targetQuery;\r\n }\r\n\r\n object.id = this._attribute.process(el, `string-id`, `string-${this.globalId}`);\r\n object.key = this._attribute.process(el, `string-key`, this.defaultSettings.stringKey);\r\n\r\n object.strength = this._attribute.process(el, 'string-strength', this.defaultSettings.stringStrength);\r\n object.radius = this._attribute.process(el, 'string-radius', this.defaultSettings.stringRadius);\r\n object.lerp = this._attribute.process(el, 'string-lerp', this.defaultSettings.stringLerp);\r\n object.weight = this._attribute.process(el, 'string-weight', 0.0);\r\n object.glide = this._attribute.process(el, 'string-glide', 1);\r\n let parallaxPosition = this._attribute.process(el, 'string-parallax-bias', this.defaultSettings.stringParallaxBias);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n object.alignment = this._attribute.process(el, `string-alignment`, 'center');\r\n\r\n el.setAttribute(`string-id`, object.id);\r\n if (this.data.sD == 'vertical') {\r\n object.size = rH;\r\n } else {\r\n object.size = rW;\r\n }\r\n\r\n object.oStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n object.oEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let observerStart = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-top`,\r\n this._attribute.process(el, `string-offset-left`, this.defaultSettings.stringOffsetStart)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n let observerEnd = this._parser.parseSingle(\r\n this._attribute.process(\r\n el,\r\n `string-offset-bottom`,\r\n this._attribute.process(el, `string-offset-right`, this.defaultSettings.stringOffsetEnd)\r\n ),\r\n el,\r\n this.data.wS,\r\n 16\r\n );\r\n\r\n let stringModuleKeys = this._attribute.process(object.el, 'string', '').split('|');\r\n object.factor = 0;\r\n if (stringModuleKeys.includes('parallax')) {\r\n observerStart = 0;\r\n observerEnd = 0;\r\n object.oStart = 0;\r\n object.oEnd = 0;\r\n object.factor = this._attribute.process(el, `string-parallax`, this.defaultSettings.stringParallax);\r\n object.oStart += object.factor * this.data.wS;\r\n object.oEnd += object.factor * this.data.wS;\r\n }\r\n\r\n object.repeat = this._attribute.process(el, `string-repeat`) == null ? false : true;\r\n object.sElPos = startElementPosition;\r\n object.sScrPos = startSourcePosition;\r\n object.eElPos = endElementPosition;\r\n object.eScrPos = endSourcePosition;\r\n\r\n object.halfWidth = rW / 2;\r\n object.halfHeight = rH / 2;\r\n\r\n let windowSize = this.data.wS;\r\n if (this.data.sD == 'vertical') {\r\n let startPos = this._position.process(el, this.data.sC).top / this.data.scsH;\r\n object.start = startPos;\r\n object.end = startPos + rH;\r\n } else {\r\n let startPos = this._position.process(el, this.data.sC).left / this.data.scsW;\r\n object.start = startPos;\r\n object.end = startPos + rW;\r\n }\r\n object.calculatePositions(windowSize);\r\n\r\n let connectItems = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id == object.id;\r\n });\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id != object.id;\r\n });\r\n\r\n connectItems.forEach((connectItem) => {\r\n object.connects.push(connectItem.element);\r\n });\r\n\r\n let callbackProgress = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n if (object.active == false) {\r\n this.events.emit(`activate_object_${object.id}`, true);\r\n object.enter();\r\n }\r\n } else {\r\n if (object.active == true) {\r\n this.events.emit(`activate_object_${object.id}`, false);\r\n object.leave();\r\n }\r\n }\r\n });\r\n };\r\n \r\n let callbackInview = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`inview_${object.id}`, true);\r\n object.show();\r\n } else {\r\n this.events.emit(`inview_${object.id}`, false);\r\n object.hide();\r\n }\r\n });\r\n };\r\n let callbackIntersection = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`intersection_${object.id}`, true);\r\n } else {\r\n this.events.emit(`intersection_${object.id}`, false);\r\n }\r\n });\r\n };\r\n\r\n let optionsProgress: any;\r\n let optionsInview: any;\r\n if (this.data.sD == 'vertical') {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `${observerStart + this.data.wS}px 1000px ${observerEnd + this.data.wS}px 1000px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `${observerStart + object.inviewTop}px 1000px ${observerEnd + object.inviewBottom}px 1000px`,\r\n threshold: 0.001,\r\n };\r\n } else {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `1000px ${observerStart + this.data.wS}px 1000px ${observerEnd + this.data.wS}px`,\r\n threshold: 0.001,\r\n };\r\n optionsInview = {\r\n root: null,\r\n rootMargin: `1000px ${observerStart + object.inviewTop}px 1000px ${observerEnd + object.inviewBottom}px`,\r\n threshold: 0.001,\r\n };\r\n }\r\n\r\n let optionsIntersection = {\r\n root: null,\r\n rootMargin: `0px 0px 0px 0px`,\r\n threshold: 0.001,\r\n };\r\n\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obIntersection = new IntersectionObserver(callbackIntersection, optionsIntersection);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n \r\n //object.show();\r\n obProgress.observe(el);\r\n obIntersection.observe(el);\r\n obInview.observe(el);\r\n\r\n object.showObserver = obIntersection;\r\n object.progressObserver = obProgress;\r\n object.inviewObserver = obInview;\r\n\r\n this.modules.forEach((module: IStringModule) => {\r\n if (module.tryConnect(object)) {\r\n module.initObject(object,el);\r\n module.connect(object);\r\n \r\n }\r\n });\r\n }\r\n\r\n addObject(el: HTMLElement) {\r\n let isInit = this._attribute.process(el, 'string-inited');\r\n \r\n let object: any;\r\n if (isInit == null) {\r\n object = new StringObject(el);\r\n } else {\r\n if (this.objects.has(this._attribute.process(el, 'string-id'))) {\r\n object = this.objects.get(this._attribute.process(el, 'string-id'));\r\n } else {\r\n object = new StringObject(el);\r\n }\r\n }\r\n el.setAttribute(`string-inited`, '');\r\n this.setupObject(el, object);\r\n this.objects.set(object.id, object);\r\n this.globalId++;\r\n }\r\n\r\n public removeObject(id: string) {\r\n let removedObject = this.objects.get(id);\r\n if (removedObject?.showObserver != null) {\r\n removedObject?.showObserver.disconnect();\r\n }\r\n if (removedObject?.progressObserver != null) {\r\n removedObject?.progressObserver.disconnect();\r\n }\r\n if (removedObject?.inviewObserver != null) {\r\n removedObject?.inviewObserver.disconnect();\r\n }\r\n this.objects.delete(id);\r\n removedObject?.el.removeAttribute(`string-inited`);\r\n removedObject?.leave();\r\n removedObject = undefined;\r\n }\r\n\r\n private onMouseMoveEvent(e: MouseEvent) {\r\n this._virtualCursor.onMouseMove(e);\r\n\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onMouseMove(e);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onMouseMove(e);\r\n }\r\n \r\n }\r\n private onWheelEvent(e: WheelEvent) {\r\n this.sEn.onWheel(e);\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onWheel(e);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onWheel(e);\r\n }\r\n }\r\n private onScrollStart() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScrollStart();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onScrollStart();\r\n }\r\n }\r\n private onScrollStop() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScrollStop();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onScrollStop();\r\n }\r\n }\r\n private onChangeDirection() {\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onChangeDirection();\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onChangeDirection();\r\n }\r\n }\r\n private onScrollEvent(e: Event) {\r\n this.sEn.onScroll(e);\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onScroll(this.data);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onScroll(this.data);\r\n }\r\n this.events.emit(`lerp`, this.data.v);\r\n this.events.emit(`scroll`, this.data.c);\r\n }\r\n private onUpdateEvent() {\r\n this._virtualCursor.onUpdate();\r\n this.sEn.onUpdate();\r\n for (let i = 0; i < this.modules.length; i++) {\r\n this.modules[i].onUpdate(this.data);\r\n }\r\n for (let i = 0; i < this.modulesUI.length; i++) {\r\n this.modulesUI[i].onUpdate(this.data);\r\n }\r\n this.events.emit(`update`, null);\r\n }\r\n public onResize() {\r\n let newWW = 0;\r\n let newWH = 0;\r\n try {\r\n let rect = this.sEn.scrollContainer.getBoundingClientRect();\r\n newWW = rect.width;\r\n newWH = rect.height;\r\n } catch (error) {\r\n newWW = this.sEn.scrollContainer.innerWidth;\r\n newWH = this.sEn.scrollContainer.innerHeight;\r\n }\r\n if (this.data.sD == 'vertical') {\r\n this.data.bS = this.data.psH - newWH;\r\n this.data.wS = newWH;\r\n } else {\r\n this.data.bS = this.data.psW - newWW;\r\n this.data.wS = newWW;\r\n }\r\n if (this.wW != newWW || this.window.innerWidth > 1024) {\r\n this.rebuild();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onResize();\r\n });\r\n }\r\n this.wW = newWW;\r\n this.wH = newWH;\r\n }\r\n private initMutationObserver() {\r\n\r\n \r\n const handleRemovedElement = (element: Element) => {\r\n let removeId = element.getAttribute('string-id');\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n\r\n if (connectTargetId != null) {\r\n this.connectQueue = this.connectQueue.filter(\r\n (connectQueueItem: any) => connectQueueItem.id != connectTargetId\r\n );\r\n }\r\n if (removeId != null) {\r\n this.removeObject(removeId);\r\n }\r\n };\r\n\r\n const handleAddedElement = (element: Element) => {\r\n \r\n this.addObject(element as any);\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n if (this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n } else {\r\n this.connectQueue.push({\r\n id: connectTargetId,\r\n element,\r\n });\r\n }\r\n }\r\n };\r\n\r\n\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.type === 'childList') {\r\n if (mutation.removedNodes.length > 0) {\r\n mutation.removedNodes.forEach((removedNode) => {\r\n if (removedNode.nodeType === Node.ELEMENT_NODE) {\r\n const element = removedNode as Element;\r\n if (element.hasAttribute('string')) {\r\n handleRemovedElement(element);\r\n }\r\n element.querySelectorAll('[string]').forEach((childElement) => {\r\n handleRemovedElement(childElement);\r\n });\r\n }\r\n });\r\n }\r\n if (mutation.addedNodes.length > 0) {\r\n \r\n mutation.addedNodes.forEach((addedNode) => {\r\n if (addedNode.nodeType === Node.ELEMENT_NODE) {\r\n const element = addedNode as Element;\r\n if (element.hasAttribute('string') && !element.hasAttribute('string-inited')) {\r\n handleAddedElement(element);\r\n }\r\n element.querySelectorAll('[string]:not([string-inited])').forEach((childElement) => {\r\n handleAddedElement(childElement);\r\n });\r\n }\r\n });\r\n }\r\n \r\n if (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0) {\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onRebuild();\r\n });\r\n }\r\n }\r\n });\r\n });\r\n const config = {\r\n attributes: false,\r\n childList: true,\r\n subtree: true,\r\n };\r\n observer.observe(document.body, config);\r\n }\r\n private rebuild() {\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n\r\n try {\r\n let transformContainer: any = parseTransform(this.data.sC);\r\n this.data.scsW = transformContainer[0];\r\n this.data.scsH = transformContainer[3];\r\n } catch (error) {\r\n this.data.scsW = 1;\r\n this.data.scsH = 1;\r\n }\r\n\r\n try {\r\n let rect = this.data.sC.getBoundingClientRect();\r\n this.wW = rect.width / this.data.scsW;\r\n this.wH = rect.height / this.data.scsH;\r\n } catch (error) {\r\n this.wW = this.data.sC.innerWidth;\r\n this.wH = this.data.sC.innerHeight;\r\n }\r\n\r\n if (this.wW < 1024 || isTouchDevice()) {\r\n this.scrollMode = this.mMode;\r\n } else {\r\n this.scrollMode = this.dMode;\r\n }\r\n\r\n let b = document.body,\r\n h = document.documentElement;\r\n\r\n this.data.psW = this.data.sC.scrollWidth;\r\n this.data.psH = this.data.sC.scrollHeight;\r\n if (this.data.psW == undefined) {\r\n this.data.psW = Math.max(b.scrollWidth, b.offsetWidth, h.clientWidth, h.scrollWidth, h.offsetWidth);\r\n }\r\n if (this.data.psH == undefined) {\r\n this.data.psH = Math.max(b.scrollHeight, b.offsetHeight, h.clientHeight, h.scrollHeight, h.offsetHeight);\r\n }\r\n\r\n if (this.data.sD == 'vertical') {\r\n this.data.bS = this.data.psH - this.wH;\r\n this.data.wS = this.wH;\r\n } else {\r\n this.data.bS = this.data.psW - this.wW;\r\n this.data.wS = this.wW;\r\n }\r\n\r\n this.data.hnwS = this.data.wS * -0.5;\r\n\r\n this.updateModeParams();\r\n }\r\n}\r\n\r\n\r\n \r\nexport {\r\n StringTune as default, StringCursor, StringDelayLerpTracker, StringFPSTracker, StringGlide, StringLazy, StringLerp, StringLerpTracker, StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, StringResponsive, StringScrollbar, StringSplit, StringAnchor, StringTune as StringTune, StringVideoAutoplay\r\n};\r\n\r\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","StringModule","type","_type","constructor","visitor","settings","objectsMap","Map","objects","Array","htmlKey","data","lerp","attribute","boundingClientRect","position","virtualCursor","events","loop","initObject","object","el","onScrollStart","onScrollStop","onChangeDirection","destructor","onChangeScrollParams","tryConnect","process","split","includes","connect","onConnect","addObject","id","set","from","map","name","removeObject","delete","onStart","onUpdate","onResize","onRebuild","onScroll","onMouseMove","e","onWheel","onChangeDevice","onChangeScrollDirection","onMutationObserver","added","removed","StringLazy","super","isStartLoaded","imageLoadingCount","document","querySelectorAll","forEach","element","load","getImageSize","getAttribute","classList","add","src","addEventListener","url","Promise","resolve","reject","xhr","XMLHttpRequest","open","responseType","onload","status","buffer","response","blob","Blob","img","Image","style","aspectRatio","width","height","URL","revokeObjectURL","emit","onerror","Error","createObjectURL","setRequestHeader","send","StringLoading","loadingTimeout","timeout","setTimeout","documentElement","StringVideoAutoplay","videoElement","videoSrc","started","tagName","toLowerCase","setAttribute","muted","tryPlay","once","console","warn","play","catch","err","then","StringCursor","oldX","oldY","enterObjectsMap","enterObjects","cursor","querySelector","cursorContent","mouseLerp","smoothX","smoothY","cursorData","lerpX","lerpY","x","y","setProperty","toFixed","isMouseOver","rect","getBoundingClientRect","elementX","left","elementY","top","Math","sqrt","pow","mousePixelFloatX","mousePixelFloatY","isMouseMove","offsetX","calculateOffset","alignment","offsetY","mouseX","mouseY","setMouseCoordinates","halfWidth","halfHeight","onMouseEnterEventBind","onMouseMoveEventBind","onMouseLeaveEventBind","cursorTargetClass","length","remove","event","removeEventListener","onEnter","onLeave","selfDisable","connects","mousePos","size","StringMagnetic","strength","radius","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","magneticTargetX","magneticTargetY","isMagneting","magneticX","magneticY","toString","StringLerpCalc","current","target","amt","difference","abs","StringVirtualCursor","targetX","targetY","_x","_y","_lerpX","_lerpY","_lF","tS","bS","lS","rS","StringObject","oStart","oEnd","startPos","endPos","differencePos","factor","inviewTop","inviewBottom","sElPos","sScrPos","eElPos","eScrPos","start","end","glide","weight","parallaxPositionStart","parallaxPositionEnd","progress","showObserver","progressObserver","inviewObserver","repeat","active","modules","anchor","intensity3D","distance3D","decay3D","type3D","material3D","color3D","model3D","animations3D","enter","leave","show","hide","push","calculatePositions","windowSize","DeviceType","StringResponsiveQueryDevice","config","min","undefined","max","enable","setEnable","setRange","mediaQuery","query","StringResponsive","queries","Mobile","Tablet","Laptop","Desktop","matchMedias","window","matchMedia","mobile","tablet","laptop","desktop","updateElements","isMobileMedia","matches","isTabletMedia","isLaptopMedia","isDesktopMedia","showElement","hasAttribute","display","StringScrollbarHorizontal","scrollbar","thumb","isDragging","startY","startScrollPosition","contentSize","psH","visibleSize","wS","thumbSize","updateThumb","contentHeight","visibleHeight","c","mouseDownEvent","mouseMoveEvent","deltaY","newScrollPosition","t","scrollTo","StringScrollbarVertical","startCoordinate","psW","contentWidth","visibleWidth","deltaX","StringScrollbar","scrollMode","mouseUpEventBind","mouseUpEvent","bind","mouseDownEventBind","mouseMoveEventBind","createScrollbar","addCustomStyles","showScrollbar","hideScrollbar","scrollbarState","sM","sD","scrollbarStateVertical","scrollbarStateHorizontal","createElement","textContent","head","appendChild","body","userSelect","scrollTimeout","clearTimeout","StringAnchor","oldLerp","p","parseOrig","transformOrigin","part","trim","startsWith","slice","s","floor","random","StringGlide","previousLerp","displacement","acceleration","velocityMultiplier","isInitialScroll","baseVelocityMultiplier","reducedVelocityMultiplier","negativeVelocityMultiplier","ACCELERATION_STEP","MIN_DISPLACEMENT","MAX_DISPLACEMENT","MIN_VELOCITY","MAX_VELOCITY","maxDisplacementValue","setupItem","transformCompute","dV","transform","onUpdateDesktopEvent","i","onUpdateMobileEvent","onUpdateEvent","calcExpanderFactor","isDirectionUp","isConditionMet","v","innerWidth","resetState","sDB","StringLerp","StringParallax","setupParallax","onScrollDesktopEvent","onScrollMobileEvent","onScrollEvent","parallaxPosition","StringProgress","setUpObject","applyProgress","progressStr","StringScroll","isProg","isParallaxEnabled","vT","onCalcUpdate","scrollContainer","_scrollDirection","d","scrollDirection","StringScrollDefault","delta","speedAccelerate","scrollTop","plusDelta","StringScrollDisable","preventDefault","CLASS_NAMES","StringScrollSmooth","isScrollbarManipulation","isBottomScrollDirection","velocityThreshold","previousCurrent","updateScrollDirection","newDirection","isForward","toggle","clamp","stopScroll","speed","absVelocity","ceil","StringTypeSettings","sC","sA","mL","StringSplit","splitOptions","parseSplitOptions","innerHTML","html","contains","attributeValue","options","line","word","char","charLine","charWord","wordLine","match","prefix","option","params","parseParam","result","align","param","parseInt","elementRoot","text","decodeHtmlEntity","words","globalCharIndex","globalWordIndex","totalChars","replace","tempSpan","compStyles","getComputedStyle","fontFamily","fontSize","letterSpacing","lineHeight","fontWeight","virtualLines","virtualLine","currentLineWidth","wordIndex","wordWidth","offsetWidth","virtualWordSpan","chars","charIndex","virtualCharSpan","hasLineOptions","addedWordsCount","appendVirtualLineToDOM","wordSpan","charSpan","applyOptions","removeChild","lineIndex","totalWords","lineSpan","lineCharIndex","totalLineChars","span","optionArray","globalIndex","localIndex","parentLength","optionIndex","index","calculateIndex","variableName","generateVariableName","String","createSpaceSpan","spaceSpan","str","StringFPS","isAnimationStarted","requestAnimationId","onFrame","now","_now","fps","fpsInterval","Date","animate","stop","cancelAnimationFrame","requestAnimationFrame","elapsed","StringDelayLerpTracker","canvasHeight","canvas","context","getContext","innerHeight","bottom","backgroundColor","border","zIndex","positionHistory","maxHistory","currentPosition","targetPosition","shift","drawGraph","ctx","clearRect","strokeStyle","lineWidth","beginPath","pos","moveTo","lineTo","stroke","setTargetPosition","StringFPSTracker","callCount","createDisplayElement","displayElement","right","intervalId","setInterval","clearInterval","StringLerpTracker","StringPositionTracker","dirSymbol","StringAttribute","n","StringBoundingClientRect","StringData","three","cF","hnwS","scsW","scsH","StringEvent","eventsByKey","on","has","updateAllEvents","off","ea","filter","h","all","values","listOfEvents","StringParser","parseSingle","wH","baseRem","pV","isNegative","offsetHeight","endsWith","parseFloat","StringPosition","container","br","error","er","transformArr","parseTransform","det","nullifyTransforms","isTouchDevice","navigator","maxTouchPoints","StringTune","sEn","sEnSmooth","sEnDefault","sEnDisable","rebuild","initObjects","scrollPosition","isUpdateEvents","onScrollBind","onResizeBind","scrollMobileMode","mobileMode","mMode","updateModeParams","scrollDesktopMode","desktopMode","dMode","overflow","modulesUI","wW","_virtualCursor","_lerp","_attribute","_boundingClientRect","_position","connectQueue","globalId","_parser","isStarted","eventMap","defaultSettings","stringOffsetStart","stringOffsetEnd","stringEnterEl","stringExitEl","stringEnterVp","stringExitVp","stringInviewTop","stringInviewBottom","stringKey","stringStrength","stringRadius","stringLerp","stringParallaxBias","stringParallax","onWheelBind","onWheelEvent","onMouseMoveBind","onMouseMoveEvent","ResizeObserver","observe","getInstance","reuse","find","use","objectClass","passive","entries","setupObject","initMutationObserver","connectTargetId","connectTargetObject","destroy","eventName","setupSettings","disconnect","r","rW","rH","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","targetQuery","observerStart","observerEnd","stringModuleKeys","optionsProgress","optionsInview","connectItems","connectQueueItem","connectItem","rootMargin","threshold","obProgress","IntersectionObserver","es","isIntersecting","obIntersection","obInview","removedObject","removeAttribute","newWW","newWH","handleRemovedElement","removeId","handleAddedElement","MutationObserver","mutations","mutation","removedNodes","removedNode","nodeType","Node","ELEMENT_NODE","childElement","addedNodes","addedNode","attributes","childList","subtree","transformContainer","b","scrollWidth","scrollHeight","clientWidth","clientHeight"],"sourceRoot":""}