@fiddle-digital/string-tune 0.0.41 → 0.0.42

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