@fiddle-digital/string-tune 0.0.33 → 0.0.35

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);\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\r\n onUpdate(data: StringData): void {\r\n if (this.virtualCursor.smoothX != this.oldX || this.virtualCursor.smoothY != this.oldY) {\r\n let cursorData = {\r\n lerpX: this.virtualCursor.lerpX,\r\n lerpY: this.virtualCursor.lerpY,\r\n x: this.virtualCursor.x,\r\n y: this.virtualCursor.y,\r\n };\r\n this.events.emit('cursor', cursorData);\r\n\r\n this.cursor.style.setProperty('--x', this.virtualCursor.smoothX);\r\n this.cursor.style.setProperty('--y', this.virtualCursor.smoothY);\r\n \r\n\r\n this.oldX = this.virtualCursor.smoothX;\r\n this.oldY = this.virtualCursor.smoothY;\r\n }\r\n \r\n this.cursor.style.setProperty('--x-lerp', this.virtualCursor.lerpX.toFixed(2));\r\n this.cursor.style.setProperty('--y-lerp', this.virtualCursor.lerpY.toFixed(2));\r\n\r\n this.objects.forEach((object) => {\r\n if (object.isMouseMove) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', this.virtualCursor.x - rect.left, rect.width);\r\n const offsetY = this.calculateOffset('center', this.virtualCursor.y - rect.top, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n \r\n } else {\r\n if (object.mouseX != 0 || object.mouseY != 0) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', object.halfWidth, rect.width);\r\n const offsetY = this.calculateOffset('center', object.halfHeight, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n }\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n\r\n let onMouseEnterEventBind = () => {\r\n element.addEventListener('mousemove', onMouseMoveEventBind);\r\n element.addEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = true;\r\n \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('--mouse-x', x.toFixed(2));\r\n object.el.style.setProperty('--mouse-y', y.toFixed(2));\r\n }\r\n object.connects.forEach((element) => {\r\n element.style.setProperty('--mouse-x', x.toFixed(2));\r\n element.style.setProperty('--mouse-y', y.toFixed(2));\r\n });\r\n }\r\n\r\n private calculateOffset(position: string, mousePos: number, size: number): number {\r\n switch (position) {\r\n case 'start':\r\n return mousePos / size;\r\n case 'end':\r\n return (mousePos - size) / size;\r\n case 'center':\r\n default:\r\n return (mousePos - size / 2) / (size / 2);\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringMagnetic extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'magnetic';\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLElement;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-strength'] != null) {\r\n object.strength = this.settings['string-strength'];\r\n }\r\n if (this.settings['string-radius'] != null) {\r\n object.radius = this.settings['string-radius'];\r\n }\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.objects.forEach((object) => {\r\n const element = object.el as HTMLElement;\r\n const rect = element.getBoundingClientRect();\r\n const elementCenterX = rect.left + object.halfWidth;\r\n const elementCenterY = rect.top + object.halfHeight;\r\n const distX = e.clientX - elementCenterX;\r\n const distY = e.clientY - elementCenterY;\r\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\r\n\r\n if (distance < object.radius) {\r\n object.magneticTargetX = distX * object.strength * ((object.radius - distance) / object.radius);\r\n object.magneticTargetY = distY * object.strength * ((object.radius - distance) / object.radius);\r\n object.isMagneting = true;\r\n } else {\r\n object.magneticTargetX = 0;\r\n object.magneticTargetY = 0;\r\n }\r\n });\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n if (object.isMagneting) {\r\n let lerpX = this.lerp.process(object.magneticX, object.magneticTargetX, object.lerp);\r\n let lerpY = this.lerp.process(object.magneticY, object.magneticTargetY, object.lerp);\r\n if (lerpX > -0.01 && lerpX < 0.01) {\r\n lerpX = 0;\r\n object.magneticX = object.magneticTargetX;\r\n }\r\n if (lerpY > -0.01 && lerpY < 0.01) {\r\n lerpY = 0;\r\n object.magneticY = object.magneticTargetY;\r\n }\r\n object.magneticX += lerpX;\r\n object.magneticY += lerpY;\r\n object.el.style.setProperty('--magnetic-x', object.magneticX.toString());\r\n object.el.style.setProperty('--magnetic-y', object.magneticY.toString());\r\n if (object.magneticTargetX == object.magneticX || object.magneticTargetY == object.magneticY) {\r\n object.isMagneting = false;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export class 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 this._x = this._x + this._lerpX;\r\n this._y = this._y + this._lerpY;\r\n\r\n if (Math.abs(this._lerpX) < .1) {\r\n this._x = this.targetX\r\n }\r\n if (Math.abs(this._lerpY) < .1) {\r\n this._y = this.targetY\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 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, this.data.v);\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n object.onEnter = () => {\r\n this.setUpObject(object, 0);\r\n };\r\n }\r\n\r\n private setUpObject(object: StringObject, lerp: number) {\r\n object.progress = Math.min(\r\n 1,\r\n Math.max(0, (this.data.c - object.startPos) / object.differencePos)\r\n );\r\n this.applyProgress(object, object.progress);\r\n }\r\n\r\n private applyProgress(object: StringObject, progress: number) {\r\n this.events.emit(`progress_${object.id}`, progress);\r\n object.el.style.setProperty(object.key, progress.toString());\r\n object.connects.forEach((element) => {\r\n element.style.setProperty(object.key, progress.toString());\r\n });\r\n }\r\n}\r\n","import { StringData } from '../../Utils/StringData';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScroll {\r\n public data: StringData;\r\n public isProg: boolean = false;\r\n public isParallaxEnabled: boolean = false;\r\n public name: string = '';\r\n public settings: StringTypeSettings;\r\n public v = 0;\r\n protected vT: number = 0;\r\n protected d: any;\r\n\r\n public 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 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 = this.clamp(Math.ceil(data.c + data.v), 0, data.bS);\r\n this.updateScrollDirection(true);\r\n } else {\r\n this.data.c = this.clamp(Math.floor(data.c + data.v), 0, data.bS);\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 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 = 0.25\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 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\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.onResizeEvent.bind(this);\r\n this.onMouseMoveBind = this.onMouseMoveEvent.bind(this);\r\n this.loop.onFrame = () => {\r\n this.onUpdateEvent();\r\n };\r\n this.rebuild();\r\n\r\n 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 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 }\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', event: any, id: string = '') {\r\n switch (key) {\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', event: any, id: string = '') {\r\n switch (key) {\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\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\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\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 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 private onResizeEvent() {\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","smoothX","smoothY","cursorData","lerpX","lerpY","x","y","setProperty","toFixed","isMouseMove","rect","getBoundingClientRect","offsetX","calculateOffset","left","offsetY","top","mouseX","mouseY","setMouseCoordinates","halfWidth","halfHeight","onMouseEnterEventBind","onMouseMoveEventBind","onMouseLeaveEventBind","cursorTargetClass","remove","event","removeEventListener","onEnter","onLeave","selfDisable","connects","mousePos","size","StringMagnetic","strength","radius","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","Math","sqrt","magneticTargetX","magneticTargetY","isMagneting","magneticX","magneticY","toString","StringLerpCalc","start","end","amt","StringVirtualCursor","targetX","targetY","_x","_y","_lerpX","_lerpY","mouseLerp","_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","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","defaultSettings","stringOffsetStart","stringOffsetEnd","stringEnterEl","stringExitEl","stringEnterVp","stringExitVp","stringInviewTop","stringInviewBottom","stringKey","stringStrength","stringRadius","stringLerp","stringParallaxBias","stringParallax","onWheelBind","onWheelEvent","onResizeEvent","onMouseMoveBind","onMouseMoveEvent","getInstance","use","objectClass","passive","ResizeObserver","entries","setupObject","observe","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","isInit","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);\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\r\n onUpdate(data: StringData): void {\r\n if (this.virtualCursor.smoothX != this.oldX || this.virtualCursor.smoothY != this.oldY) {\r\n let cursorData = {\r\n lerpX: this.virtualCursor.lerpX,\r\n lerpY: this.virtualCursor.lerpY,\r\n x: this.virtualCursor.x,\r\n y: this.virtualCursor.y,\r\n };\r\n this.events.emit('cursor', cursorData);\r\n\r\n this.cursor.style.setProperty('--x', this.virtualCursor.smoothX);\r\n this.cursor.style.setProperty('--y', this.virtualCursor.smoothY);\r\n \r\n\r\n this.oldX = this.virtualCursor.smoothX;\r\n this.oldY = this.virtualCursor.smoothY;\r\n }\r\n \r\n this.cursor.style.setProperty('--x-lerp', this.virtualCursor.lerpX.toFixed(2));\r\n this.cursor.style.setProperty('--y-lerp', this.virtualCursor.lerpY.toFixed(2));\r\n\r\n this.objects.forEach((object) => {\r\n if (object.isMouseMove) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', this.virtualCursor.x - rect.left, rect.width);\r\n const offsetY = this.calculateOffset('center', this.virtualCursor.y - rect.top, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n \r\n } else {\r\n if (object.mouseX != 0 || object.mouseY != 0) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', object.halfWidth, rect.width);\r\n const offsetY = this.calculateOffset('center', object.halfHeight, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n }\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n\r\n let onMouseEnterEventBind = () => {\r\n element.addEventListener('mousemove', onMouseMoveEventBind);\r\n element.addEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = true;\r\n \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('--mouse-x', x.toFixed(2));\r\n object.el.style.setProperty('--mouse-y', y.toFixed(2));\r\n }\r\n object.connects.forEach((element) => {\r\n element.style.setProperty('--mouse-x', x.toFixed(2));\r\n element.style.setProperty('--mouse-y', y.toFixed(2));\r\n });\r\n }\r\n\r\n private calculateOffset(position: string, mousePos: number, size: number): number {\r\n switch (position) {\r\n case 'start':\r\n return mousePos / size;\r\n case 'end':\r\n return (mousePos - size) / size;\r\n case 'center':\r\n default:\r\n return (mousePos - size / 2) / (size / 2);\r\n }\r\n }\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringMagnetic extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'magnetic';\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLElement;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-strength'] != null) {\r\n object.strength = this.settings['string-strength'];\r\n }\r\n if (this.settings['string-radius'] != null) {\r\n object.radius = this.settings['string-radius'];\r\n }\r\n if (this.settings['string-lerp'] != null) {\r\n object.lerp = this.settings['string-lerp'];\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.objects.forEach((object) => {\r\n const element = object.el as HTMLElement;\r\n const rect = element.getBoundingClientRect();\r\n const elementCenterX = rect.left + object.halfWidth;\r\n const elementCenterY = rect.top + object.halfHeight;\r\n const distX = e.clientX - elementCenterX;\r\n const distY = e.clientY - elementCenterY;\r\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\r\n\r\n if (distance < object.radius) {\r\n object.magneticTargetX = distX * object.strength * ((object.radius - distance) / object.radius);\r\n object.magneticTargetY = distY * object.strength * ((object.radius - distance) / object.radius);\r\n object.isMagneting = true;\r\n } else {\r\n object.magneticTargetX = 0;\r\n object.magneticTargetY = 0;\r\n }\r\n });\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n if (object.isMagneting) {\r\n let lerpX = this.lerp.process(object.magneticX, object.magneticTargetX, object.lerp);\r\n let lerpY = this.lerp.process(object.magneticY, object.magneticTargetY, object.lerp);\r\n if (lerpX > -0.01 && lerpX < 0.01) {\r\n lerpX = 0;\r\n object.magneticX = object.magneticTargetX;\r\n }\r\n if (lerpY > -0.01 && lerpY < 0.01) {\r\n lerpY = 0;\r\n object.magneticY = object.magneticTargetY;\r\n }\r\n object.magneticX += lerpX;\r\n object.magneticY += lerpY;\r\n object.el.style.setProperty('--magnetic-x', object.magneticX.toString());\r\n object.el.style.setProperty('--magnetic-y', object.magneticY.toString());\r\n if (object.magneticTargetX == object.magneticX || object.magneticTargetY == object.magneticY) {\r\n object.isMagneting = false;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export class 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 this._x = this._x + this._lerpX;\r\n this._y = this._y + this._lerpY;\r\n\r\n if (Math.abs(this._lerpX) < .1) {\r\n this._x = this.targetX\r\n }\r\n if (Math.abs(this._lerpY) < .1) {\r\n this._y = this.targetY\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 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, this.data.v);\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n object.onEnter = () => {\r\n this.setUpObject(object, 0);\r\n };\r\n }\r\n\r\n private setUpObject(object: StringObject, lerp: number) {\r\n object.progress = Math.min(\r\n 1,\r\n Math.max(0, (this.data.c - object.startPos) / object.differencePos)\r\n );\r\n this.applyProgress(object, object.progress);\r\n }\r\n\r\n private applyProgress(object: StringObject, progress: number) {\r\n this.events.emit(`progress_${object.id}`, progress);\r\n object.el.style.setProperty(object.key, progress.toString());\r\n object.connects.forEach((element) => {\r\n element.style.setProperty(object.key, progress.toString());\r\n });\r\n }\r\n}\r\n","import { StringData } from '../../Utils/StringData';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScroll {\r\n public data: StringData;\r\n public isProg: boolean = false;\r\n public isParallaxEnabled: boolean = false;\r\n public name: string = '';\r\n public settings: StringTypeSettings;\r\n public v = 0;\r\n protected vT: number = 0;\r\n protected d: any;\r\n\r\n public 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 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 = this.clamp(Math.ceil(data.c + data.v), 0, data.bS);\r\n this.updateScrollDirection(true);\r\n } else {\r\n this.data.c = this.clamp(Math.floor(data.c + data.v), 0, data.bS);\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 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 = 0.25\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\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\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\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 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","smoothX","smoothY","cursorData","lerpX","lerpY","x","y","setProperty","toFixed","isMouseMove","rect","getBoundingClientRect","offsetX","calculateOffset","left","offsetY","top","mouseX","mouseY","setMouseCoordinates","halfWidth","halfHeight","onMouseEnterEventBind","onMouseMoveEventBind","onMouseLeaveEventBind","cursorTargetClass","remove","event","removeEventListener","onEnter","onLeave","selfDisable","connects","mousePos","size","StringMagnetic","strength","radius","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","Math","sqrt","magneticTargetX","magneticTargetY","isMagneting","magneticX","magneticY","toString","StringLerpCalc","start","end","amt","StringVirtualCursor","targetX","targetY","_x","_y","_lerpX","_lerpY","mouseLerp","_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","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","isInit","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":""}