@fiddle-digital/string-tune 0.0.36 → 0.0.37

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']\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'];\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 console.log(object.lerp)\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 public get lerp() {\r\n return this._lerp\r\n }\r\n public set lerp(value: number) {\r\n this._lerp = value\r\n console.log(this.id, this._lerp)\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 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 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.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 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 || 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","log","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","_lerp","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","_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","addedNodes","addedNode","nodeType","Node","ELEMENT_NODE","childElement","removedNodes","removedNode","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']\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'];\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 console.log(object.lerp)\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 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 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.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 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 || 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","log","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","addedNodes","addedNode","nodeType","Node","ELEMENT_NODE","childElement","removedNodes","removedNode","attributes","childList","subtree","transformContainer","b","scrollWidth","scrollHeight","clientWidth","clientHeight"],"sourceRoot":""}