@fiddle-digital/string-tune 0.0.45 → 0.0.46
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 +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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 return object.keys.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 if (!this.objectsMap.has(id)) {\r\n this.objectsMap.set(id, object);\r\n this.objects.push(object);\r\n }\r\n }\r\n\r\n removeObject(id: string) {\r\n const object = this.objectsMap.get(id);\r\n if (object) {\r\n this.objectsMap.delete(id);\r\n const index = this.objects.indexOf(object);\r\n if (index !== -1) {\r\n this.objects.splice(index, 1);\r\n }\r\n }\r\n }\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';\nimport { StringModule } from '../../StringModule';\n\nexport class StringLazy extends StringModule {\n private isStartLoaded: boolean = false\n private imageLoadingCount: number = 0\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'lazy';\n }\n\n onStart(): void {\n const imagesEls = document.querySelectorAll('img[string-lazy]');\n imagesEls.forEach((element: any) => {\n this.load(element)\n });\n this.isStartLoaded = true\n }\n\n onConnect(object: StringObject) {\n this.imageLoadingCount++\n if (this.isStartLoaded) {\n let element: any = object.el \n this.load(element)\n }\n }\n\n private load(element: any) {\n this.getImageSize(element, element.getAttribute('string-lazy'));\n element.classList.add(`lazyLoad`);\n element.src = element.getAttribute('string-lazy') as any;\n element.addEventListener('load', () => {\n element.classList.add(`-loaded`);\n \n });\n }\n\n private getImageSize(element: HTMLElement, url: string) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status === 206 || xhr.status === 200) {\n const buffer = xhr.response;\n const blob = new Blob([buffer]);\n const img = new Image();\n img.onload = () => {\n element.style.aspectRatio = `${img.width} / ${img.height}`;\n resolve({ width: img.width, height: img.height });\n URL.revokeObjectURL(img.src);\n this.imageLoadingCount--\n if (this.imageLoadingCount <= 0) {\n this.events.emit('all-image-loaded', null)\n this.imageLoadingCount = 0\n }\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n img.src = URL.createObjectURL(blob);\n } else {\n reject(new Error('Failed to load image'));\n }\n };\n xhr.onerror = () => {\n reject(new Error('Network error'));\n };\n xhr.setRequestHeader('Range', 'bytes=0-');\n xhr.send();\n });\n }\n}\n","import { StringModule } from \"../../StringModule\";\nimport { StringData } from \"../../Utils/StringData\";\n\n\nexport class StringLoading extends StringModule{\n loadingTimeout: number = 0\n\n constructor(visitor: any, settings: any = null) {\n super(visitor)\n this._type = 2\n\n if (settings != null) {\n if (settings.timeout != null) {\n this.loadingTimeout = settings.timeout\n }\n }\n }\n onStart(): void {\n setTimeout(() => {\n const htmlElement = document.documentElement;\n htmlElement.classList.add('-loaded');\n }, this.loadingTimeout);\n \n }\n}","import { StringObject } from \"../../Objects/StringObject\";\nimport { StringModule } from \"../../StringModule\";\n\nexport class StringVideoAutoplay extends StringModule {\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = \"autoplay\";\n }\n\n onConnect(object: StringObject) {\n const videoElement = object.el as HTMLVideoElement;\n const videoSrc = this.attribute.process(videoElement, \"string-src\", \"\");\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\n if (videoElement.tagName.toLowerCase() === \"video\" && videoSrc && started == false) {\n videoElement.setAttribute(\"muted\", \"muted\");\n videoElement.setAttribute(\"playsinline\", \"\");\n videoElement.setAttribute(\"loop\", \"\");\n videoElement.setAttribute(\"autoplay\", \"\");\n videoElement.src = videoSrc;\n videoElement.muted = true;\n videoElement.addEventListener(\"canplaythrough\", () => {\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\n if (started == false) {\n this.tryPlay(object, videoElement); \n }\n }, { once: true });\n videoElement.load();\n } else {\n console.warn(\n \"StringVideoAutoplay: Element is not a <video> tag or string-src is missing.\",\n object.el\n );\n }\n }\n\n private tryPlay(object: StringObject, element: HTMLVideoElement) {\n element.play().catch((err) => {\n console.warn(\"Autoplay failed:\", err);\n object.started = false;\n }).then(() => {\n object.started = true;\n element.setAttribute(`string-started`, '')\n });\n }\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\n\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.65\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 overCount: number = 0\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\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 \r\n } else {\r\n this.virtualCursor.mouseLerp = remapLerp(0.5)\r\n }\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\r\n requestAnimationFrame(() => {\r\n this.objects.forEach((object) => {\r\n if (object.isMouseOver && !object.cursorTargetDisabled) {\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\r\n const dx = object.mousePixelFloatX - elementX;\r\n const dy = object.mousePixelFloatY - elementY;\r\n const distanceSquared = dx * dx + dy * dy;\r\n if (distanceSquared > 0.0001) {\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\r\n if (this.overCount > 0 && (this.virtualCursor.lerpX != 0 || this.virtualCursor.lerpY != 0)) {\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.oldX = this.virtualCursor.smoothX;\r\n this.oldY = this.virtualCursor.smoothY;\r\n this.cursor.style.setProperty('--x', this.virtualCursor.smoothX);\r\n this.cursor.style.setProperty('--y', this.virtualCursor.smoothY);\r\n this.cursor.style.setProperty('--x-lerp', this.virtualCursor.lerpX);\r\n this.cursor.style.setProperty('--y-lerp', this.virtualCursor.lerpY);\r\n }\r\n })\r\n \r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n let timeoutId: any = null\r\n let onMouseEnterEventBind = () => {\r\n this.overCount++\r\n element.addEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseOver = true;\r\n if (object.cursorTargetClass!= null && object.cursorTargetClass.length > 0) {\r\n this.cursorContent.classList.add(object.cursorTargetClass)\r\n }\r\n this.cursor.classList.add('-showing');\r\n timeoutId = setTimeout(() => {\r\n this.cursor.classList.remove('-showing');\r\n this.cursor.classList.add('-show');\r\n }, 1200);\r\n };\r\n let onMouseLeaveEventBind = () => {\r\n this.overCount--\r\n if (timeoutId!=null) {\r\n clearTimeout(timeoutId)\r\n }\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseOver = false;\r\n if (object.cursorTargetClass != null && object.cursorTargetClass.length > 0) {\r\n this.cursorContent.classList.remove(object.cursorTargetClass)\r\n }\r\n this.cursor.classList.remove('-showing');\r\n this.cursor.classList.remove('-show');\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('mouseleave', onMouseLeaveEventBind);\r\n };\r\n }\r\n\r\n private setMouseCoordinates(object: StringObject, x: number, y: number) {\r\n if (!object.cursorTargetStyleDisabled) {\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 \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';\nimport { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringMagnetic extends StringModule {\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'magnetic';\n }\n\n onConnect(object: StringObject) {\n const element = object.el as HTMLElement;\n\n if (this.settings != null) {\n if (this.settings['string-strength'] != null) {\n object.strength = this.settings['string-strength'];\n }\n if (this.settings['string-radius'] != null) {\n object.radius = this.settings['string-radius'];\n }\n if (this.settings['string-lerp'] != null) {\n object.lerp = this.settings['string-lerp'];\n }\n }\n }\n\n onMouseMove(e: MouseEvent): void {\n this.objects.forEach((object) => {\n const element = object.el as HTMLElement;\n const rect = element.getBoundingClientRect();\n const elementCenterX = rect.left + object.halfWidth;\n const elementCenterY = rect.top + object.halfHeight;\n const distX = e.clientX - elementCenterX;\n const distY = e.clientY - elementCenterY;\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\n\n if (distance < object.radius) {\n object.magneticTargetX = distX * object.strength * ((object.radius - distance) / object.radius);\n object.magneticTargetY = distY * object.strength * ((object.radius - distance) / object.radius);\n object.isMagneting = true;\n } else {\n object.magneticTargetX = 0;\n object.magneticTargetY = 0;\n }\n });\n }\n\n onUpdate(data: StringData): void {\n this.objects.forEach((object) => {\n if (object.isMagneting) {\n let lerpX = this.lerp.process(object.magneticX, object.magneticTargetX, object.lerp);\n let lerpY = this.lerp.process(object.magneticY, object.magneticTargetY, object.lerp);\n if (lerpX > -0.01 && lerpX < 0.01) {\n lerpX = 0;\n object.magneticX = object.magneticTargetX;\n }\n if (lerpY > -0.01 && lerpY < 0.01) {\n lerpY = 0;\n object.magneticY = object.magneticTargetY;\n }\n object.magneticX += lerpX;\n object.magneticY += lerpY;\n object.el.style.setProperty('--magnetic-x', object.magneticX.toString());\n object.el.style.setProperty('--magnetic-y', object.magneticY.toString());\n if (object.magneticTargetX == object.magneticX || object.magneticTargetY == object.magneticY) {\n object.isMagneting = false;\n }\n }\n });\n }\n}\n","export class StringLerpCalc {\r\n process(current: number, target: number, amt: number) {\r\n const difference = target - current;\r\n return difference * amt;\r\n }\r\n}","import { StringLerpCalc } from \"../Utils/StringLerpCalc\";\r\n\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\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\r\n onMouseMove(e: MouseEvent): void {\r\n this.targetX = e.clientX;\r\n this.targetY = e.clientY;\r\n \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 const distance = Math.sqrt(Math.pow(this._lerpX, 2) + Math.pow(this._lerpY, 2));\r\n if (distance < 0.1) {\r\n this._lerpX = 0\r\n this._lerpY = 0\r\n this._x = this.targetX;\r\n this._y = this.targetY;\r\n } else {\r\n this._x = this._x + this._lerpX;\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 keys: 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 public cursorTargetDisabled: boolean = false;\r\n public cursorTargetStyleDisabled: 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';\n\nexport class StringScrollbarHorizontal {\n private scrollbar: any;\n private thumb: any;\n private isDragging = false;\n private startY: number = 0;\n private startScrollPosition: number = 0;\n data: StringData;\n\n constructor(data: StringData, scrollbar: any, thumb: any) {\n this.data = data;\n this.scrollbar = scrollbar;\n this.thumb = thumb;\n }\n\n onResize(): void {\n const contentSize = this.data.psH;\n const visibleSize = this.data.wS;\n\n const thumbSize = (visibleSize / contentSize) * visibleSize;\n this.thumb.style.setProperty('--size', thumbSize + 'px');\n\n if (contentSize <= visibleSize) {\n this.scrollbar.classList.add('-hide');\n } else {\n this.scrollbar.classList.remove('-hide');\n }\n }\n\n updateThumb() {\n const contentHeight = this.data.psH;\n const visibleHeight = this.data.wS;\n this.thumb.style.setProperty('--position', `${(this.data.c / contentHeight) * visibleHeight + 'px'}`);\n }\n\n mouseDownEvent(e: MouseEvent) {\n this.startY = e.clientY;\n this.startScrollPosition = this.data.c;\n }\n\n mouseMoveEvent(e: MouseEvent) {\n const deltaY = e.clientY - this.startY;\n const newScrollPosition = this.startScrollPosition + (deltaY / this.data.wS) * this.data.psH;\n this.data.c = newScrollPosition;\n this.data.t = newScrollPosition;\n window.scrollTo(0, newScrollPosition);\n this.updateThumb();\n }\n}\n","import { StringData } from '../../../Utils/StringData';\n\nexport class StringScrollbarVertical {\n private scrollbar: any;\n private thumb: any;\n private isDragging = false;\n private startCoordinate: number = 0;\n private startScrollPosition: number = 0;\n data: StringData;\n\n constructor(data: StringData, scrollbar: any, thumb: any) {\n this.data = data;\n this.scrollbar = scrollbar;\n this.thumb = thumb;\n }\n\n onResize(): void {\n const contentSize = this.data.psW;\n const visibleSize = this.data.wS;\n const thumbSize = (visibleSize / contentSize) * visibleSize;\n this.thumb.style.setProperty('--size', thumbSize + 'px');\n\n if (contentSize <= visibleSize) {\n this.scrollbar.classList.add('-hide');\n } else {\n this.scrollbar.classList.remove('-hide');\n }\n }\n\n updateThumb() {\n const contentWidth = this.data.psW;\n const visibleWidth = this.data.wS;\n this.thumb.style.setProperty('--position', `${(this.data.c / contentWidth) * visibleWidth + 'px'}`);\n }\n\n mouseDownEvent(e: MouseEvent) {\n this.startCoordinate = e.clientX;\n this.startScrollPosition = this.data.c;\n }\n\n mouseMoveEvent(e: MouseEvent) {\n const deltaX = e.clientX - this.startCoordinate;\n const newScrollPosition = this.startScrollPosition + (deltaX / this.data.wS) * this.data.psW;\n this.data.c = newScrollPosition;\n this.data.t = newScrollPosition;\n window.scrollTo(0, newScrollPosition);\n this.updateThumb();\n }\n}\n","import { StringModule } from '../../../StringModule';\nimport { StringData } from '../../../Utils/StringData';\nimport { StringScrollbarHorizontal } from './StringScrollbarHorizontal';\nimport { StringScrollbarVertical } from './StringScrollbarVertical';\n\nexport class StringScrollbar extends StringModule {\n private scrollbar: any;\n private thumb: any;\n private scrollTimeout: any;\n\n private isDragging = false;\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\n\n private mouseUpEventBind: any;\n private mouseDownEventBind: any;\n private mouseMoveEventBind: any;\n\n private scrollbarState: any;\n private scrollbarStateHorizontal: any;\n private scrollbarStateVertical: any;\n\n constructor(visitor: any) {\n super(visitor);\n\n this.mouseUpEventBind = this.mouseUpEvent.bind(this);\n this.mouseDownEventBind = this.mouseDownEvent.bind(this);\n this.mouseMoveEventBind = this.mouseMoveEvent.bind(this);\n }\n destructor(): void {\n document.removeEventListener('mouseup', this.mouseUpEventBind);\n this.thumb.removeEventListener('mousedown', this.mouseDownEventBind);\n document.removeEventListener('mousemove', this.mouseMoveEventBind);\n }\n\n onStart(): void {\n this.createScrollbar();\n this.updateThumb();\n this.addCustomStyles();\n document.addEventListener('mouseup', this.mouseUpEventBind);\n this.thumb.addEventListener('mousedown', this.mouseDownEventBind);\n document.addEventListener('mousemove', this.mouseMoveEventBind);\n document.documentElement.classList.add(`-no-scrollbar`);\n }\n\n onScroll(data: StringData): void {\n this.updateThumb();\n this.showScrollbar();\n this.hideScrollbar();\n }\n\n onResize(): void {\n this.scrollbarState.onResize();\n }\n\n onChangeScrollParams(): void {\n if (this.data.sM == 'disable' && this.scrollMode != 'disable') {\n this.scrollbar.classList.add('-hide');\n }\n if ((this.data.sM == 'smooth' && this.scrollMode == 'disable') || (this.data.sM == 'default' && this.scrollMode == 'disable')) {\n this.scrollbar.classList.remove('-hide');\n }\n this.scrollMode = this.data.sM;\n }\n\n onChangeScrollDirection() {\n if (this.data.sD == 'horizontal') {\n this.scrollbarState = this.scrollbarStateVertical;\n } else {\n this.scrollbarState = this.scrollbarStateHorizontal;\n }\n this.scrollbarState.onResize();\n }\n\n private addCustomStyles() {\n const style = document.createElement('style');\n style.textContent = `\n ::-webkit-scrollbar {\n display: none;\n width: 0;\n height: 0;\n -webkit-appearance: none;\n }\n body {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n .-without-scrollbar::-webkit-scrollbar {\n display: none;\n }\n .-without-scrollbar {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n `;\n document.head.appendChild(style);\n }\n\n private createScrollbar() {\n this.scrollbar = document.createElement('div');\n this.scrollbar.classList.add('scrollbar');\n this.thumb = document.createElement('div');\n this.thumb.classList.add('thumb');\n this.scrollbar.appendChild(this.thumb);\n document.body.appendChild(this.scrollbar);\n\n this.scrollbarStateHorizontal = new StringScrollbarHorizontal(this.data, this.scrollbar, this.thumb);\n this.scrollbarStateVertical = new StringScrollbarVertical(this.data, this.scrollbar, this.thumb);\n this.scrollbarState = this.scrollbarStateHorizontal;\n }\n\n private updateThumb() {\n this.scrollbarState.updateThumb();\n }\n\n private mouseDownEvent(e: MouseEvent) {\n this.isDragging = true;\n this.scrollbarState.mouseDownEvent(e);\n document.body.style.userSelect = 'none';\n this.scrollbar.classList.add('-touch');\n }\n\n private mouseMoveEvent(e: MouseEvent) {\n if (!this.isDragging) return;\n\n this.scrollbarState.mouseMoveEvent(e);\n }\n\n private mouseUpEvent() {\n this.isDragging = false;\n document.body.style.userSelect = '';\n this.hideScrollbar();\n this.scrollbar.classList.remove('-touch');\n }\n\n private showScrollbar() {\n this.scrollbar.classList.add('-scroll');\n }\n\n private hideScrollbar() {\n if (this.scrollTimeout) {\n clearTimeout(this.scrollTimeout);\n }\n this.scrollTimeout = setTimeout(() => {\n this.scrollbar.classList.remove('-scroll');\n }, 1000);\n }\n}\n","import { StringObject } from '../../Objects/StringObject';\nimport { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringAnchor extends StringModule {\n oldLerp: number = 0\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'anchor';\n }\n initObject(object: StringObject, el: any): void {\n object.anchor = this.attribute.process(el, `string-anchor`, \"center center\");\n }\n onConnect(object: StringObject) {\n if (object.anchor == null || object.anchor == \"\") {\n object.anchor = \"center center\"\n }\n const p = object.anchor.split(' ');\n const x = this.parseOrig(p[0]);\n const y = this.parseOrig(p[1] || p[0]);\n object.el.style.transformOrigin = `${x} ${y}`;\n }\n\n private parseOrig(part: string) {\n part = part.trim();\n if (part.startsWith('random')) {\n const o = part.slice(7, -1).split(',').map(s => s.trim());\n const c = Math.floor(Math.random() * o.length);\n return o[c];\n } else {\n return part;\n }\n }\n}\n\n","import { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringGlide extends StringModule {\n private previousLerp: number = 0;\n private displacement: number = 0;\n private acceleration: number = 0;\n private velocityMultiplier: number = 0.00125;\n private isInitialScroll: boolean = true;\n\n private baseVelocityMultiplier: number = 0.00125;\n private reducedVelocityMultiplier: number = this.baseVelocityMultiplier / 20;\n private negativeVelocityMultiplier: number = -0.0001;\n\n private readonly ACCELERATION_STEP: number = 0.05;\n private readonly MIN_DISPLACEMENT: number = 0.01;\n private readonly MAX_DISPLACEMENT: number = 1;\n private readonly MIN_VELOCITY: number = -1;\n private readonly MAX_VELOCITY: number = 1;\n\n private maxDisplacementValue: number = 0;\n\n\n private setupItem = (object: any) => {\n const transformCompute = `translate3d(0, ${-this.data.dV * this.maxDisplacementValue * object.glide}px, 0)`;\n object.el.style.transform = transformCompute;\n }\n\n private onUpdateDesktopEvent = ()=>{\n for (let i = 0; i < this.objects.length; i++) {\n let object = this.objects[i]\n this.setupItem(object)\n }\n }\n private onUpdateMobileEvent = ()=>{}\n private onUpdateEvent = this.onUpdateDesktopEvent\n\n constructor(visitor: any, settings: any = null) {\n super(visitor);\n this.htmlKey = 'glide';\n\n if (settings) {\n const { baseVelocityMultiplier, reducedVelocityMultiplier, negativeVelocityMultiplier } = settings;\n this.baseVelocityMultiplier = baseVelocityMultiplier ?? this.baseVelocityMultiplier;\n this.reducedVelocityMultiplier = reducedVelocityMultiplier ?? this.reducedVelocityMultiplier;\n this.negativeVelocityMultiplier = negativeVelocityMultiplier ?? this.negativeVelocityMultiplier;\n }\n }\n\n private calcExpanderFactor(isDirectionUp: boolean): void {\n const isConditionMet = isDirectionUp\n ? this.data.v < this.previousLerp\n : this.data.v > this.previousLerp;\n\n this.velocityMultiplier = isConditionMet\n ? (this.isInitialScroll ? this.baseVelocityMultiplier : this.reducedVelocityMultiplier)\n : this.negativeVelocityMultiplier;\n\n if (!isConditionMet) {\n this.isInitialScroll = false;\n }\n }\n onStart(): void {\n this.maxDisplacementValue = this.data.wS * 0.1\n }\n\n onResize(): void {\n if (window.innerWidth > 1080) {\n this.maxDisplacementValue = this.data.wS * 0.1\n this.onUpdateEvent = this.onUpdateDesktopEvent\n } else {\n this.onUpdateEvent = this.onUpdateMobileEvent \n this.resetState();\n this.objects.forEach((object) => {\n this.setupItem(object);\n })\n }\n }\n\n private resetState(): void {\n this.displacement = 0;\n this.acceleration = 0;\n this.isInitialScroll = true;\n this.velocityMultiplier = this.baseVelocityMultiplier;\n }\n\n onScrollStart(): void {\n this.resetState();\n }\n\n onScrollStop(): void {\n this.resetState();\n this.previousLerp = 0;\n document.documentElement.style.setProperty('--glide', '0');\n for (let i = 0; i < this.objects.length; i++) {\n let object = this.objects[i]\n const transformCompute = `translate3d(0, 0px, 0)`;\n object.el.style.transform = transformCompute;\n }\n }\n\n onUpdate(data: StringData): void {\n this.calcExpanderFactor(this.data.sDB === false);\n this.acceleration = Math.min(this.MAX_DISPLACEMENT, this.acceleration + this.ACCELERATION_STEP);\n this.displacement = Math.max(this.MIN_DISPLACEMENT, Math.min(this.MAX_DISPLACEMENT, this.displacement + this.velocityMultiplier));\n this.data.dV = Math.min(this.MAX_VELOCITY, Math.max(this.MIN_VELOCITY, this.data.v * this.displacement * this.acceleration));\n document.documentElement.style.setProperty('--glide', this.data.dV.toString());\n this.previousLerp = this.data.v;\n this.onUpdateEvent()\n }\n}","import { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringLerp extends StringModule {\n oldLerp: number = 0\n constructor(visitor: any) {\n super(visitor);\n this._type = 2;\n }\n onScrollStop(): void {\n document.documentElement.style.setProperty('--lerp', \"0\");\n }\n onScroll(data: StringData): void {\n document.documentElement.style.setProperty('--lerp', this.data.v.toString());\n this.oldLerp = data.v\n }\n}\n","import { StringObject } from '../../Objects/StringObject';\nimport { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringParallax extends StringModule {\n private setupParallax = (object: StringObject, progress: number) => {\n let transformCompute = `translate3d(0, ${\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\n }px, 0)`;\n object.el.style.transform = transformCompute;\n object.connects.forEach((element) => {\n element.style.transform = transformCompute;\n });\n };\n\n private onScrollDesktopEvent = () => {\n this.objects.forEach((object) => {\n let progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\n object.el.style.setProperty(object.key, progress.toString());\n this.setupParallax(object, progress);\n });\n }\n private onScrollMobileEvent = () => {}\n private onScrollEvent = this.onScrollDesktopEvent\n\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'parallax';\n }\n\n onConnect(object: StringObject): void {\n if (this.settings != null) {\n if (this.settings['string-parallax-bias'] != null) {\n let parallaxPosition = this.attribute.process(object.el, 'string-parallax-bias', this.settings['string-parallax-bias']);\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\n }\n if (this.settings['string-parallax'] != null) {\n object.factor = this.settings['string-parallax'];\n }\n }\n \n }\n\n onScroll(data: StringData): void {\n this.onScrollEvent()\n }\n onChangeScrollDirection(): void {\n if (this.data.sD == 'vertical') {\n this.setupParallax = (object: StringObject, progress: number) => {\n let transformCompute = `translate3d(0, ${\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\n }px, 0)`;\n object.el.style.transform = transformCompute;\n object.connects.forEach((element) => {\n element.style.transform = transformCompute;\n });\n };\n } else {\n this.setupParallax = (object: StringObject, progress: number) => {\n let transformCompute = `translate3d(${\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\n }px, 0, 0)`;\n object.el.style.transform = transformCompute;\n object.connects.forEach((element) => {\n element.style.transform = transformCompute;\n });\n };\n }\n }\n\n onResize(): void {\n if (window.innerWidth > 1080) {\n this.onScrollEvent = this.onScrollDesktopEvent\n } else {\n this.onScrollEvent = this.onScrollMobileEvent \n this.objects.forEach((object) => {\n this.setupParallax(object, .5);\n })\n }\n }\n}\n","import { StringObject } from '../../Objects/StringObject';\nimport { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringProgress extends StringModule {\n private oldLerp = 0\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'progress';\n }\n\n onScroll(data: StringData): void {\n this.objects.forEach((object) => {\n this.setUpObject(object);\n });\n }\n\n onConnect(object: StringObject) {\n object.onEnter = () => {\n this.setUpObject(object);\n };\n }\n\n private setUpObject(object: StringObject) {\n const progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\n \n if (object.progress !== progress) {\n object.progress = progress;\n this.applyProgress(object);\n }\n }\n\n private applyProgress(object: StringObject) {\n const progressStr = object.progress.toString();\n\n this.events.emit(`progress_${object.id}`, object.progress);\n object.el.style.setProperty(object.key, progressStr);\n\n if (object.connects.length > 0) {\n object.connects.forEach((element) => {\n element.style.setProperty(object.key, progressStr);\n });\n }\n }\n\n}\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 \r\n this._scrollDirection = scrollDirection;\r\n if (this._scrollDirection == 'vertical') {\r\n this.onCalcUpdate = () => {\r\n \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","\nimport { StringData } from \"../../Utils/StringData\";\nimport { StringScroll } from \"./StringScroll\";\nimport { StringTypeSettings } from \"./StringTypeSettings\";\n\nexport class StringScrollDefault extends StringScroll {\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\n super(document, settings, data);\n this.name = 'mobile';\n }\n public onUpdate() {\n if (this.data.d!=0) {\n let delta = this.data.d * this.settings.speedAccelerate\n this.data.d -= delta\n this.data.v = delta \n\n if (Math.abs(this.data.v) < .1) {\n this.data.d = 0\n this.data.v = 0\n this.onScrollStop();\n } \n }\n }\n public onScroll(e: any) {\n this.data.c = this.d.documentElement.scrollTop;\n this.data.t = this.d.documentElement.scrollTop;\n }\n\n public onWheel(e: any) {\n if (e.deltaY != 0) {\n if (this.data.d == 0) {\n this.onScrollStart()\n }\n let plusDelta = e.deltaY\n if (this.data.t == 0) {\n this.data.d += Math.max(0, e.deltaY);\n }\n this.data.d += plusDelta;\n }\n }\n}","\nimport { StringData } from \"../../Utils/StringData\";\nimport { StringScroll } from \"./StringScroll\";\nimport { StringTypeSettings } from \"./StringTypeSettings\";\n\nexport class StringScrollDisable extends StringScroll {\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\n super(document, settings, data);\n this.name = 'disable';\n }\n\n public onUpdate() {}\n\n public onWheel(e: any) {\n e.preventDefault();\n }\n\n public onScroll(e: any) {\n e.preventDefault();\n }\n}","import { StringData } from '../../Utils/StringData';\r\nimport { StringScroll } from './StringScroll';\r\nimport { StringTypeSettings } from './StringTypeSettings';\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 this.isBottomScrollDirection = newDirection;\r\n this.data.sDB = newDirection;\r\n this.onChangeDirection();\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 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 this.onCalcUpdate();\r\n document.documentElement.classList.remove(CLASS_NAMES.SCROLL_BACK, CLASS_NAMES.SCROLL_FORWARD);\r\n }\r\n\r\n public onUpdate(): void {\r\n \r\n if (this.data.d != 0) {\r\n if (this.isScrollbarManipulation) {\r\n this.isScrollbarManipulation = false;\r\n this.data.c = this.data.t;\r\n this.onCalcUpdate();\r\n this.stopScroll();\r\n return;\r\n }\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 \r\n\r\n const absVelocity = Math.abs(this.data.v);\r\n this.data.c += this.data.v;\r\n this.updateScrollDirection(this.data.v > 0);\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 this.onCalcUpdate();\r\n }\r\n }\r\n\r\n\r\n //old\r\n // this.v = ((this.data.t - this.data.c) * 0.1)\r\n // if (this.v > 0.01 || this.v < -0.01) {\r\n // this.data.c = this.data.c +this.v;\r\n // this.isProg = true\r\n // document.documentElement.scrollTop = this.data.c\r\n // } else {\r\n // if(this.v != 0){\r\n // this.v = 0\r\n // this.data.c = this.data.t\r\n // this.isProg = false\r\n // this.d.documentElement.scrollTop = this.data.c\r\n // } \r\n // }\r\n }\r\n\r\n public onWheel(e: WheelEvent) {\r\n e.preventDefault()\r\n let plusDelta = e.deltaY;\r\n if (plusDelta === 0) return;\r\n\r\n if (this.data.d === 0) {\r\n this.onScrollStart();\r\n }\r\n\r\n let scrollDirection = Math.sign(plusDelta);\r\n if ((this.data.t === 0 && scrollDirection < 0) || (this.data.t === this.data.bS && scrollDirection > 0)) return;\r\n\r\n this.data.d += plusDelta;\r\n\r\n\r\n\r\n //old\r\n // if (e.deltaY != 0) {\r\n // e.preventDefault()\r\n // this.data.d = e.deltaY\r\n // this.data.t += this.data.d\r\n // this.data.t = Math.min(Math.max(this.data.t, 0), this.data.bS)\r\n // }\r\n }\r\n\r\n\r\n public onScroll(e: Event): void {\r\n \r\n if (!this.isProg) {\r\n this.isScrollbarManipulation = true;\r\n this.data.d = 1\r\n this.data.t = this.scrollContainer?.scrollTop ?? document.documentElement.scrollTop;\r\n } else {\r\n e.preventDefault()\r\n }\r\n }\r\n}","export class StringTypeSettings{\n private sC: number = 0.1\n private sA: number = 0.25\n\n public get speed() {\n return this.sC\n }\n public get speedAccelerate() {\n return this.sA\n }\n\n public set speedAccelerate(speed: number) {\n this.sA = speed\n }\n public set speed(speed: number) {\n this.sC = speed\n }\n\n \n}","import { StringObject } from '../../Objects/StringObject';\nimport { StringModule } from '../../StringModule';\n\ninterface ISplitOptions {\n line?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\n word?: Array<{\n align: string;\n random?: { min: number; max: number };\n abs?: boolean;\n }>;\n char?: Array<{\n align: string;\n random?: { min: number; max: number };\n abs?: boolean;\n }>;\n charLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\n charWord?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\n wordLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\n}\n\nexport class StringSplit extends StringModule {\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'split';\n }\n\n onStart(): void {}\n onResize(): void {\n document.querySelectorAll(`[string=\"split\"].-splited`).forEach((element) => {\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\n if (element.innerHTML != this.split(splitOptions, element).html) {\n element.innerHTML = this.split(splitOptions, element).html\n }\n });\n }\n\n onConnect(object: StringObject) {\n let element = object.el;\n if (!element.classList.contains('-splited')) {\n element.classList.add('-splited');\n element.setAttribute('string-split-original', element.innerHTML);\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\n \n if (element.innerHTML != this.split(splitOptions, element).html) {\n element.innerHTML = this.split(splitOptions, element).html\n }\n }\n }\n\n private parseSplitOptions(attributeValue: string | null): ISplitOptions {\n const options: ISplitOptions = {\n line: [],\n word: [],\n char: [],\n charLine: [],\n charWord: [],\n wordLine: [],\n };\n\n if (attributeValue) {\n const parts = attributeValue.split('|');\n\n parts.forEach((part) => {\n const match = part.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\n\n if (match) {\n const prefix = match[1] || '';\n const option = match[2];\n const params = match[4] ? match[4].split(',') : [];\n switch (prefix + option) {\n case 'char-line':\n (options.charLine as any[]).push(this.parseParam(params));\n break;\n case 'char-word':\n (options.charWord as any[]).push(this.parseParam(params));\n break;\n case 'word-line':\n (options.wordLine as any[]).push(this.parseParam(params));\n break;\n case 'line':\n (options.line as any[]).push(this.parseParam(params));\n break;\n case 'word':\n (options.word as any[]).push(this.parseParam(params));\n break;\n case 'char':\n (options.char as any[]).push(this.parseParam(params));\n break;\n }\n }\n });\n }\n\n return options;\n }\n\n private parseParam(params: string[]): { align: string; random?: { min: number; max: number }; abs?: boolean } {\n const result: { align: string; random?: { min: number; max: number }; abs?: boolean } = { align: 'start' };\n\n params.forEach((param) => {\n if (param === 'abs') {\n result.abs = true;\n } else if (param.startsWith('random')) {\n const match = param.match(/random\\((\\d+),(\\d+)\\)/);\n if (match) {\n result.random = { min: parseInt(match[1]), max: parseInt(match[2]) };\n result.align = 'random';\n } else {\n result.align = 'random';\n }\n } else if (['start', 'center', 'end'].includes(param)) {\n result.align = param;\n } else {\n result.align = 'start';\n }\n });\n\n return result;\n }\n\n public split(options: ISplitOptions, elementRoot: any): any {\n //let text = elementRoot.innerHTML;\n let text = elementRoot.getAttribute('string-split-original');\n if (text.length === 0) return '';\n\n text = this.decodeHtmlEntity(text);\n \n const element = document.createElement('span');\n const words = text.split(/\\s+/);\n let globalCharIndex = 0;\n let globalWordIndex = 0;\n const totalChars = text.replace(/\\s/g, '').length;\n\n const tempSpan = document.createElement('span');\n const compStyles = window.getComputedStyle(elementRoot);\n\n tempSpan.style.fontFamily = compStyles.fontFamily;\n tempSpan.style.fontSize = compStyles.fontSize;\n tempSpan.style.letterSpacing = compStyles.letterSpacing;\n tempSpan.style.lineHeight = compStyles.lineHeight;\n tempSpan.style.fontWeight = compStyles.fontWeight;\n tempSpan.classList.add('-s-char');\n document.body.appendChild(tempSpan);\n\n let virtualLines: any[] = [];\n let virtualLine: any[] = [];\n let currentLineWidth = 0;\n words.forEach((word: any, wordIndex: any) => {\n tempSpan.textContent = word;\n if (word.length > 0) {\n tempSpan.textContent += '\\u00a0';\n }\n\n const wordWidth = tempSpan.offsetWidth;\n\n const virtualWordSpan = {\n text: word,\n width: wordWidth,\n chars: new Array<any>(),\n };\n const chars = Array.from(word);\n chars.forEach((char, charIndex) => {\n const virtualCharSpan = {\n text: char,\n };\n\n virtualWordSpan.chars.push(virtualCharSpan);\n });\n if (currentLineWidth + wordWidth > elementRoot.offsetWidth) {\n virtualLines.push(virtualLine);\n virtualLine = [];\n currentLineWidth = 0;\n globalCharIndex += virtualLine.length;\n }\n virtualLine.push(virtualWordSpan);\n currentLineWidth += wordWidth;\n });\n\n virtualLines.push(virtualLine);\n\n let hasLineOptions = false;\n if (options.line != null) {\n if (options.line.length > 0) {\n hasLineOptions = true;\n }\n }\n if (options.wordLine != null) {\n if (options.wordLine.length > 0) {\n hasLineOptions = true;\n }\n }\n if (options.charLine != null) {\n if (options.charLine.length > 0) {\n hasLineOptions = true;\n }\n }\n\n let addedWordsCount = 0;\n if (hasLineOptions) {\n // for (let i = 0; i < virtualLines.length; i++) {\n // addedWordsCount += virtualLines[i].length;\n // }\n for (let i = 0; i < virtualLines.length; i++) {\n this.appendVirtualLineToDOM(\n i,\n virtualLines.length,\n words.length,\n element,\n virtualLines[i],\n options,\n globalCharIndex,\n totalChars,\n addedWordsCount\n );\n addedWordsCount += virtualLines[i].length;\n }\n } else {\n for (let i = 0; i < virtualLines.length; i++) {\n virtualLines[i].forEach((virtualWordSpan: any, wordIndex: any) => {\n if (virtualWordSpan.chars.length > 0) {\n const wordSpan = document.createElement('span');\n wordSpan.classList.add('-s-word');\n if ((options.char!=null && options.char?.length > 0) || (options.charWord != null && options.charWord?.length > 0)) {\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\n const charSpan = document.createElement('span');\n charSpan.classList.add('-s-char');\n charSpan.textContent = virtualCharSpan.text;\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\n wordSpan.appendChild(charSpan);\n globalCharIndex++;\n });\n } else {\n wordSpan.textContent = virtualWordSpan.text;\n }\n \n\n this.applyOptions(wordSpan, options.word, globalWordIndex, 'word', wordIndex, words.length);\n if (virtualWordSpan.chars.length > 0) {\n wordSpan.innerHTML += '\\u00a0';\n }\n element.appendChild(wordSpan);\n globalWordIndex++;\n }\n });\n }\n }\n\n document.body.removeChild(tempSpan);\n return { html: element.innerHTML };\n }\n\n // TODO: remove line - char,word\n private appendVirtualLineToDOM(\n lineIndex: number,\n length: number,\n totalWords: number,\n element: HTMLSpanElement,\n virtualLine: any[],\n options: ISplitOptions,\n globalCharIndex: number,\n totalChars: number,\n addedWordsCount: number\n ) {\n const lineSpan = document.createElement('span');\n lineSpan.classList.add('-s-line');\n\n this.applyOptions(lineSpan, options.line, lineIndex, 'line', 0, length);\n\n let lineCharIndex = 0;\n let globalWordIndex = 0;\n let totalLineChars = 0;\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\n totalLineChars += virtualWordSpan.text.length;\n });\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\n if (virtualWordSpan.chars.length > 0) {\n const wordSpan = document.createElement('span');\n wordSpan.classList.add('-s-word');\n\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\n const charSpan = document.createElement('span');\n charSpan.classList.add('-s-char');\n charSpan.textContent = virtualCharSpan.text;\n\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\n this.applyOptions(charSpan, options.charLine, lineCharIndex, 'char-line', charIndex, totalLineChars);\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\n\n wordSpan.appendChild(charSpan);\n globalCharIndex++;\n lineCharIndex++;\n });\n\n this.applyOptions(\n wordSpan,\n options.word,\n addedWordsCount + globalWordIndex,\n 'word',\n addedWordsCount + globalWordIndex,\n totalWords - 1\n );\n this.applyOptions(wordSpan, options.wordLine, wordIndex, 'word-line', wordIndex, virtualLine.length);\n\n if (wordIndex < virtualLine.length - 1) {\n wordSpan.innerHTML += '\\u00a0';\n }\n // +'\\u00a0';\n\n lineSpan.appendChild(wordSpan);\n // if (wordIndex < virtualLine.length - 1) {\n // lineSpan.appendChild(this.createSpaceSpan());\n // }\n globalWordIndex++;\n }\n });\n\n element.appendChild(lineSpan);\n }\n\n private applyOptions(\n span: HTMLSpanElement,\n optionArray: any[] | undefined,\n globalIndex: number,\n type: string,\n localIndex: number,\n parentLength: number\n ) {\n if (optionArray) {\n optionArray.forEach((option, optionIndex) => {\n let index = this.calculateIndex(option, globalIndex, localIndex, parentLength);\n\n const variableName = this.generateVariableName(type, option, optionIndex);\n span.style.setProperty(variableName, String(index));\n });\n }\n }\n\n private createSpaceSpan(): HTMLSpanElement {\n const spaceSpan = document.createElement('span');\n spaceSpan.innerHTML = '\\u00a0';\n return spaceSpan;\n }\n\n private decodeHtmlEntity(str: string) {\n return str.replace(/&/g, '&');\n }\n\n private calculateIndex(\n options: { align: string; random?: { min: number; max: number }; abs?: boolean },\n globalIndex: number,\n localIndex: number,\n parentLength: number\n ): number {\n let index = globalIndex;\n if (options.align === 'random') {\n if (options.random === undefined) {\n options.random = { min: 0, max: parentLength };\n }\n const min = options.random.min || 0;\n const max = options.random.max || parentLength;\n index = Math.floor(Math.random() * (max - min + 1)) + min;\n }\n if (options.align === 'end') {\n index = parentLength - index - 1;\n } else if (options.align === 'center') {\n index = index - Math.floor(parentLength / 2);\n }\n\n if (options.abs) {\n index = Math.abs(index);\n }\n return index;\n }\n\n private generateVariableName(\n type: string,\n option: { align: string; random?: { min: number; max: number }; abs?: boolean },\n index: number\n ): string {\n let variableName = `--${type}`;\n if (option.align) {\n variableName += `-${option.align}`;\n }\n return variableName;\n }\n}\n","export class StringFPS {\r\n private isAnimationStarted: boolean = false;\r\n private fpsInterval: number = 0;\r\n private then: number = 0;\r\n private requestAnimationId: number = 0;\r\n private onFrameCallback: () => void = () => { };\r\n private animate: () => void = () => { };\r\n\r\n public start(fps: number) {\r\n if (this.isAnimationStarted) { return; }\r\n this.fpsInterval = 1000 / fps;\r\n this.then = performance.now();\r\n this.isAnimationStarted = true;\r\n\r\n\r\n if (fps == 0) {\r\n this.animate = () => {\r\n this.onFrameCallback();\r\n this.requestAnimationId = requestAnimationFrame(() => this.animate());\r\n };\r\n } else {\r\n this.animate = () => {\r\n this.requestAnimationId = requestAnimationFrame(() => this.animate());\r\n const now = performance.now();\r\n const elapsed = now - this.then;\r\n if (elapsed > this.fpsInterval) {\r\n this.then = now - (elapsed % this.fpsInterval);\r\n this.onFrameCallback();\r\n }\r\n };\r\n }\r\n this.animate()\r\n }\r\n\r\n public stop() {\r\n if (!this.isAnimationStarted) { return; }\r\n cancelAnimationFrame(this.requestAnimationId);\r\n this.requestAnimationId = 0;\r\n this.isAnimationStarted = false;\r\n }\r\n\r\n public setOnFrame(callback: () => void) {\r\n this.onFrameCallback = callback;\r\n }\r\n}","import { StringModule } from '../StringModule';\nimport { StringData } from '../Utils/StringData';\n\nexport class StringDelayLerpTracker extends StringModule {\n private canvas: any\n private context: any\n private positionHistory: any\n private maxHistory: any\n private currentPosition: any\n private targetPosition: any\n\n private canvasHeight = 0\n constructor(visitor: any) {\n super(visitor);\n this._type = 2;\n\n \n\n \n }\n\n onStart(): void {\n this.canvas = document.createElement('canvas');\n this.context = this.canvas.getContext('2d');\n this.canvas.width = window.innerWidth * .5;\n this.canvas.height = window.innerHeight / 15 - 20;\n this.canvasHeight = window.innerHeight / 15 - 20;\n this.canvas.style.position = 'fixed';\n this.canvas.style.bottom = `${window.innerHeight / 20 + 10}px`;\n this.canvas.style.left = '50%';\n this.canvas.style.transform = 'translateX(-50%)';\n this.canvas.style.backgroundColor = '#000000';\n this.canvas.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n this.canvas.style.zIndex = '1000';\n document.body.appendChild(this.canvas);\n\n this.positionHistory = [];\n this.maxHistory = this.canvas.width;\n this.currentPosition = 0;\n this.targetPosition = 0;\n }\n\n onScroll(data: StringData): void {\n this.currentPosition = Math.abs(this.data.dV);\n this.positionHistory.push(this.currentPosition);\n if (this.positionHistory.length > this.maxHistory) {\n this.positionHistory.shift();\n }\n this.drawGraph();\n }\n\n\n drawGraph() {\n const ctx = this.context;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n ctx.strokeStyle = '#e0e0e0';\n ctx.lineWidth = 1;\n ctx.strokeStyle = 'red';\n ctx.lineWidth = 2;\n ctx.beginPath();\n this.positionHistory.forEach((pos: any, index: any) => {\n const x = index;\n const y = this.canvas.height - pos * this.canvasHeight;\n if (index === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n });\n ctx.stroke();\n }\n\n setTargetPosition(position: number) {\n this.targetPosition = position;\n }\n}\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringFPSTracker extends StringModule {\r\n private callCount = 0;\r\n private rafId: number | null = null;\r\n private displayElement: any = null;\r\n private lastUpdateTime = 0;\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.style.color = '#ffffff';\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(data-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 private updateLoop = (timestamp: number) => {\r\n if (!this.lastUpdateTime) {\r\n this.lastUpdateTime = timestamp;\r\n }\r\n const delta = timestamp - this.lastUpdateTime;\r\n if (delta >= 1000) {\r\n this.displayElement.setAttribute('data-fps', this.callCount);\r\n // if (this.displayElement) {\r\n // this.displayElement.textContent = `FPS: ${this.callCount}`;\r\n // }\r\n this.callCount = 0;\r\n this.lastUpdateTime = timestamp;\r\n }\r\n this.rafId = requestAnimationFrame(this.updateLoop);\r\n };\r\n onStart() {\r\n this.createDisplayElement();\r\n this.lastUpdateTime = 0;\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n this.updateLoop(this.lastUpdateTime)\r\n }\r\n\r\n destructor() {\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\nimport { StringData } from '../Utils/StringData';\n\nexport class StringLerpTracker extends StringModule {\n private canvas: any\n private context: any\n private positionHistory: any\n private maxHistory: any\n private currentPosition: any\n private targetPosition: any\n constructor(visitor: any) {\n super(visitor);\n this._type = 2;\n\n \n\n \n }\n\n onStart(): void {\n this.canvas = document.createElement('canvas');\n this.context = this.canvas.getContext('2d');\n this.canvas.width = window.innerWidth * .5;\n this.canvas.height = window.innerHeight / 15 - 20;\n this.canvas.style.position = 'fixed';\n this.canvas.style.bottom = '10px';\n this.canvas.style.left = '50%';\n this.canvas.style.transform = 'translateX(-50%)';\n this.canvas.style.backgroundColor = '#000000';\n this.canvas.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n this.canvas.style.zIndex = '1000';\n document.body.appendChild(this.canvas);\n\n this.positionHistory = [];\n this.maxHistory = this.canvas.width;\n this.currentPosition = 0;\n this.targetPosition = 0;\n }\n\n onScroll(data: StringData): void {\n this.currentPosition = Math.abs(this.data.v);\n this.positionHistory.push(this.currentPosition);\n if (this.positionHistory.length > this.maxHistory) {\n this.positionHistory.shift();\n }\n this.drawGraph();\n }\n\n\n drawGraph() {\n const ctx = this.context;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n ctx.strokeStyle = '#e0e0e0';\n ctx.lineWidth = 1;\n ctx.strokeStyle = '#007bff';\n ctx.lineWidth = 2;\n ctx.beginPath();\n this.positionHistory.forEach((pos: any, index: any) => {\n const x = index;\n const y = this.canvas.height - pos / 2;\n if (index === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n });\n ctx.stroke();\n }\n\n setTargetPosition(position: number) {\n this.targetPosition = position;\n }\n}\n","import { StringModule } from '../StringModule';\nimport { StringData } from '../Utils/StringData';\n\nexport class StringPositionTracker extends StringModule {\n private callCount: number = 0;\n private intervalId: any;\n private displayElement: any;\n\n constructor(visitor: any) {\n super(visitor);\n this._type = 2;\n }\n private createDisplayElement() {\n this.displayElement = document.createElement('div');\n this.displayElement.style.position = 'fixed';\n this.displayElement.style.bottom = '10px';\n this.displayElement.style.left = '10px';\n this.displayElement.style.backgroundColor = '#000000';\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n this.displayElement.style.zIndex = '9999';\n this.displayElement.setAttribute('data-position', '0');\n document.body.appendChild(this.displayElement);\n const style = document.createElement('style');\n style.innerHTML = `\n [data-position]::after {\n content: attr(direction) 'Top: ' attr(value) 'px';\n position: relative;\n display: block;\n color: #ffffff;\n padding: 5px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n `;\n document.head.appendChild(style);\n }\n onStart() {\n this.createDisplayElement();\n }\n\n onScroll(data: StringData): void {\n let dirSymbol = ``;\n if (data.c < data.t) {\n dirSymbol = `↓`;\n }\n if (data.c > data.t) {\n dirSymbol = `↑`;\n }\n this.displayElement.setAttribute('direction', dirSymbol);\n this.displayElement.setAttribute('value', `${this.data.c}`);\n }\n\n onUpdate(data: StringData): void {\n this.callCount++;\n }\n\n destructor() {\n document.body.removeChild(this.displayElement);\n }\n}\n","export class StringAttribute{\n process(e: any, n: string, d: any = null) {\n return e.getAttribute(n) == null ? d : e.getAttribute(n)\n }\n}","export class StringBoundingClientRect {\n process(e: any) {\n return e.getBoundingClientRect();\n }\n}\n","export class StringData {\n three: any = null;\n\n t: number = 0;\n c: number = 0;\n d: number = 0;\n v: number = 0;\n dV: number = 0;\n sDB: boolean = false;\n\n bS: number = 0;\n cF: number = 1;\n wS: number = 0;\n hnwS: number = 0;\n\n psW: number = 0;\n psH: number = 0;\n\n cL: any = {x:0,y:0}\n\n scsW: number = 1;\n scsH: number = 1;\n sD: 'vertical' | 'horizontal' = 'vertical';\n sC: any;\n sM: 'smooth' | 'disable' | 'default' = 'smooth';\n}\n","export class StringEvent{\n\n private eventsByKey: Map<string, Array<Function>> = new Map<string, Array<Function>>()\n private events: Array<Function> = new Array<Function>()\n on(id: string, event: Function){\n if ( this.eventsByKey.has(id) == false) { \n this.eventsByKey.set(id, [])\n }\n this.eventsByKey.get(id)?.push(event)\n this.updateAllEvents()\n }\n public has(id: string) {\n return this.eventsByKey.has(id)\n }\n public emit(id: string, value: any) {\n if (this.eventsByKey.has(id)) {\n this.eventsByKey.get(id)?.forEach((event: any) => {\n event(value)\n });\n }\n }\n public off(id: string, event: Function) {\n let ea = this.eventsByKey.get(id)\n if (ea!=null) {\n this.eventsByKey.set(id, ea.filter((h: any) => h !== event))\n }\n this.updateAllEvents()\n }\n public all(value: any) {\n this.events.forEach(event => {\n event(value)\n });\n }\n private updateAllEvents() {\n Array.from(this.eventsByKey.values()).forEach(listOfEvents => {\n listOfEvents.forEach(event => {\n this.events.push(event)\n });\n });\n }\n}","export class StringParser{\n public parseSingle(v: string, element: any, wH: any, baseRem: number): number {\n let isNegative = v.startsWith('-');\n if (isNegative) {\n v = v.slice(1);\n }\n let pV;\n if (v === 'selfHeight') {\n pV = element.offsetHeight;\n } else if (v.endsWith('px')) {\n pV = parseFloat(v);\n } else if (v.endsWith('%')) {\n pV = parseFloat(v) * wH / 100;\n } else if (v.endsWith('rem')) {\n pV = parseFloat(v) * baseRem;\n }\n return isNegative ? -pV : pV;\n }\n}","function nullifyTransforms(el: any) {\n let { top, left, width, height } = el.getBoundingClientRect();\n let transformArr = parseTransform(el);\n if (transformArr.length == 6) {\n var t = transformArr;\n let det = t[0] * t[3] - t[1] * t[2];\n return {\n width: width / t[0] == 0 ? 1 : t[0],\n height: height / t[3] == 0 ? 1 : t[3],\n left: (left * t[3] - top * t[2] + t[2] * t[5] - t[4] * t[3]) / det,\n top: (-left * t[1] + top * t[0] + t[4] * t[1] - t[0] * t[5]) / det,\n };\n } else {\n return { top, left, width, height };\n }\n function parseTransform(el: any) {\n let transform = window.getComputedStyle(el).transform;\n return transform\n .split(/\\(|,|\\)/)\n .slice(1, -1)\n .map(function (v) {\n return parseFloat(v);\n });\n }\n}\n\nexport class StringPosition {\n process(e: any, container: any = document.body) {\n let br;\n try {\n br = container.getBoundingClientRect();\n } catch (error) {\n br = document.body.getBoundingClientRect();\n }\n let er = nullifyTransforms(e);\n let o = er.top - br.top;\n let oL = er.left - br.left;\n return { top: o, left: oL };\n }\n}\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.setOnFrame(() => {\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' | 'lerp' | 'inview' | 'cursor' | 'lazy-loaded' | 'update' | 'start' | 'mousemove-pixel' | 'mousemove-start' | 'mousemove-end']: string } = {\r\n 'scroll': 'scroll',\r\n 'progress': 'progress_',\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 const attributes = this.getAllAttributes(el);\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 = attributes[\"string-enter-el\"] ?? this.defaultSettings.stringEnterEl;\r\n let startSourcePosition = attributes[\"string-enter-vp\"] ?? this.defaultSettings.stringEnterVp;\r\n let endElementPosition = attributes[\"string-exit-el\"] ?? this.defaultSettings.stringExitEl;\r\n let endSourcePosition = attributes[\"string-exit-vp\"] ?? this.defaultSettings.stringExitVp;\r\n\r\n object.inviewTop = this._parser.parseSingle(\r\n attributes[\"string-inview-top\"] ?? attributes[\"string-inview-left\"] ?? this.defaultSettings.stringInviewTop,\r\n el, this.data.sD == 'vertical' ? rH : rW, 16\r\n ) * -1;\r\n \r\n object.inviewBottom = this._parser.parseSingle(\r\n attributes[\"string-inview\"] ?? attributes[\"string-inview-bottom\"] ?? attributes[\"string-inview-right\"] ?? this.defaultSettings.stringInviewBottom,\r\n el, this.data.sD == 'vertical' ? rH : rW, 16\r\n ) * -1;\r\n\r\n object.selfDisable = attributes[\"string-self-disable\"] !== undefined;\r\n object.abs = attributes[\"string-abs\"] !== undefined;\r\n object.cursorTargetDisabled = attributes[\"string-cursor-target-disable\"] !== undefined;\r\n object.cursorTargetStyleDisabled = attributes[\"string-cursor-target-style-disable\"] !== undefined;\r\n\r\n let targetQuery = attributes[\"string-cursor-class\"];\r\n if (targetQuery) {\r\n object.cursorTargetClass = targetQuery;\r\n }\r\n\r\n object.id = attributes[\"string-id\"] ?? `string-${this.globalId}`;\r\n object.key = attributes[\"string-key\"] ?? this.defaultSettings.stringKey;\r\n object.keys = (attributes[\"string\"] ?? \"\").split('|');\r\n\r\n object.strength = attributes[\"string-strength\"] ?? this.defaultSettings.stringStrength;\r\n object.radius = attributes[\"string-radius\"] ?? this.defaultSettings.stringRadius;\r\n object.lerp = attributes[\"string-lerp\"] ?? this.defaultSettings.stringLerp;\r\n object.weight = parseFloat(attributes[\"string-weight\"] ?? \"0.0\");\r\n object.glide = parseFloat(attributes[\"string-glide\"] ?? \"1\");\r\n\r\n let parallaxPosition = parseFloat(attributes[\"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 = attributes[\"string-alignment\"] ?? 'center';\r\n\r\n el.setAttribute(`string-id`, object.id);\r\n object.size = this.data.sD == 'vertical' ? rH : rW;\r\n\r\n object.oStart = this._parser.parseSingle(\r\n attributes[\"string-offset-top\"] ?? attributes[\"string-offset-left\"] ?? this.defaultSettings.stringOffsetStart,\r\n el, this.data.wS, 16\r\n );\r\n object.oEnd = this._parser.parseSingle(\r\n attributes[\"string-offset-bottom\"] ?? attributes[\"string-offset-right\"] ?? this.defaultSettings.stringOffsetEnd,\r\n el, this.data.wS, 16\r\n );\r\n\r\n let observerStart = object.oStart;\r\n let observerEnd = object.oEnd;\r\n\r\n let stringModuleKeys = (attributes[\"string\"] ?? \"\").split('|');\r\n object.factor = 0;\r\n if (stringModuleKeys.includes('parallax')) {\r\n observerStart = observerEnd = object.oStart = object.oEnd = 0;\r\n object.factor = parseFloat(attributes[\"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 = attributes[\"string-repeat\"] !== undefined;\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 let startPos = this.data.sD == 'vertical'\r\n ? this._position.process(el, this.data.sC).top / this.data.scsH\r\n : this._position.process(el, this.data.sC).left / this.data.scsW;\r\n\r\n object.start = startPos;\r\n object.end = startPos + (this.data.sD == 'vertical' ? rH : rW);\r\n\r\n object.calculatePositions(windowSize);\r\n\r\n let connectItems = this.connectQueue.filter(item => item.id == object.id);\r\n this.connectQueue = this.connectQueue.filter(item => item.id != object.id);\r\n connectItems.forEach(connectItem => object.connects.push(connectItem.element));\r\n\r\n let callbackProgress = (entries: any) => {\r\n entries.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n if (!object.active) {\r\n this.events.emit(`activate_object_${object.id}`, true);\r\n object.enter();\r\n }\r\n } else {\r\n if (object.active) {\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 = (entries: any) => {\r\n entries.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\r\n let optionsProgress = {\r\n root: null,\r\n rootMargin: `${observerStart + this.data.wS * .3}px 0px ${observerEnd + this.data.wS * .3}px 0px`,\r\n threshold: 0.001,\r\n };\r\n \r\n let optionsInview = {\r\n root: null,\r\n rootMargin: `${observerStart + object.inviewTop}px 0px ${observerEnd + object.inviewBottom}px 0px`,\r\n threshold: 0.001,\r\n };\r\n\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n\r\n obProgress.observe(el);\r\n obInview.observe(el);\r\n\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\nprivate getAllAttributes(el: HTMLElement): Record<string, any> {\r\n let attributes: Record<string, any> = {};\r\n Array.from(el.attributes).forEach(attr => {\r\n attributes[attr.name] = attr.value;\r\n });\r\n return attributes;\r\n}\r\n\r\n\r\n addObject(el: HTMLElement) {\r\n \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 if (this._attribute.process(element, `string-fixed`) == null ? false : true) {\r\n return\r\n }\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 if (this._attribute.process(element, `string-fixed`) == null ? false : true) {\r\n return\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 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 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 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 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 this.data.hnwS = this.data.wS * -0.5;\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","keys","includes","connect","onConnect","addObject","id","has","set","push","removeObject","delete","index","indexOf","splice","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","process","started","tagName","toLowerCase","setAttribute","muted","tryPlay","once","console","warn","play","catch","err","then","remapLerp","inMin","inMax","outMin","outMax","StringCursor","oldX","oldY","enterObjectsMap","enterObjects","overCount","cursor","querySelector","cursorContent","mouseLerp","rawLerpValue","requestAnimationFrame","isMouseOver","cursorTargetDisabled","rect","getBoundingClientRect","elementX","x","left","elementY","y","top","dx","mousePixelFloatX","dy","mousePixelFloatY","isMouseMove","lerpX","lerpY","offsetX","calculateOffset","alignment","offsetY","mouseX","mouseY","setMouseCoordinates","halfWidth","halfHeight","Math","abs","cursorData","smoothX","smoothY","setProperty","timeoutId","onMouseEnterEventBind","onMouseLeaveEventBind","cursorTargetClass","length","remove","clearTimeout","removeEventListener","onEnter","onLeave","cursorTargetStyleDisabled","selfDisable","toFixed","connects","mousePos","size","StringMagnetic","strength","radius","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","sqrt","magneticTargetX","magneticTargetY","isMagneting","magneticX","magneticY","toString","StringLerpCalc","current","target","amt","StringVirtualCursor","targetX","targetY","_x","_y","_lerpX","_lerpY","_lF","pow","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","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","StringAnchor","oldLerp","p","split","parseOrig","transformOrigin","part","trim","startsWith","slice","map","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","name","vT","onCalcUpdate","scrollContainer","_scrollDirection","d","scrollDirection","StringScrollDefault","delta","speedAccelerate","scrollTop","plusDelta","StringScrollDisable","preventDefault","CLASS_NAMES","StringScrollSmooth","isScrollbarManipulation","isBottomScrollDirection","velocityThreshold","previousCurrent","updateScrollDirection","newDirection","isForward","toggle","stopScroll","speed","absVelocity","sign","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","from","charIndex","virtualCharSpan","hasLineOptions","addedWordsCount","appendVirtualLineToDOM","wordSpan","charSpan","applyOptions","removeChild","lineIndex","totalWords","lineSpan","lineCharIndex","totalLineChars","span","optionArray","globalIndex","localIndex","parentLength","optionIndex","calculateIndex","variableName","generateVariableName","String","createSpaceSpan","spaceSpan","str","StringFPS","isAnimationStarted","fpsInterval","requestAnimationId","onFrameCallback","animate","fps","performance","now","elapsed","stop","cancelAnimationFrame","setOnFrame","callback","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","rafId","displayElement","lastUpdateTime","updateLoop","timestamp","createDisplayElement","right","color","StringLerpTracker","StringPositionTracker","dirSymbol","StringAttribute","n","StringBoundingClientRect","StringData","three","cF","hnwS","cL","scsW","scsH","StringEvent","eventsByKey","on","event","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","initMutationObserver","connectTargetId","connectTargetObject","destroy","eventName","setupSettings","setupObject","disconnect","attributes","getAllAttributes","r","rW","rH","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","targetQuery","observerStart","observerEnd","stringModuleKeys","connectItems","item","connectItem","optionsProgress","rootMargin","threshold","optionsInview","obProgress","IntersectionObserver","entries","isIntersecting","obInview","attr","removedObject","removeAttribute","newWW","newWH","handleRemovedElement","removeId","connectQueueItem","handleAddedElement","MutationObserver","mutations","mutation","removedNodes","removedNode","nodeType","Node","ELEMENT_NODE","childElement","addedNodes","addedNode","childList","subtree","transformContainer","b","scrollWidth","scrollHeight","clientWidth","clientHeight"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"index.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAoB,WAAID,IAExBD,EAAiB,WAAIC,GACtB,CATD,CASGK,MAAM,I,mBCRT,IAAIC,EAAsB,CCA1BA,EAAwB,CAACL,EAASM,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAER,EAASO,IAC5EE,OAAOC,eAAeV,EAASO,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFT,EAAyBL,IACH,oBAAXkB,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeV,EAASkB,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeV,EAAS,aAAc,CAAEoB,OAAO,GAAO,G,kaCMvD,MAAMC,EAcX,QAAWC,GACT,OAAOlB,KAAKmB,KACd,CACA,WAAAC,CAAYC,EAAcC,EAAgB,MAR1C,KAAAA,SAAgB,KACN,KAAAC,WAAwC,IAAIC,IAC5C,KAAAC,QAA+B,IAAIC,MACnC,KAAAC,QAAkB,GAClB,KAAAR,MAAgB,EAKxBnB,KAAK4B,KAAOP,EAAQO,KACpB5B,KAAK6B,KAAOR,EAAQQ,KACpB7B,KAAK8B,UAAYT,EAAQS,UACzB9B,KAAK+B,mBAAqBV,EAAQU,mBAClC/B,KAAKgC,SAAWX,EAAQW,SACxBhC,KAAKiC,cAAgBZ,EAAQY,cAC7BjC,KAAKkC,OAASb,EAAQa,OACtBlC,KAAKmC,KAAOd,EAAQc,KACpBnC,KAAKsB,SAAWA,CAClB,CACA,UAAAc,CAAWC,EAAsBC,GAAwB,CACzD,aAAAC,GAAwB,CACxB,YAAAC,GAAuB,CACvB,iBAAAC,GAA4B,CAE5B,UAAAC,GACE1C,KAAKyB,QAAU,IAAIC,MACnB1B,KAAKuB,WAAa,IAAIC,GACxB,CAEA,oBAAAmB,GAA8B,CAE9B,UAAAC,CAAWP,GACT,OAAOA,EAAOQ,KAAKC,SAAS9C,KAAK2B,QACrC,CACE,OAAAoB,CAAQV,GACNA,EAAOU,QAAQ/C,MACfA,KAAKgD,UAAUX,EACjB,CACA,SAAAY,CAAUC,EAAYb,GACfrC,KAAKuB,WAAW4B,IAAID,KACrBlD,KAAKuB,WAAW6B,IAAIF,EAAIb,GACxBrC,KAAKyB,QAAQ4B,KAAKhB,GAExB,CAEA,YAAAiB,CAAaJ,GACT,MAAMb,EAASrC,KAAKuB,WAAWf,IAAI0C,GACnC,GAAIb,EAAQ,CACRrC,KAAKuB,WAAWgC,OAAOL,GACvB,MAAMM,EAAQxD,KAAKyB,QAAQgC,QAAQpB,IACpB,IAAXmB,GACAxD,KAAKyB,QAAQiC,OAAOF,EAAO,E,CAGvC,CAGA,OAAAG,GAAiB,CACjB,QAAAC,CAAUhC,GAAyB,CACnC,QAAAiC,GAAkB,CAClB,SAAAb,CAAUX,GAA6B,CACvC,SAAAyB,GAAmB,CACnB,QAAAC,CAASnC,GAAyB,CAClC,WAAAoC,CAAYC,GAAsB,CAClC,OAAAC,CAAQD,GAAsB,CAC9B,cAAAE,GAAwB,CACxB,uBAAAC,GAAiC,CACjC,kBAAAC,CAAmBC,EAAiBC,GAA0B,ECpFzD,MAAMC,UAAmBvD,EAG9B,WAAAG,CAAYC,GACVoD,MAAMpD,GAHA,KAAAqD,eAAyB,EACzB,KAAAC,kBAA4B,EAGlC3E,KAAK2B,QAAU,MACjB,CAEA,OAAAgC,GACoBiB,SAASC,iBAAiB,oBAClCC,SAASC,IACjB/E,KAAKgF,KAAKD,EAAQ,IAEpB/E,KAAK0E,eAAgB,CACvB,CAEA,SAAA1B,CAAUX,GAER,GADArC,KAAK2E,oBACD3E,KAAK0E,cAAe,CACtB,IAAIK,EAAe1C,EAAOC,GAC1BtC,KAAKgF,KAAKD,E,CAEd,CAEQ,IAAAC,CAAKD,GACX/E,KAAKiF,aAAaF,EAASA,EAAQG,aAAa,gBAChDH,EAAQI,UAAUC,IAAI,YACtBL,EAAQM,IAAMN,EAAQG,aAAa,eACnCH,EAAQO,iBAAiB,QAAQ,KAC/BP,EAAQI,UAAUC,IAAI,UAAU,GAGpC,CAEQ,YAAAH,CAAaF,EAAsBQ,GACzC,OAAO,IAAIC,SAAQ,CAACC,EAASC,KAC3B,MAAMC,EAAM,IAAIC,eAChBD,EAAIE,KAAK,MAAON,GAAK,GACrBI,EAAIG,aAAe,cACnBH,EAAII,OAAS,KACX,GAAmB,MAAfJ,EAAIK,QAAiC,MAAfL,EAAIK,OAAgB,CAC5C,MAAMC,EAASN,EAAIO,SACbC,EAAO,IAAIC,KAAK,CAACH,IACjBI,EAAM,IAAIC,MAChBD,EAAIN,OAAS,KACXhB,EAAQwB,MAAMC,YAAc,GAAGH,EAAII,WAAWJ,EAAIK,SAClDjB,EAAQ,CAAEgB,MAAOJ,EAAII,MAAOC,OAAQL,EAAIK,SACxCC,IAAIC,gBAAgBP,EAAIhB,KACxBrF,KAAK2E,oBACD3E,KAAK2E,mBAAqB,IAC5B3E,KAAKkC,OAAO2E,KAAK,mBAAoB,MACrC7G,KAAK2E,kBAAoB,E,EAG7B0B,EAAIS,QAAU,KACZpB,EAAO,IAAIqB,MAAM,wBAAwB,EAE3CV,EAAIhB,IAAMsB,IAAIK,gBAAgBb,E,MAE9BT,EAAO,IAAIqB,MAAM,wB,EAGrBpB,EAAImB,QAAU,KACZpB,EAAO,IAAIqB,MAAM,iBAAiB,EAEpCpB,EAAIsB,iBAAiB,QAAS,YAC9BtB,EAAIuB,MAAM,GAEd,ECnEK,MAAMC,UAAsBlG,EAGjC,WAAAG,CAAYC,EAAcC,EAAgB,MACxCmD,MAAMpD,GAHR,KAAA+F,eAAyB,EAIvBpH,KAAKmB,MAAQ,EAEG,MAAZG,GACsB,MAApBA,EAAS+F,UACXrH,KAAKoH,eAAiB9F,EAAS+F,QAGrC,CACA,OAAA1D,GACE2D,YAAW,KACW1C,SAAS2C,gBACjBpC,UAAUC,IAAI,UAAU,GACnCpF,KAAKoH,eAEV,ECpBK,MAAMI,UAA4BvG,EACvC,WAAAG,CAAYC,GACVoD,MAAMpD,GACNrB,KAAK2B,QAAU,UACjB,CAEA,SAAAqB,CAAUX,GACR,MAAMoF,EAAepF,EAAOC,GACtBoF,EAAW1H,KAAK8B,UAAU6F,QAAQF,EAAc,aAAc,IAC9DG,EAA0E,MAAhE5H,KAAK8B,UAAU6F,QAAQF,EAAc,iBAAkB,MAC5B,UAAvCA,EAAaI,QAAQC,eAA6BJ,GAAuB,GAAXE,GAChEH,EAAaM,aAAa,QAAS,SACnCN,EAAaM,aAAa,cAAe,IACzCN,EAAaM,aAAa,OAAQ,IAClCN,EAAaM,aAAa,WAAY,IACtCN,EAAapC,IAAMqC,EACnBD,EAAaO,OAAQ,EACrBP,EAAanC,iBAAiB,kBAAkB,KAE/B,IADiE,MAAhEtF,KAAK8B,UAAU6F,QAAQF,EAAc,iBAAkB,QAErEzH,KAAKiI,QAAQ5F,EAAQoF,E,GAEtB,CAAES,MAAM,IACXT,EAAazC,QAEbmD,QAAQC,KACN,8EACA/F,EAAOC,GAGb,CAEQ,OAAA2F,CAAQ5F,EAAsB0C,GACpCA,EAAQsD,OAAOC,OAAOC,IACpBJ,QAAQC,KAAK,mBAAoBG,GACjClG,EAAOuF,SAAU,CAAK,IACrBY,MAAK,KACNnG,EAAOuF,SAAU,EACjB7C,EAAQgD,aAAa,iBAAkB,GAAG,GAE9C,ECpCF,SAASU,EACPzH,EACA0H,EAAgB,GAChBC,EAAgB,EAChBC,EAAiB,IACjBC,EAAiB,KAEjB,OAAI7H,EAAQ0H,EACH,GAEL1H,EAAQ,IACVA,EAAQ,GAENA,GAAS2H,EAEJE,GADI7H,EAAQ0H,IAAUC,EAAQD,IAChBG,EAASD,GAEzBA,EACT,CAGO,MAAME,UAAqB7H,EAUhC,WAAAG,CAAYC,EAAcC,EAAgB,MACxCmD,MAAMpD,EAASC,GAVT,KAAAyH,KAAO,EACP,KAAAC,KAAO,EACL,KAAAC,gBAA6C,IAAIzH,IACjD,KAAA0H,aAAoC,IAAIxH,MAIlD,KAAAyH,UAAoB,EAIlBnJ,KAAK2B,QAAU,SACf3B,KAAKoJ,OAASxE,SAASyE,cAAc,mBACrCrJ,KAAKsJ,cAAgB1E,SAASyE,cAAc,0BAG9C,CAEA,OAAA1F,GACuB,MAAjB3D,KAAKsB,SACoC,MAAvCtB,KAAKsB,SAAS,wBAChBtB,KAAKiC,cAAcsH,UAAYd,EAAUzI,KAAKsB,SAAS,wBAIzDtB,KAAKiC,cAAcsH,UAAYd,EAAU,GAG7C,CACA,UAAArG,CAAWC,EAAsBC,GAC/B,IAAIkH,EAAexJ,KAAK8B,UAAU6F,QAAQrF,EAAI,cAAe,IACxC,MAAjBtC,KAAKsB,UAA2D,MAAvCtB,KAAKsB,SAAS,wBACzCkI,EAAexJ,KAAK8B,UAAU6F,QAAQrF,EAAI,cAAetC,KAAKsB,SAAS,wBAEzEe,EAAOR,KAAO4G,EAAUe,EAC1B,CAGA,QAAA5F,CAAShC,GAEP6H,uBAAsB,KA8DpB,GA7DAzJ,KAAKyB,QAAQqD,SAASzC,IACpB,GAAIA,EAAOqH,cAAgBrH,EAAOsH,qBAAsB,CACtD,IAAIC,EAAOvH,EAAOC,GAAGuH,wBACrB,MAAMC,EAAW9J,KAAKiC,cAAc8H,EAAIH,EAAKI,KACvCC,EAAWjK,KAAKiC,cAAciI,EAAIN,EAAKO,IAEvCC,EAAK/H,EAAOgI,iBAAmBP,EAC/BQ,EAAKjI,EAAOkI,iBAAmBN,EAErC,GADwBG,EAAKA,EAAKE,EAAKA,EACjB,KAAQ,CACF,GAAtBjI,EAAOmI,cACTnI,EAAOmI,aAAc,EACrBnI,EAAOgI,iBAAmBP,EAC1BzH,EAAOkI,iBAAmBN,EAC1BjK,KAAKkC,OAAO2E,KAAK,mBAAmBxE,EAAOa,KAAM,OAEnD,IAAIuH,EAAQzK,KAAK6B,KAAK8F,QAAQtF,EAAOgI,iBAAkBP,EAAUzH,EAAOR,MACpE6I,EAAQ1K,KAAK6B,KAAK8F,QAAQtF,EAAOkI,iBAAkBN,EAAU5H,EAAOR,MACxEQ,EAAOgI,iBAAmBhI,EAAOgI,iBAAmBI,EACpDpI,EAAOkI,iBAAmBlI,EAAOkI,iBAAmBG,EACpD,MAAMC,EAAU3K,KAAK4K,gBAAgBvI,EAAOwI,UAAWxI,EAAOgI,iBAAkBT,EAAKnD,OAC/EqE,EAAU9K,KAAK4K,gBAAgBvI,EAAOwI,UAAWxI,EAAOkI,iBAAkBX,EAAKlD,QACrFrE,EAAO0I,OAASJ,EAChBtI,EAAO2I,OAASF,EAChB9K,KAAKiL,oBAAoB5I,EAAQA,EAAO0I,OAAQ1I,EAAO2I,QACvDhL,KAAKkC,OAAO2E,KAAK,aAAaxE,EAAOa,KAAM,CACzC6G,EAAG1H,EAAO0I,OACVb,EAAG7H,EAAO2I,SAEZhL,KAAKkC,OAAO2E,KAAK,mBAAmBxE,EAAOa,KAAM,CAC/C6G,EAAG1H,EAAOgI,iBACVH,EAAG7H,EAAOkI,kB,MAGZlI,EAAOgI,iBAAmBP,EAC1BzH,EAAOkI,iBAAmBN,EAC1BjK,KAAKkC,OAAO2E,KAAK,iBAAiBxE,EAAOa,KAAM,K,MAGjD,GAAqB,GAAjBb,EAAO0I,QAAgC,GAAjB1I,EAAO2I,OAAa,CAE5C3I,EAAOmI,aAAc,EACrB,IAAIZ,EAAOvH,EAAOC,GAAGuH,wBACrB,MAAMc,EAAU3K,KAAK4K,gBAAgB,SAAUvI,EAAO6I,UAAWtB,EAAKnD,OAChEqE,EAAU9K,KAAK4K,gBAAgB,SAAUvI,EAAO8I,WAAYvB,EAAKlD,QACvErE,EAAO0I,QAAU/K,KAAK6B,KAAK8F,QAAQtF,EAAO0I,OAAQJ,EAAStI,EAAOR,MAClEQ,EAAO2I,QAAUhL,KAAK6B,KAAK8F,QAAQtF,EAAO2I,OAAQF,EAASzI,EAAOR,MAC9DuJ,KAAKC,IAAIhJ,EAAO0I,QAAU,MAAQK,KAAKC,IAAIhJ,EAAO2I,QAAU,OAC9D3I,EAAO0I,OAAS,EAChB1I,EAAO2I,OAAS,EAChB3I,EAAOgI,iBAAmB,EAC1BhI,EAAOkI,iBAAmB,GAE5BvK,KAAKiL,oBAAoB5I,EAAQA,EAAO0I,OAAQ1I,EAAO2I,O,KAQ5B,GAA5BhL,KAAKiC,cAAcwI,OAA0C,GAA5BzK,KAAKiC,cAAcyI,MAAa,CACpE,IAAIY,EAAa,CACfb,MAAOzK,KAAKiC,cAAcwI,MAC1BC,MAAO1K,KAAKiC,cAAcyI,MAC1BX,EAAG/J,KAAKiC,cAAcsJ,QACtBrB,EAAGlK,KAAKiC,cAAcuJ,SAExBxL,KAAKkC,OAAO2E,KAAK,SAAUyE,GAC3BtL,KAAK+I,KAAO/I,KAAKiC,cAAcsJ,QAC/BvL,KAAKgJ,KAAOhJ,KAAKiC,cAAcuJ,QAC/BxL,KAAKoJ,OAAO7C,MAAMkF,YAAY,MAAOzL,KAAKiC,cAAcsJ,SACxDvL,KAAKoJ,OAAO7C,MAAMkF,YAAY,MAAOzL,KAAKiC,cAAcuJ,SACxDxL,KAAKoJ,OAAO7C,MAAMkF,YAAY,WAAYzL,KAAKiC,cAAcwI,OAC7DzK,KAAKoJ,OAAO7C,MAAMkF,YAAY,WAAYzL,KAAKiC,cAAcyI,M,IAInE,CAEA,SAAA1H,CAAUX,GACR,IAAI0C,EAAU1C,EAAOC,GACjBoJ,EAAiB,KACjBC,EAAwB,KAC1B3L,KAAKmJ,YACLpE,EAAQO,iBAAiB,aAAcsG,GACvCvJ,EAAOqH,aAAc,EACU,MAA3BrH,EAAOwJ,mBAA4BxJ,EAAOwJ,kBAAkBC,OAAS,GACvE9L,KAAKsJ,cAAcnE,UAAUC,IAAI/C,EAAOwJ,mBAE1C7L,KAAKoJ,OAAOjE,UAAUC,IAAI,YAC1BsG,EAAYpE,YAAW,KACrBtH,KAAKoJ,OAAOjE,UAAU4G,OAAO,YAC7B/L,KAAKoJ,OAAOjE,UAAUC,IAAI,QAAQ,GACjC,KAAK,EAENwG,EAAwB,KAC1B5L,KAAKmJ,YACU,MAAXuC,GACFM,aAAaN,GAEf3G,EAAQkH,oBAAoB,aAAcL,GAC1CvJ,EAAOqH,aAAc,EACW,MAA5BrH,EAAOwJ,mBAA6BxJ,EAAOwJ,kBAAkBC,OAAS,GACxE9L,KAAKsJ,cAAcnE,UAAU4G,OAAO1J,EAAOwJ,mBAE7C7L,KAAKoJ,OAAOjE,UAAU4G,OAAO,YAC7B/L,KAAKoJ,OAAOjE,UAAU4G,OAAO,QAAQ,EAEvC1J,EAAO6J,QAAU,KACfnH,EAAQO,iBAAiB,aAAcqG,EAAsB,EAE/DtJ,EAAO8J,QAAU,KACfpH,EAAQkH,oBAAoB,aAAcN,GAC1C5G,EAAQkH,oBAAoB,aAAcL,EAAsB,CAEpE,CAEQ,mBAAAX,CAAoB5I,EAAsB0H,EAAWG,GACtD7H,EAAO+J,4BACgB,GAAtB/J,EAAOgK,cACThK,EAAOC,GAAGiE,MAAMkF,YAAY,MAAO1B,EAAEuC,QAAQ,IAC7CjK,EAAOC,GAAGiE,MAAMkF,YAAY,MAAOvB,EAAEoC,QAAQ,KAE/CjK,EAAOkK,SAASzH,SAASC,IACvBA,EAAQwB,MAAMkF,YAAY,MAAO1B,EAAEuC,QAAQ,IAC3CvH,EAAQwB,MAAMkF,YAAY,MAAOvB,EAAEoC,QAAQ,GAAG,IAKpD,CAEQ,eAAA1B,CAAgBC,EAAmB2B,EAAkBC,GAC3D,OAAQ5B,GACN,IAAK,QACH,OAAO2B,EAAWC,EACpB,IAAK,MACH,OAAQD,EAAWC,GAAQA,EAE7B,QACE,OAAQD,EAAWC,EAAO,IAAMA,EAAO,GAE7C,ECjNK,MAAMC,UAAuBzL,EAClC,WAAAG,CAAYC,GACVoD,MAAMpD,GACNrB,KAAK2B,QAAU,UACjB,CAEA,SAAAqB,CAAUX,GACQA,EAAOC,GAEF,MAAjBtC,KAAKsB,WACiC,MAApCtB,KAAKsB,SAAS,qBAChBe,EAAOsK,SAAW3M,KAAKsB,SAAS,oBAEI,MAAlCtB,KAAKsB,SAAS,mBAChBe,EAAOuK,OAAS5M,KAAKsB,SAAS,kBAEI,MAAhCtB,KAAKsB,SAAS,iBAChBe,EAAOR,KAAO7B,KAAKsB,SAAS,gBAGlC,CAEA,WAAA0C,CAAYC,GACVjE,KAAKyB,QAAQqD,SAASzC,IACpB,MACMuH,EADUvH,EAAOC,GACFuH,wBACfgD,EAAiBjD,EAAKI,KAAO3H,EAAO6I,UACpC4B,EAAiBlD,EAAKO,IAAM9H,EAAO8I,WACnC4B,EAAQ9I,EAAE+I,QAAUH,EACpBI,EAAQhJ,EAAEiJ,QAAUJ,EACpBK,EAAW/B,KAAKgC,KAAKL,GAAS,EAAIE,GAAS,GAE7CE,EAAW9K,EAAOuK,QACpBvK,EAAOgL,gBAAkBN,EAAQ1K,EAAOsK,WAAatK,EAAOuK,OAASO,GAAY9K,EAAOuK,QACxFvK,EAAOiL,gBAAkBL,EAAQ5K,EAAOsK,WAAatK,EAAOuK,OAASO,GAAY9K,EAAOuK,QACxFvK,EAAOkL,aAAc,IAErBlL,EAAOgL,gBAAkB,EACzBhL,EAAOiL,gBAAkB,E,GAG/B,CAEA,QAAA1J,CAAShC,GACP5B,KAAKyB,QAAQqD,SAASzC,IACpB,GAAIA,EAAOkL,YAAa,CACtB,IAAI9C,EAAQzK,KAAK6B,KAAK8F,QAAQtF,EAAOmL,UAAWnL,EAAOgL,gBAAiBhL,EAAOR,MAC3E6I,EAAQ1K,KAAK6B,KAAK8F,QAAQtF,EAAOoL,UAAWpL,EAAOiL,gBAAiBjL,EAAOR,MAC3E4I,GAAS,KAAQA,EAAQ,MAC3BA,EAAQ,EACRpI,EAAOmL,UAAYnL,EAAOgL,iBAExB3C,GAAS,KAAQA,EAAQ,MAC3BA,EAAQ,EACRrI,EAAOoL,UAAYpL,EAAOiL,iBAE5BjL,EAAOmL,WAAa/C,EACpBpI,EAAOoL,WAAa/C,EACpBrI,EAAOC,GAAGiE,MAAMkF,YAAY,eAAgBpJ,EAAOmL,UAAUE,YAC7DrL,EAAOC,GAAGiE,MAAMkF,YAAY,eAAgBpJ,EAAOoL,UAAUC,YACzDrL,EAAOgL,iBAAmBhL,EAAOmL,WAAanL,EAAOiL,iBAAmBjL,EAAOoL,YACjFpL,EAAOkL,aAAc,E,IAI7B,ECrEK,MAAMI,EACX,OAAAhG,CAAQiG,EAAiBC,EAAgBC,GAEvC,OADmBD,EAASD,GACRE,CACtB,ECDK,MAAMC,EAaX,KAAWhE,GACT,OAAO/J,KAAKgO,OACd,CACA,KAAW9D,GACT,OAAOlK,KAAKiO,OACd,CACA,WAAW1C,GACT,OAAOvL,KAAKkO,EACd,CACA,WAAW1C,GACT,OAAOxL,KAAKmO,EACd,CACA,SAAW1D,GACT,OAAOzK,KAAKoO,MACd,CACA,SAAW1D,GACT,OAAO1K,KAAKqO,MACd,CAGA,aAAW9E,CAAUvI,GACnBhB,KAAKsO,IAAMtN,CACb,CAEA,WAAAI,CAAYmI,EAAoB,IApCxB,KAAA+E,IAAM,GACN,KAAAzM,KAAO,IAAI8L,EAEX,KAAAO,GAAa,EACb,KAAAC,GAAa,EACb,KAAAC,OAAiB,EACjB,KAAAC,OAAiB,EAEjB,KAAAL,QAAkB,EAClB,KAAAC,QAAkB,EA4BxBjO,KAAKsO,IAAM/E,CAEb,CAGA,WAAAvF,CAAYC,GACVjE,KAAKgO,QAAU/J,EAAE+I,QACjBhN,KAAKiO,QAAUhK,EAAEiJ,OAEnB,CACA,QAAAtJ,GACE5D,KAAKoO,OAASpO,KAAK6B,KAAK8F,QAAQ3H,KAAKkO,GAAIlO,KAAKgO,QAAShO,KAAKsO,KAC5DtO,KAAKqO,OAASrO,KAAK6B,KAAK8F,QAAQ3H,KAAKmO,GAAInO,KAAKiO,QAASjO,KAAKsO,KAC3ClD,KAAKgC,KAAKhC,KAAKmD,IAAIvO,KAAKoO,OAAQ,GAAKhD,KAAKmD,IAAIvO,KAAKqO,OAAQ,IAC7D,IACbrO,KAAKoO,OAAS,EACdpO,KAAKqO,OAAS,EACdrO,KAAKkO,GAAKlO,KAAKgO,QACfhO,KAAKmO,GAAKnO,KAAKiO,UAEfjO,KAAKkO,GAAKlO,KAAKkO,GAAKlO,KAAKoO,OACzBpO,KAAKmO,GAAKnO,KAAKmO,GAAKnO,KAAKqO,OAE7B,EC9DF,MAAMG,EAAK,MACLC,EAAK,SACLC,EAAK,OACLC,EAAK,QAEJ,MAAMC,EA8FX,WAAAxN,CAAY2D,GA5FL,KAAA7B,GAAa,GACb,KAAAL,KAAe,GACf,KAAAgM,OAAiB,EACjB,KAAAC,KAAe,EACf,KAAArC,KAAe,EAEf,KAAAsC,SAAmB,EACnB,KAAAC,OAAiB,EACjB,KAAAC,cAAwB,EACxB,KAAAC,OAAiB,EAEjB,KAAAC,UAAoB,EACpB,KAAAC,aAAuB,EAEvB,KAAAC,OAAiB,GACjB,KAAAC,QAAkB,GAClB,KAAAC,OAAiB,GACjB,KAAAC,QAAkB,GAElB,KAAAtE,UAAoB,EACpB,KAAAC,WAAqB,EAErB,KAAAsE,MAAgB,EAChB,KAAAC,IAAc,EAEd,KAAA3E,OAAiB,EACjB,KAAAC,OAAiB,EAEjB,KAAAqC,gBAA0B,EAC1B,KAAAC,gBAA0B,EAE1B,KAAAE,UAAoB,EACpB,KAAAC,UAAoB,EAEpB,KAAA5L,KAAe,EAGf,KAAAwI,iBAA2B,EAC3B,KAAAE,iBAA2B,EAE3B,KAAAoF,MAAgB,EAChB,KAAAhD,SAAmB,EACnB,KAAAiD,OAAiB,EACjB,KAAAhD,OAAiB,EACjB,KAAAiD,sBAAgC,EAChC,KAAAC,oBAA8B,EAE9B,KAAAC,SAAmB,EAEnB,KAAAxD,SAA+B,IAAI7K,MACnC,KAAAmK,kBAA4B,GAE5B,KAAA1L,IAAc,aACd,KAAA0K,UAAoB,SAEpB,KAAAmF,aAA4C,KAC5C,KAAAC,iBAAgD,KAChD,KAAAC,eAA8C,KAE9C,KAAAC,QAAkB,EAClB,KAAA9D,aAAuB,EACvB,KAAA+D,QAAkB,EAClB,KAAA/E,KAAe,EACf,KAAAzD,SAAmB,EACnB,KAAA2F,aAAuB,EACvB,KAAA5D,sBAAgC,EAChC,KAAAyC,2BAAqC,EAErC,KAAA1C,aAAuB,EACvB,KAAAc,aAAuB,EAGvB,KAAA0B,QAAU,OACV,KAAAC,QAAU,OAET,KAAAkE,QAAgC,IAAI3O,MAErC,KAAA4O,OAAiB,gBAGjB,KAAAC,YAAsB,GACtB,KAAAC,WAAqB,GACrB,KAAAC,QAAkB,EAClB,KAAAC,OAAiB,MACjB,KAAAC,WAAqB,QACrB,KAAAC,QAAkB,UAClB,KAAAC,QAAkB,GAClB,KAAAC,aAA2B,IAAIpP,MAMpC1B,KAAKsC,GAAKyC,CACZ,CAEA,KAAAgM,GACE/Q,KAAKoQ,QAAS,EACdpQ,KAAKqQ,QAAQvL,SAASjF,IACpBA,EAAOoD,UAAUjD,KAAKkD,GAAIlD,KAAK,IAEjCA,KAAKkM,SACP,CACA,KAAA8E,GACEhR,KAAKoQ,QAAS,EACdpQ,KAAKqQ,QAAQvL,SAASjF,IACpBA,EAAOyD,aAAatD,KAAKkD,GAAG,IAE9BlD,KAAKmM,SACP,CACA,IAAA8E,GACEjR,KAAKsC,GAAG6C,UAAUC,IAAI,UACxB,CACA,IAAA8L,GACMlR,KAAKmQ,QACPnQ,KAAKsC,GAAG6C,UAAU4G,OAAO,UAE7B,CAEA,OAAAhJ,CAAQlD,GACNG,KAAKqQ,QAAQhN,KAAKxD,EACpB,CAGO,kBAAAsR,CAAmBC,GACnBpR,KAAKqP,SAAWb,GAAMxO,KAAKsP,UAAYd,GAAQxO,KAAKqP,SAAWX,GAAM1O,KAAKsP,UAAYZ,EACzF1O,KAAK+O,SAAW/O,KAAKyP,MAAQzP,KAAK8O,KACxB9O,KAAKqP,SAAWb,GAAMxO,KAAKsP,UAAYb,GAAQzO,KAAKqP,SAAWX,GAAM1O,KAAKsP,UAAYX,EAChG3O,KAAK+O,SAAW/O,KAAKyP,MAAQ2B,EAAapR,KAAK8O,KACrC9O,KAAKqP,SAAWZ,GAAMzO,KAAKsP,UAAYd,GAAQxO,KAAKqP,SAAWV,GAAM3O,KAAKsP,UAAYZ,EAChG1O,KAAK+O,SAAW/O,KAAKyP,MAAQzP,KAAKyM,KAAOzM,KAAK8O,MACpC9O,KAAKqP,SAAWZ,GAAMzO,KAAKsP,UAAYb,GAAQzO,KAAKqP,SAAWV,GAAM3O,KAAKsP,UAAYX,KAChG3O,KAAK+O,SAAW/O,KAAKyP,MAAQ2B,EAAapR,KAAK8O,KAAO9O,KAAKyM,MAGxDzM,KAAKuP,SAAWf,GAAMxO,KAAKwP,UAAYhB,GAAQxO,KAAKuP,SAAWb,GAAM1O,KAAKwP,UAAYd,EACzF1O,KAAKgP,OAAShP,KAAKyP,MAAQzP,KAAK6O,OACtB7O,KAAKuP,SAAWf,GAAMxO,KAAKwP,UAAYf,GAAQzO,KAAKuP,SAAWb,GAAM1O,KAAKwP,UAAYb,EAChG3O,KAAKgP,OAAShP,KAAKyP,MAAQ2B,EAAapR,KAAK6O,OACnC7O,KAAKuP,SAAWd,GAAMzO,KAAKwP,UAAYhB,GAAQxO,KAAKuP,SAAWZ,GAAM3O,KAAKwP,UAAYd,EAChG1O,KAAKgP,OAAShP,KAAKyP,MAAQzP,KAAKyM,KAAOzM,KAAK6O,QAClC7O,KAAKuP,SAAWd,GAAMzO,KAAKwP,UAAYf,GAAQzO,KAAKuP,SAAWZ,GAAM3O,KAAKwP,UAAYb,KAChG3O,KAAKgP,OAAShP,KAAKyP,MAAQ2B,EAAapR,KAAKyM,KAAOzM,KAAK6O,QAE3D7O,KAAKiP,cAAgBjP,KAAKgP,OAAShP,KAAK+O,QAC1C,ECxJF,IAAKsC,GAAL,SAAKA,GACH,uBACA,uBACA,uBACA,wBACD,CALD,CAAKA,IAAAA,EAAU,KAoBf,MAAMC,EAKJ,WAAAlQ,CAAYmQ,G,MAJL,KAAAC,SAAeC,EACf,KAAAC,SAAeD,EACf,KAAAE,QAAkB,EAGvB3R,KAAKwR,IAAMD,aAAM,EAANA,EAAQC,IACnBxR,KAAK0R,IAAMH,aAAM,EAANA,EAAQG,IACnB1R,KAAK2R,OAAuB,QAAd,EAAAJ,aAAM,EAANA,EAAQI,cAAM,QAC9B,CAEA,SAAAC,CAAUD,GAAkB,GAC1B3R,KAAK2R,OAASA,CAChB,CACA,QAAAE,CAASL,EAAcE,GACrB1R,KAAKwR,IAAMA,QAAAA,OAAOC,EAClBzR,KAAK0R,IAAMA,QAAAA,OAAOD,CACpB,CAEA,cAAIK,GACF,IAAIC,EAAQ,SAOZ,OANI/R,KAAKwR,MACPO,GAAS,oBAAoB/R,KAAKwR,UAEhCxR,KAAK0R,MACPK,GAAS,oBAAoB/R,KAAK0R,UAE7BK,CACT,EAGK,MAAMC,UAAyB/Q,EAepC,WAAAG,CAAYC,EAAcC,GACxBmD,MAAMpD,EAASC,GAfT,KAAA2Q,QAAgE,CACtE,CAACZ,EAAWa,QAAS,IAAIZ,EAA4B,CAAEI,IAAK,MAC5D,CAACL,EAAWc,QAAS,IAAIb,EAA4B,CAAEE,IAAK,IAAKE,IAAK,OACtE,CAACL,EAAWe,QAAS,IAAId,EAA4B,CAAEE,IAAK,KAAME,IAAK,OACvE,CAACL,EAAWgB,SAAU,IAAIf,EAA4B,CAAEE,IAAK,QAGvD,KAAAc,YAAuD,CAC7D,CAACjB,EAAWa,QAASK,OAAOC,WAAWxS,KAAKiS,QAAQZ,EAAWa,QAAQJ,YACvE,CAACT,EAAWc,QAASI,OAAOC,WAAWxS,KAAKiS,QAAQZ,EAAWc,QAAQL,YACvE,CAACT,EAAWe,QAASG,OAAOC,WAAWxS,KAAKiS,QAAQZ,EAAWe,QAAQN,YACvE,CAACT,EAAWgB,SAAUE,OAAOC,WAAWxS,KAAKiS,QAAQZ,EAAWgB,SAASP,aAKzE9R,KAAKmB,MAAQ,CACf,CAEA,SAAA6B,GAAa,CAEb,OAAAW,G,YACE,GAAqB,MAAjB3D,KAAKsB,UAC0B,MAA7BtB,KAAKsB,SAAmB,SAAW,CACrC,IAAIiQ,EAASvR,KAAKsB,SAAmB,SACjCiQ,EAAOkB,QACTzS,KAAKiS,QAAQZ,EAAWa,QAAQP,QAAS,EACzC3R,KAAKiS,QAAQZ,EAAWa,QAAQL,SAA8BJ,MAArBF,EAAOkB,OAAOjB,IAAmB,KAAOD,EAAOkB,OAAOjB,IAAsB,QAAjB,EAAAD,EAAOkB,OAAOf,WAAG,QAAI,MACzH1R,KAAKsS,YAAYjB,EAAWa,QAAUK,OAAOC,WAAWxS,KAAKiS,QAAQZ,EAAWa,QAAQJ,aAExF9R,KAAKiS,QAAQZ,EAAWa,QAAQP,QAAS,EAGvCJ,EAAOmB,QACT1S,KAAKiS,QAAQZ,EAAWc,QAAQR,QAAS,EACzC3R,KAAKiS,QAAQZ,EAAWc,QAAQN,SAA8BJ,MAArBF,EAAOkB,OAAOjB,IAAmB,KAAOD,EAAOkB,OAAOjB,IAAsB,QAAjB,EAAAD,EAAOkB,OAAOf,WAAG,QAAI,MACzH1R,KAAKsS,YAAYjB,EAAWc,QAAUI,OAAOC,WAAWxS,KAAKiS,QAAQZ,EAAWa,QAAQJ,aAExF9R,KAAKiS,QAAQZ,EAAWc,QAAQR,QAAS,EAGvCJ,EAAOoB,QACT3S,KAAKiS,QAAQZ,EAAWe,QAAQT,QAAS,EACzC3R,KAAKiS,QAAQZ,EAAWe,QAAQP,SAA8BJ,MAArBF,EAAOkB,OAAOjB,IAAmB,KAAOD,EAAOkB,OAAOjB,IAAsB,QAAjB,EAAAD,EAAOkB,OAAOf,WAAG,QAAI,MACzH1R,KAAKsS,YAAYjB,EAAWe,QAAUG,OAAOC,WAAWxS,KAAKiS,QAAQZ,EAAWa,QAAQJ,aAExF9R,KAAKiS,QAAQZ,EAAWe,QAAQT,QAAS,EAGvCJ,EAAOqB,SACT5S,KAAKiS,QAAQZ,EAAWgB,SAASV,QAAS,EAC1C3R,KAAKiS,QAAQZ,EAAWgB,SAASR,SAA8BJ,MAArBF,EAAOkB,OAAOjB,IAAmB,KAAOD,EAAOkB,OAAOjB,IAAsB,QAAjB,EAAAD,EAAOkB,OAAOf,WAAG,QAAI,MAC1H1R,KAAKsS,YAAYjB,EAAWgB,SAAWE,OAAOC,WAAWxS,KAAKiS,QAAQZ,EAAWa,QAAQJ,aAEzF9R,KAAKiS,QAAQZ,EAAWgB,SAASV,QAAS,C,CAIhD3R,KAAK6S,gBACP,CAEA,QAAAhP,GACE7D,KAAK6S,gBACP,CAEQ,cAAAA,GACN,MAAMC,EAAgB9S,KAAKsS,YAAYjB,EAAWa,QAAQa,SAAW/S,KAAKiS,QAAQZ,EAAWa,QAAQP,OAC/FqB,EAAgBhT,KAAKsS,YAAYjB,EAAWc,QAAQY,SAAW/S,KAAKiS,QAAQZ,EAAWc,QAAQR,OAC/FsB,EAAgBjT,KAAKsS,YAAYjB,EAAWe,QAAQW,SAAW/S,KAAKiS,QAAQZ,EAAWe,QAAQT,OAC/FuB,EAAiBlT,KAAKsS,YAAYjB,EAAWgB,SAASU,SAAW/S,KAAKiS,QAAQZ,EAAWgB,SAASV,OAEvF/M,SAASC,iBAAiB,uEAElCC,SAASC,IAChB,IAAIoO,GAAc,EAEdpO,EAAQqO,aAAa,kBAAoBN,IAC3CK,GAAc,GAEZpO,EAAQqO,aAAa,kBAAoBJ,IAC3CG,GAAc,GAEZpO,EAAQqO,aAAa,kBAAoBH,IAC3CE,GAAc,GAEZpO,EAAQqO,aAAa,mBAAqBF,IAC5CC,GAAc,GAIdpO,EAAQwB,MAAM8M,QADZF,EACsB,KAEA,M,GAG9B,ECnJK,MAAMG,EAQX,WAAAlS,CAAYQ,EAAkB2R,EAAgBC,GALtC,KAAAC,YAAa,EACb,KAAAC,OAAiB,EACjB,KAAAC,oBAA8B,EAIpC3T,KAAK4B,KAAOA,EACZ5B,KAAKuT,UAAYA,EACjBvT,KAAKwT,MAAQA,CACf,CAEA,QAAA3P,GACE,MAAM+P,EAAc5T,KAAK4B,KAAKiS,IACxBC,EAAc9T,KAAK4B,KAAKmS,GAExBC,EAAaF,EAAcF,EAAeE,EAChD9T,KAAKwT,MAAMjN,MAAMkF,YAAY,SAAUuI,EAAY,MAE/CJ,GAAeE,EACjB9T,KAAKuT,UAAUpO,UAAUC,IAAI,SAE7BpF,KAAKuT,UAAUpO,UAAU4G,OAAO,QAEpC,CAEA,WAAAkI,GACE,MAAMC,EAAgBlU,KAAK4B,KAAKiS,IAC1BM,EAAgBnU,KAAK4B,KAAKmS,GAChC/T,KAAKwT,MAAMjN,MAAMkF,YAAY,aAAkBzL,KAAK4B,KAAKwS,EAAIF,EAAiBC,EAAgB,KAChG,CAEA,cAAAE,CAAepQ,GACbjE,KAAK0T,OAASzP,EAAEiJ,QAChBlN,KAAK2T,oBAAsB3T,KAAK4B,KAAKwS,CACvC,CAEA,cAAAE,CAAerQ,GACb,MAAMsQ,EAAStQ,EAAEiJ,QAAUlN,KAAK0T,OAC1Bc,EAAoBxU,KAAK2T,oBAAuBY,EAASvU,KAAK4B,KAAKmS,GAAM/T,KAAK4B,KAAKiS,IACzF7T,KAAK4B,KAAKwS,EAAII,EACdxU,KAAK4B,KAAK6S,EAAID,EACdjC,OAAOmC,SAAS,EAAGF,GACnBxU,KAAKiU,aACP,EC9CK,MAAMU,EAQX,WAAAvT,CAAYQ,EAAkB2R,EAAgBC,GALtC,KAAAC,YAAa,EACb,KAAAmB,gBAA0B,EAC1B,KAAAjB,oBAA8B,EAIpC3T,KAAK4B,KAAOA,EACZ5B,KAAKuT,UAAYA,EACjBvT,KAAKwT,MAAQA,CACf,CAEA,QAAA3P,GACE,MAAM+P,EAAc5T,KAAK4B,KAAKiT,IACxBf,EAAc9T,KAAK4B,KAAKmS,GACxBC,EAAaF,EAAcF,EAAeE,EAChD9T,KAAKwT,MAAMjN,MAAMkF,YAAY,SAAUuI,EAAY,MAE/CJ,GAAeE,EACjB9T,KAAKuT,UAAUpO,UAAUC,IAAI,SAE7BpF,KAAKuT,UAAUpO,UAAU4G,OAAO,QAEpC,CAEA,WAAAkI,GACE,MAAMa,EAAe9U,KAAK4B,KAAKiT,IACzBE,EAAe/U,KAAK4B,KAAKmS,GAC/B/T,KAAKwT,MAAMjN,MAAMkF,YAAY,aAAkBzL,KAAK4B,KAAKwS,EAAIU,EAAgBC,EAAe,KAC9F,CAEA,cAAAV,CAAepQ,GACbjE,KAAK4U,gBAAkB3Q,EAAE+I,QACzBhN,KAAK2T,oBAAsB3T,KAAK4B,KAAKwS,CACvC,CAEA,cAAAE,CAAerQ,GACb,MAAM+Q,EAAS/Q,EAAE+I,QAAUhN,KAAK4U,gBAC1BJ,EAAoBxU,KAAK2T,oBAAuBqB,EAAShV,KAAK4B,KAAKmS,GAAM/T,KAAK4B,KAAKiT,IACzF7U,KAAK4B,KAAKwS,EAAII,EACdxU,KAAK4B,KAAK6S,EAAID,EACdjC,OAAOmC,SAAS,EAAGF,GACnBxU,KAAKiU,aACP,EC1CK,MAAMgB,UAAwBhU,EAgBnC,WAAAG,CAAYC,GACVoD,MAAMpD,GAZA,KAAAoS,YAAa,EACb,KAAAyB,WAA+C,SAarDlV,KAAKmV,iBAAmBnV,KAAKoV,aAAaC,KAAKrV,MAC/CA,KAAKsV,mBAAqBtV,KAAKqU,eAAegB,KAAKrV,MACnDA,KAAKuV,mBAAqBvV,KAAKsU,eAAee,KAAKrV,KACrD,CACA,UAAA0C,GACEkC,SAASqH,oBAAoB,UAAWjM,KAAKmV,kBAC7CnV,KAAKwT,MAAMvH,oBAAoB,YAAajM,KAAKsV,oBACjD1Q,SAASqH,oBAAoB,YAAajM,KAAKuV,mBACjD,CAEA,OAAA5R,GACE3D,KAAKwV,kBACLxV,KAAKiU,cACLjU,KAAKyV,kBACL7Q,SAASU,iBAAiB,UAAWtF,KAAKmV,kBAC1CnV,KAAKwT,MAAMlO,iBAAiB,YAAatF,KAAKsV,oBAC9C1Q,SAASU,iBAAiB,YAAatF,KAAKuV,oBAC5C3Q,SAAS2C,gBAAgBpC,UAAUC,IAAI,gBACzC,CAEA,QAAArB,CAASnC,GACP5B,KAAKiU,cACLjU,KAAK0V,gBACL1V,KAAK2V,eACP,CAEA,QAAA9R,GACE7D,KAAK4V,eAAe/R,UACtB,CAEA,oBAAAlB,GACsB,WAAhB3C,KAAK4B,KAAKiU,IAAsC,WAAnB7V,KAAKkV,YACpClV,KAAKuT,UAAUpO,UAAUC,IAAI,UAEV,UAAhBpF,KAAK4B,KAAKiU,IAAqC,WAAnB7V,KAAKkV,YAA6C,WAAhBlV,KAAK4B,KAAKiU,IAAsC,WAAnB7V,KAAKkV,aACnGlV,KAAKuT,UAAUpO,UAAU4G,OAAO,SAElC/L,KAAKkV,WAAalV,KAAK4B,KAAKiU,EAC9B,CAEA,uBAAAzR,GACsB,cAAhBpE,KAAK4B,KAAKkU,GACZ9V,KAAK4V,eAAiB5V,KAAK+V,uBAE3B/V,KAAK4V,eAAiB5V,KAAKgW,yBAE7BhW,KAAK4V,eAAe/R,UACtB,CAEQ,eAAA4R,GACN,MAAMlP,EAAQ3B,SAASqR,cAAc,SACrC1P,EAAM2P,YAAc,ijBAmBpBtR,SAASuR,KAAKC,YAAY7P,EAC5B,CAEQ,eAAAiP,GACNxV,KAAKuT,UAAY3O,SAASqR,cAAc,OACxCjW,KAAKuT,UAAUpO,UAAUC,IAAI,aAC7BpF,KAAKwT,MAAQ5O,SAASqR,cAAc,OACpCjW,KAAKwT,MAAMrO,UAAUC,IAAI,SACzBpF,KAAKuT,UAAU6C,YAAYpW,KAAKwT,OAChC5O,SAASyR,KAAKD,YAAYpW,KAAKuT,WAE/BvT,KAAKgW,yBAA2B,IAAI1C,EAA0BtT,KAAK4B,KAAM5B,KAAKuT,UAAWvT,KAAKwT,OAC9FxT,KAAK+V,uBAAyB,IAAIpB,EAAwB3U,KAAK4B,KAAM5B,KAAKuT,UAAWvT,KAAKwT,OAC1FxT,KAAK4V,eAAiB5V,KAAKgW,wBAC7B,CAEQ,WAAA/B,GACNjU,KAAK4V,eAAe3B,aACtB,CAEQ,cAAAI,CAAepQ,GACrBjE,KAAKyT,YAAa,EAClBzT,KAAK4V,eAAevB,eAAepQ,GACnCW,SAASyR,KAAK9P,MAAM+P,WAAa,OACjCtW,KAAKuT,UAAUpO,UAAUC,IAAI,SAC/B,CAEQ,cAAAkP,CAAerQ,GAChBjE,KAAKyT,YAEVzT,KAAK4V,eAAetB,eAAerQ,EACrC,CAEQ,YAAAmR,GACNpV,KAAKyT,YAAa,EAClB7O,SAASyR,KAAK9P,MAAM+P,WAAa,GACjCtW,KAAK2V,gBACL3V,KAAKuT,UAAUpO,UAAU4G,OAAO,SAClC,CAEQ,aAAA2J,GACN1V,KAAKuT,UAAUpO,UAAUC,IAAI,UAC/B,CAEQ,aAAAuQ,GACF3V,KAAKuW,eACPvK,aAAahM,KAAKuW,eAEpBvW,KAAKuW,cAAgBjP,YAAW,KAC9BtH,KAAKuT,UAAUpO,UAAU4G,OAAO,UAAU,GACzC,IACL,EC7IK,MAAMyK,UAAqBvV,EAEhC,WAAAG,CAAYC,GACVoD,MAAMpD,GAFR,KAAAoV,QAAkB,EAGhBzW,KAAK2B,QAAU,QACjB,CACA,UAAAS,CAAWC,EAAsBC,GAC/BD,EAAOiO,OAAStQ,KAAK8B,UAAU6F,QAAQrF,EAAI,gBAAiB,gBAC9D,CACA,SAAAU,CAAUX,GACa,MAAjBA,EAAOiO,QAAmC,IAAjBjO,EAAOiO,SAClCjO,EAAOiO,OAAS,iBAElB,MAAMoG,EAAIrU,EAAOiO,OAAOqG,MAAM,KACxB5M,EAAI/J,KAAK4W,UAAUF,EAAE,IACrBxM,EAAIlK,KAAK4W,UAAUF,EAAE,IAAMA,EAAE,IACnCrU,EAAOC,GAAGiE,MAAMsQ,gBAAkB,GAAG9M,KAAKG,GAC5C,CAEQ,SAAA0M,CAAUE,GAEhB,IADAA,EAAOA,EAAKC,QACHC,WAAW,UAAW,CAC7B,MAAM5W,EAAI0W,EAAKG,MAAM,GAAI,GAAGN,MAAM,KAAKO,KAAIC,GAAKA,EAAEJ,SAElD,OAAO3W,EADGgL,KAAKgM,MAAMhM,KAAKiM,SAAWjX,EAAE0L,Q,CAGvC,OAAOgL,CAEX,EC7BK,MAAMQ,UAAoBrW,EAkC/B,WAAAG,CAAYC,EAAcC,EAAgB,MAIxC,GAHAmD,MAAMpD,GAlCA,KAAAkW,aAAuB,EACvB,KAAAC,aAAuB,EACvB,KAAAC,aAAuB,EACvB,KAAAC,mBAA6B,OAC7B,KAAAC,iBAA2B,EAE3B,KAAAC,uBAAiC,OACjC,KAAAC,0BAAoC7X,KAAK4X,uBAAyB,GAClE,KAAAE,4BAAsC,KAE7B,KAAAC,kBAA4B,IAC5B,KAAAC,iBAA2B,IAC3B,KAAAC,iBAA2B,EAC3B,KAAAC,cAAwB,EACxB,KAAAC,aAAuB,EAEhC,KAAAC,qBAA+B,EAG/B,KAAAC,UAAahW,IACnB,MAAMiW,EAAmB,mBAAmBtY,KAAK4B,KAAK2W,GAAKvY,KAAKoY,qBAAuB/V,EAAOsN,cAC9FtN,EAAOC,GAAGiE,MAAMiS,UAAYF,CAAgB,EAGtC,KAAAG,qBAAuB,KAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAI1Y,KAAKyB,QAAQqK,OAAQ4M,IAAK,CAC5C,IAAIrW,EAASrC,KAAKyB,QAAQiX,GAC1B1Y,KAAKqY,UAAUhW,E,GAGX,KAAAsW,oBAAsB,OACtB,KAAAC,cAAgB5Y,KAAKyY,qBAI3BzY,KAAK2B,QAAU,QAEXL,EAAU,CACZ,MAAM,uBAAEsW,EAAsB,0BAAEC,EAAyB,2BAAEC,GAA+BxW,EAC1FtB,KAAK4X,uBAAyBA,QAAAA,EAA0B5X,KAAK4X,uBAC7D5X,KAAK6X,0BAA4BA,QAAAA,EAA6B7X,KAAK6X,0BACnE7X,KAAK8X,2BAA6BA,QAAAA,EAA8B9X,KAAK8X,0B,CAEzE,CAEQ,kBAAAe,CAAmBC,GACzB,MAAMC,EAAiBD,EACnB9Y,KAAK4B,KAAKoX,EAAIhZ,KAAKuX,aACnBvX,KAAK4B,KAAKoX,EAAIhZ,KAAKuX,aAEvBvX,KAAK0X,mBAAqBqB,EACrB/Y,KAAK2X,gBAAkB3X,KAAK4X,uBAAyB5X,KAAK6X,0BAC3D7X,KAAK8X,2BAEJiB,IACH/Y,KAAK2X,iBAAkB,EAE3B,CACA,OAAAhU,GACE3D,KAAKoY,qBAAsC,GAAfpY,KAAK4B,KAAKmS,EACxC,CAEA,QAAAlQ,GACM0O,OAAO0G,WAAa,MACtBjZ,KAAKoY,qBAAsC,GAAfpY,KAAK4B,KAAKmS,GACtC/T,KAAK4Y,cAAgB5Y,KAAKyY,uBAE1BzY,KAAK4Y,cAAgB5Y,KAAK2Y,oBAC1B3Y,KAAKkZ,aACLlZ,KAAKyB,QAAQqD,SAASzC,IACpBrC,KAAKqY,UAAUhW,EAAO,IAG5B,CAEQ,UAAA6W,GACNlZ,KAAKwX,aAAe,EACpBxX,KAAKyX,aAAe,EACpBzX,KAAK2X,iBAAkB,EACvB3X,KAAK0X,mBAAqB1X,KAAK4X,sBACjC,CAEA,aAAArV,GACEvC,KAAKkZ,YACP,CAEA,YAAA1W,GACExC,KAAKkZ,aACLlZ,KAAKuX,aAAe,EACpB3S,SAAS2C,gBAAgBhB,MAAMkF,YAAY,UAAW,KACtD,IAAK,IAAIiN,EAAI,EAAGA,EAAI1Y,KAAKyB,QAAQqK,OAAQ4M,IAAK,CAE5C,MAAMJ,EAAmB,yBADZtY,KAAKyB,QAAQiX,GAEnBpW,GAAGiE,MAAMiS,UAAYF,C,CAEhC,CAEA,QAAA1U,CAAShC,GACP5B,KAAK6Y,oBAAqC,IAAlB7Y,KAAK4B,KAAKuX,KAClCnZ,KAAKyX,aAAerM,KAAKoG,IAAIxR,KAAKiY,iBAAkBjY,KAAKyX,aAAezX,KAAK+X,mBAC7E/X,KAAKwX,aAAepM,KAAKsG,IAAI1R,KAAKgY,iBAAkB5M,KAAKoG,IAAIxR,KAAKiY,iBAAkBjY,KAAKwX,aAAexX,KAAK0X,qBAC7G1X,KAAK4B,KAAK2W,GAAKnN,KAAKoG,IAAIxR,KAAKmY,aAAc/M,KAAKsG,IAAI1R,KAAKkY,aAAclY,KAAK4B,KAAKoX,EAAIhZ,KAAKwX,aAAexX,KAAKyX,eAC9G7S,SAAS2C,gBAAgBhB,MAAMkF,YAAY,UAAWzL,KAAK4B,KAAK2W,GAAG7K,YACnE1N,KAAKuX,aAAevX,KAAK4B,KAAKoX,EAC9BhZ,KAAK4Y,eACP,EC1GK,MAAMQ,UAAmBnY,EAE9B,WAAAG,CAAYC,GACVoD,MAAMpD,GAFR,KAAAoV,QAAkB,EAGhBzW,KAAKmB,MAAQ,CACf,CACA,YAAAqB,GACEoC,SAAS2C,gBAAgBhB,MAAMkF,YAAY,SAAU,IACvD,CACA,QAAA1H,CAASnC,GACPgD,SAAS2C,gBAAgBhB,MAAMkF,YAAY,SAAUzL,KAAK4B,KAAKoX,EAAEtL,YACjE1N,KAAKyW,QAAU7U,EAAKoX,CACtB,ECXK,MAAMK,UAAuBpY,EAqBlC,WAAAG,CAAYC,GACVoD,MAAMpD,GArBA,KAAAiY,cAAgB,CAACjX,EAAsB0N,KAC7C,IAAIuI,EAAmB,kBACrBjW,EAAO6M,OAASlP,KAAK4B,KAAKmS,GAAK1R,EAAOwN,sBAAwBE,EAAW1N,EAAO6M,OAASlP,KAAK4B,KAAKmS,GAAK1R,EAAOyN,4BAEjHzN,EAAOC,GAAGiE,MAAMiS,UAAYF,EAC5BjW,EAAOkK,SAASzH,SAASC,IACvBA,EAAQwB,MAAMiS,UAAYF,CAAgB,GAC1C,EAGI,KAAAiB,qBAAuB,KAC7BvZ,KAAKyB,QAAQqD,SAASzC,IACpB,IAAI0N,EAAW3E,KAAKoG,IAAI,EAAGpG,KAAKsG,IAAI,GAAI1R,KAAK4B,KAAKwS,EAAI/R,EAAO0M,UAAY1M,EAAO4M,gBAChF5M,EAAOC,GAAGiE,MAAMkF,YAAYpJ,EAAOlC,IAAK4P,EAASrC,YACjD1N,KAAKsZ,cAAcjX,EAAQ0N,EAAS,GACpC,EAEI,KAAAyJ,oBAAsB,OACtB,KAAAC,cAAgBzZ,KAAKuZ,qBAI3BvZ,KAAK2B,QAAU,UACjB,CAEA,SAAAqB,CAAUX,GACR,GAAqB,MAAjBrC,KAAKsB,SAAkB,CACzB,GAA6C,MAAzCtB,KAAKsB,SAAS,wBAAiC,CACjD,IAAIoY,EAAmB1Z,KAAK8B,UAAU6F,QAAQtF,EAAOC,GAAI,uBAAwBtC,KAAKsB,SAAS,yBAC/Fe,EAAOwN,sBAA+B,GAAM6J,EAAZ,GAChCrX,EAAOyN,oBAAsB,GAAM,IAAO,EAAI4J,E,CAER,MAApC1Z,KAAKsB,SAAS,qBAChBe,EAAO6M,OAASlP,KAAKsB,SAAS,mB,CAIpC,CAEA,QAAAyC,CAASnC,GACP5B,KAAKyZ,eACP,CACA,uBAAArV,GACsB,YAAhBpE,KAAK4B,KAAKkU,GACZ9V,KAAKsZ,cAAgB,CAACjX,EAAsB0N,KAC1C,IAAIuI,EAAmB,kBACrBjW,EAAO6M,OAASlP,KAAK4B,KAAKmS,GAAK1R,EAAOwN,sBAAwBE,EAAW1N,EAAO6M,OAASlP,KAAK4B,KAAKmS,GAAK1R,EAAOyN,4BAEjHzN,EAAOC,GAAGiE,MAAMiS,UAAYF,EAC5BjW,EAAOkK,SAASzH,SAASC,IACvBA,EAAQwB,MAAMiS,UAAYF,CAAgB,GAC1C,EAGJtY,KAAKsZ,cAAgB,CAACjX,EAAsB0N,KAC1C,IAAIuI,EAAmB,eACrBjW,EAAO6M,OAASlP,KAAK4B,KAAKmS,GAAK1R,EAAOwN,sBAAwBE,EAAW1N,EAAO6M,OAASlP,KAAK4B,KAAKmS,GAAK1R,EAAOyN,+BAEjHzN,EAAOC,GAAGiE,MAAMiS,UAAYF,EAC5BjW,EAAOkK,SAASzH,SAASC,IACvBA,EAAQwB,MAAMiS,UAAYF,CAAgB,GAC1C,CAGR,CAEA,QAAAzU,GACM0O,OAAO0G,WAAa,KACtBjZ,KAAKyZ,cAAgBzZ,KAAKuZ,sBAE1BvZ,KAAKyZ,cAAgBzZ,KAAKwZ,oBAC1BxZ,KAAKyB,QAAQqD,SAASzC,IACpBrC,KAAKsZ,cAAcjX,EAAQ,GAAG,IAGpC,EC5EK,MAAMsX,UAAuB1Y,EAElC,WAAAG,CAAYC,GACVoD,MAAMpD,GAFA,KAAAoV,QAAU,EAGhBzW,KAAK2B,QAAU,UACjB,CAEA,QAAAoC,CAASnC,GACP5B,KAAKyB,QAAQqD,SAASzC,IACpBrC,KAAK4Z,YAAYvX,EAAO,GAE5B,CAEA,SAAAW,CAAUX,GACRA,EAAO6J,QAAU,KACflM,KAAK4Z,YAAYvX,EAAO,CAE5B,CAEQ,WAAAuX,CAAYvX,GAClB,MAAM0N,EAAW3E,KAAKoG,IAAI,EAAGpG,KAAKsG,IAAI,GAAI1R,KAAK4B,KAAKwS,EAAI/R,EAAO0M,UAAY1M,EAAO4M,gBAE9E5M,EAAO0N,WAAaA,IACpB1N,EAAO0N,SAAWA,EAClB/P,KAAK6Z,cAAcxX,GAEzB,CAEQ,aAAAwX,CAAcxX,GACpB,MAAMyX,EAAczX,EAAO0N,SAASrC,WAEpC1N,KAAKkC,OAAO2E,KAAK,YAAYxE,EAAOa,KAAMb,EAAO0N,UACjD1N,EAAOC,GAAGiE,MAAMkF,YAAYpJ,EAAOlC,IAAK2Z,GAEpCzX,EAAOkK,SAAST,OAAS,GACzBzJ,EAAOkK,SAASzH,SAASC,IACrBA,EAAQwB,MAAMkF,YAAYpJ,EAAOlC,IAAK2Z,EAAY,GAG5D,ECxCK,MAAMC,EAgBX,WAAA3Y,CAAYwD,EAAetD,EAA8BM,GAdlD,KAAAoY,QAAkB,EAClB,KAAAC,mBAA6B,EAC7B,KAAAC,KAAe,GAEf,KAAAlB,EAAI,EACD,KAAAmB,GAAa,EAGhB,KAAA5X,cAAgB,OAChB,KAAAC,aAAe,OACf,KAAAC,kBAAoB,OAW3B,KAAA2X,aAAoB,KAClBpa,KAAKqa,gBAAgB3F,SAAS,EAAG1U,KAAK4B,KAAKwS,EAAE,EAMrC,KAAAkG,iBAA8C,WAbtDta,KAAKua,EAAI3V,EACT5E,KAAKsB,SAAWA,EAChBtB,KAAK4B,KAAOA,EACZ5B,KAAKqa,gBAAkB9H,MACzB,CAKA,QAAA3O,GAAkB,CAClB,OAAAM,CAAQD,GAAe,CACvB,QAAAF,CAASE,GAAe,CAGxB,mBAAIuW,CAAgBA,GAElBxa,KAAKsa,iBAAmBE,EACK,YAAzBxa,KAAKsa,iBACPta,KAAKoa,aAAe,KAElBpa,KAAKqa,gBAAgB3F,SAAS,EAAG1U,KAAK4B,KAAKwS,EAAE,EAEb,cAAzBpU,KAAKsa,mBACdta,KAAKoa,aAAe,KAClBpa,KAAKqa,gBAAgB3F,SAAS1U,KAAK4B,KAAKwS,EAAG,EAAE,EAGnD,EC1CK,MAAMqG,UAA4BV,EACvC,WAAA3Y,CAAYwD,EAAetD,EAA8BM,GACvD6C,MAAMG,EAAUtD,EAAUM,GAC1B5B,KAAKka,KAAO,QACd,CACO,QAAAtW,GACL,GAAiB,GAAb5D,KAAK4B,KAAK2Y,EAAM,CAClB,IAAIG,EAAQ1a,KAAK4B,KAAK2Y,EAAIva,KAAKsB,SAASqZ,gBACxC3a,KAAK4B,KAAK2Y,GAAKG,EACf1a,KAAK4B,KAAKoX,EAAI0B,EAEVtP,KAAKC,IAAIrL,KAAK4B,KAAKoX,GAAK,KAC1BhZ,KAAK4B,KAAK2Y,EAAI,EACdva,KAAK4B,KAAKoX,EAAI,EACdhZ,KAAKwC,e,CAGX,CACO,QAAAuB,CAASE,GACdjE,KAAK4B,KAAKwS,EAAIpU,KAAKua,EAAEhT,gBAAgBqT,UACrC5a,KAAK4B,KAAK6S,EAAIzU,KAAKua,EAAEhT,gBAAgBqT,SACvC,CAEO,OAAA1W,CAAQD,GACb,GAAgB,GAAZA,EAAEsQ,OAAa,CACE,GAAfvU,KAAK4B,KAAK2Y,GACZva,KAAKuC,gBAEP,IAAIsY,EAAY5W,EAAEsQ,OACC,GAAfvU,KAAK4B,KAAK6S,IACZzU,KAAK4B,KAAK2Y,GAAKnP,KAAKsG,IAAI,EAAGzN,EAAEsQ,SAE/BvU,KAAK4B,KAAK2Y,GAAKM,C,CAEnB,EClCK,MAAMC,UAA4Bf,EACvC,WAAA3Y,CAAYwD,EAAetD,EAA8BM,GACvD6C,MAAMG,EAAUtD,EAAUM,GAC1B5B,KAAKka,KAAO,SACd,CAEO,QAAAtW,GAAY,CAEZ,OAAAM,CAAQD,GACbA,EAAE8W,gBACJ,CAEO,QAAAhX,CAASE,GACdA,EAAE8W,gBACJ,ECfF,MAAMC,EACY,kBADZA,EAES,eAGR,MAAMC,UAA2BlB,EAOtC,WAAA3Y,CAAYwD,EAAetD,EAA8BM,GACvD6C,MAAMG,EAAUtD,EAAUM,GAPZ,KAAAsY,KAAe,UACvB,KAAAgB,yBAA0B,EAC1B,KAAAC,yBAA0B,EACjB,KAAAC,kBAAoB,GAC7B,KAAAC,gBAA0B,CAIlC,CAEQ,qBAAAC,CAAsBC,GAC5B,GAAIvb,KAAKmb,0BAA4BI,EAAc,OACnDvb,KAAKmb,wBAA0BI,EAC/Bvb,KAAK4B,KAAKuX,IAAMoC,EAChBvb,KAAKyC,oBACL,MAAM+Y,EAAYD,EAClB3W,SAAS2C,gBAAgBpC,UAAUsW,OAAOT,EAA4BQ,GACtE5W,SAAS2C,gBAAgBpC,UAAUsW,OAAOT,GAA0BQ,EACtE,CAEO,UAAAE,GACL1b,KAAK4B,KAAKoX,EAAI,EACdhZ,KAAK4B,KAAK2Y,EAAI,EACdva,KAAK4B,KAAK6S,EAAIzU,KAAK4B,KAAKwS,EACxBpU,KAAKga,QAAS,EACdha,KAAKoa,eACLxV,SAAS2C,gBAAgBpC,UAAU4G,OAAOiP,EAAyBA,EACrE,CAEO,QAAApX,GAEL,GAAmB,GAAf5D,KAAK4B,KAAK2Y,EAAQ,CACpB,GAAIva,KAAKkb,wBAKP,OAJAlb,KAAKkb,yBAA0B,EAC/Blb,KAAK4B,KAAKwS,EAAIpU,KAAK4B,KAAK6S,EACxBzU,KAAKoa,oBACLpa,KAAK0b,aAGP,IAAIhB,EAAQ1a,KAAK4B,KAAK2Y,EAAIva,KAAKsB,SAASqZ,gBACxC3a,KAAK4B,KAAK6S,EAAIrJ,KAAKoG,IAAIpG,KAAKsG,IAAI,EAAG1R,KAAK4B,KAAK6S,EAAIiG,GAAQ1a,KAAK4B,KAAK6M,IACnEzO,KAAK4B,KAAK2Y,GAAKG,EACf1a,KAAK4B,KAAKoX,GAAKhZ,KAAK4B,KAAK6S,EAAIzU,KAAK4B,KAAKwS,GAAKpU,KAAKsB,SAASqa,MAI1D,MAAMC,EAAcxQ,KAAKC,IAAIrL,KAAK4B,KAAKoX,GACvChZ,KAAK4B,KAAKwS,GAAKpU,KAAK4B,KAAKoX,EACzBhZ,KAAKsb,sBAAsBtb,KAAK4B,KAAKoX,EAAI,GAErC4C,EAAc5b,KAAKob,mBACrBpb,KAAK0b,aACL1b,KAAKwC,iBAELxC,KAAKga,QAAS,EACdha,KAAKoa,e,CAmBX,CAEO,OAAAlW,CAAQD,GACbA,EAAE8W,iBACF,IAAIF,EAAY5W,EAAEsQ,OAClB,GAAkB,IAAdsG,EAAiB,OAED,IAAhB7a,KAAK4B,KAAK2Y,GACVva,KAAKuC,gBAGT,IAAIiY,EAAkBpP,KAAKyQ,KAAKhB,GACX,IAAhB7a,KAAK4B,KAAK6S,GAAW+F,EAAkB,GAAOxa,KAAK4B,KAAK6S,IAAMzU,KAAK4B,KAAK6M,IAAM+L,EAAkB,IAErGxa,KAAK4B,KAAK2Y,GAAKM,EAWjB,CAGO,QAAA9W,CAASE,G,QAETjE,KAAKga,OAKR/V,EAAE8W,kBAJF/a,KAAKkb,yBAA0B,EAC/Blb,KAAK4B,KAAK2Y,EAAI,EACdva,KAAK4B,KAAK6S,EAAmC,QAA/B,EAAoB,QAApB,EAAAzU,KAAKqa,uBAAe,eAAEO,iBAAS,QAAIhW,SAAS2C,gBAAgBqT,UAI9E,ECzHK,MAAMkB,EAAb,cACU,KAAAC,GAAa,GACb,KAAAC,GAAa,GAiBvB,CAfE,SAAWL,GACT,OAAO3b,KAAK+b,EACd,CACA,mBAAWpB,GACT,OAAO3a,KAAKgc,EACd,CAEA,mBAAWrB,CAAgBgB,GACzB3b,KAAKgc,GAAKL,CACZ,CACA,SAAWA,CAAMA,GACf3b,KAAK+b,GAAKJ,CACZ,ECIK,MAAMM,UAAoBhb,EAC/B,WAAAG,CAAYC,GACVoD,MAAMpD,GACNrB,KAAK2B,QAAU,OACjB,CAEA,OAAAgC,GAAiB,CACjB,QAAAE,GACEe,SAASC,iBAAiB,6BAA6BC,SAASC,IAC9D,MAAMmX,EAAelc,KAAKmc,kBAAkBpX,EAAQG,aAAa,iBAC7DH,EAAQqX,WAAapc,KAAK2W,MAAMuF,EAAcnX,GAASsX,OACzDtX,EAAQqX,UAAYpc,KAAK2W,MAAMuF,EAAcnX,GAASsX,K,GAG5D,CAEA,SAAArZ,CAAUX,GACR,IAAI0C,EAAU1C,EAAOC,GACrB,IAAKyC,EAAQI,UAAUmX,SAAS,YAAa,CAC3CvX,EAAQI,UAAUC,IAAI,YACtBL,EAAQgD,aAAa,wBAAyBhD,EAAQqX,WACtD,MAAMF,EAAelc,KAAKmc,kBAAkBpX,EAAQG,aAAa,iBAE7DH,EAAQqX,WAAapc,KAAK2W,MAAMuF,EAAcnX,GAASsX,OACzDtX,EAAQqX,UAAYpc,KAAK2W,MAAMuF,EAAcnX,GAASsX,K,CAG5D,CAEQ,iBAAAF,CAAkBI,GACxB,MAAMC,EAAyB,CAC7BC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,SAAU,GACVC,SAAU,GACVC,SAAU,IAqCZ,OAlCIP,GACYA,EAAe5F,MAAM,KAE7B7R,SAASgS,IACb,MAAMiG,EAAQjG,EAAKiG,MAAM,8BAEzB,GAAIA,EAAO,CACT,MAAMC,EAASD,EAAM,IAAM,GACrBE,EAASF,EAAM,GACfG,EAASH,EAAM,GAAKA,EAAM,GAAGpG,MAAM,KAAO,GAChD,OAAQqG,EAASC,GACf,IAAK,YACFT,EAAQI,SAAmBvZ,KAAKrD,KAAKmd,WAAWD,IACjD,MACF,IAAK,YACFV,EAAQK,SAAmBxZ,KAAKrD,KAAKmd,WAAWD,IACjD,MACF,IAAK,YACFV,EAAQM,SAAmBzZ,KAAKrD,KAAKmd,WAAWD,IACjD,MACF,IAAK,OACFV,EAAQC,KAAepZ,KAAKrD,KAAKmd,WAAWD,IAC7C,MACF,IAAK,OACFV,EAAQE,KAAerZ,KAAKrD,KAAKmd,WAAWD,IAC7C,MACF,IAAK,OACFV,EAAQG,KAAetZ,KAAKrD,KAAKmd,WAAWD,I,KAOhDV,CACT,CAEQ,UAAAW,CAAWD,GACjB,MAAME,EAAkF,CAAEC,MAAO,SAoBjG,OAlBAH,EAAOpY,SAASwY,IACd,GAAc,QAAVA,EACFF,EAAO/R,KAAM,OACR,GAAIiS,EAAMtG,WAAW,UAAW,CACrC,MAAM+F,EAAQO,EAAMP,MAAM,yBACtBA,GACFK,EAAO/F,OAAS,CAAE7F,IAAK+L,SAASR,EAAM,IAAKrL,IAAK6L,SAASR,EAAM,KAC/DK,EAAOC,MAAQ,UAEfD,EAAOC,MAAQ,Q,KAER,CAAC,QAAS,SAAU,OAAOva,SAASwa,GAC7CF,EAAOC,MAAQC,EAEfF,EAAOC,MAAQ,O,IAIZD,CACT,CAEO,KAAAzG,CAAM6F,EAAwBgB,GAEnC,IAAIC,EAAOD,EAAYtY,aAAa,yBACpC,GAAoB,IAAhBuY,EAAK3R,OAAc,MAAO,GAE9B2R,EAAOzd,KAAK0d,iBAAiBD,GAE7B,MAAM1Y,EAAUH,SAASqR,cAAc,QACjC0H,EAAQF,EAAK9G,MAAM,OACzB,IAAIiH,EAAkB,EAClBC,EAAkB,EACtB,MAAMC,EAAaL,EAAKM,QAAQ,MAAO,IAAIjS,OAErCkS,EAAWpZ,SAASqR,cAAc,QAClCgI,EAAa1L,OAAO2L,iBAAiBV,GAE3CQ,EAASzX,MAAM4X,WAAaF,EAAWE,WACvCH,EAASzX,MAAM6X,SAAWH,EAAWG,SACrCJ,EAASzX,MAAM8X,cAAgBJ,EAAWI,cAC1CL,EAASzX,MAAM+X,WAAaL,EAAWK,WACvCN,EAASzX,MAAMgY,WAAaN,EAAWM,WACvCP,EAAS7Y,UAAUC,IAAI,WACvBR,SAASyR,KAAKD,YAAY4H,GAE1B,IAAIQ,EAAsB,GACtBC,EAAqB,GACrBC,EAAmB,EACvBf,EAAM7Y,SAAQ,CAAC4X,EAAWiC,KACxBX,EAAS9H,YAAcwG,EACnBA,EAAK5Q,OAAS,IAChBkS,EAAS9H,aAAe,KAG1B,MAAM0I,EAAYZ,EAASa,YAErBC,EAAkB,CACtBrB,KAAMf,EACNjW,MAAOmY,EACPG,MAAO,IAAIrd,OAECA,MAAMsd,KAAKtC,GACnB5X,SAAQ,CAAC6X,EAAMsC,KACnB,MAAMC,EAAkB,CACtBzB,KAAMd,GAGRmC,EAAgBC,MAAM1b,KAAK6b,EAAgB,IAEzCR,EAAmBE,EAAYpB,EAAYqB,cAC7CL,EAAanb,KAAKob,GAClBA,EAAc,GACdC,EAAmB,EACnBd,GAAmBa,EAAY3S,QAEjC2S,EAAYpb,KAAKyb,GACjBJ,GAAoBE,CAAS,IAG/BJ,EAAanb,KAAKob,GAElB,IAAIU,GAAiB,EACD,MAAhB3C,EAAQC,MACND,EAAQC,KAAK3Q,OAAS,IACxBqT,GAAiB,GAGG,MAApB3C,EAAQM,UACNN,EAAQM,SAAShR,OAAS,IAC5BqT,GAAiB,GAGG,MAApB3C,EAAQI,UACNJ,EAAQI,SAAS9Q,OAAS,IAC5BqT,GAAiB,GAIrB,IAAIC,EAAkB,EACtB,GAAID,EAIF,IAAK,IAAIzG,EAAI,EAAGA,EAAI8F,EAAa1S,OAAQ4M,IACvC1Y,KAAKqf,uBACH3G,EACA8F,EAAa1S,OACb6R,EAAM7R,OACN/G,EACAyZ,EAAa9F,GACb8D,EACAoB,EACAE,EACAsB,GAEFA,GAAmBZ,EAAa9F,GAAG5M,YAGrC,IAAK,IAAI4M,EAAI,EAAGA,EAAI8F,EAAa1S,OAAQ4M,IACvC8F,EAAa9F,GAAG5T,SAAQ,CAACga,EAAsBH,K,QAC7C,GAAIG,EAAgBC,MAAMjT,OAAS,EAAG,CACpC,MAAMwT,EAAW1a,SAASqR,cAAc,QACxCqJ,EAASna,UAAUC,IAAI,WACJ,MAAdoX,EAAQG,OAA0B,QAAZ,EAAAH,EAAQG,YAAI,eAAE7Q,QAAS,GAA2B,MAApB0Q,EAAQK,WAAoC,QAAhB,EAAAL,EAAQK,gBAAQ,eAAE/Q,QAAS,EAC7GgT,EAAgBC,MAAMja,SAAQ,CAACoa,EAAsBD,KACpD,MAAMM,EAAW3a,SAASqR,cAAc,QACxCsJ,EAASpa,UAAUC,IAAI,WACvBma,EAASrJ,YAAcgJ,EAAgBzB,KACvCzd,KAAKwf,aAAaD,EAAU/C,EAAQG,KAAMiB,EAAiB,OAAQqB,EAAWnB,GAC9E9d,KAAKwf,aAAaD,EAAU/C,EAAQK,SAAUoC,EAAW,YAAaA,EAAWH,EAAgBrB,KAAK3R,QACtGwT,EAASlJ,YAAYmJ,GACrB3B,GAAiB,IAGnB0B,EAASpJ,YAAc4I,EAAgBrB,KAIzCzd,KAAKwf,aAAaF,EAAU9C,EAAQE,KAAMmB,EAAiB,OAAQc,EAAWhB,EAAM7R,QAChFgT,EAAgBC,MAAMjT,OAAS,IACjCwT,EAASlD,WAAa,KAExBrX,EAAQqR,YAAYkJ,GACpBzB,G,KAOR,OADAjZ,SAASyR,KAAKoJ,YAAYzB,GACnB,CAAE3B,KAAMtX,EAAQqX,UACzB,CAGQ,sBAAAiD,CACNK,EACA5T,EACA6T,EACA5a,EACA0Z,EACAjC,EACAoB,EACAE,EACAsB,GAEA,MAAMQ,EAAWhb,SAASqR,cAAc,QACxC2J,EAASza,UAAUC,IAAI,WAEvBpF,KAAKwf,aAAaI,EAAUpD,EAAQC,KAAMiD,EAAW,OAAQ,EAAG5T,GAEhE,IAAI+T,EAAgB,EAChBhC,EAAkB,EAClBiC,EAAiB,EACrBrB,EAAY3Z,SAAQ,CAACga,EAAiBH,KACpCmB,GAAkBhB,EAAgBrB,KAAK3R,MAAM,IAE/C2S,EAAY3Z,SAAQ,CAACga,EAAiBH,KACpC,GAAIG,EAAgBC,MAAMjT,OAAS,EAAG,CACpC,MAAMwT,EAAW1a,SAASqR,cAAc,QACxCqJ,EAASna,UAAUC,IAAI,WAEvB0Z,EAAgBC,MAAMja,SAAQ,CAACoa,EAAsBD,KACnD,MAAMM,EAAW3a,SAASqR,cAAc,QACxCsJ,EAASpa,UAAUC,IAAI,WACvBma,EAASrJ,YAAcgJ,EAAgBzB,KAEvCzd,KAAKwf,aAAaD,EAAU/C,EAAQG,KAAMiB,EAAiB,OAAQqB,EAAWnB,GAC9E9d,KAAKwf,aAAaD,EAAU/C,EAAQI,SAAUiD,EAAe,YAAaZ,EAAWa,GACrF9f,KAAKwf,aAAaD,EAAU/C,EAAQK,SAAUoC,EAAW,YAAaA,EAAWH,EAAgBrB,KAAK3R,QAEtGwT,EAASlJ,YAAYmJ,GACrB3B,IACAiC,GAAe,IAGjB7f,KAAKwf,aACHF,EACA9C,EAAQE,KACR0C,EAAkBvB,EAClB,OACAuB,EAAkBvB,EAClB8B,EAAa,GAEf3f,KAAKwf,aAAaF,EAAU9C,EAAQM,SAAU6B,EAAW,YAAaA,EAAWF,EAAY3S,QAEzF6S,EAAYF,EAAY3S,OAAS,IACnCwT,EAASlD,WAAa,KAIxBwD,EAASxJ,YAAYkJ,GAIrBzB,G,KAIJ9Y,EAAQqR,YAAYwJ,EACtB,CAEQ,YAAAJ,CACNO,EACAC,EACAC,EACA/e,EACAgf,EACAC,GAEIH,GACFA,EAAYlb,SAAQ,CAACmY,EAAQmD,KAC3B,IAAI5c,EAAQxD,KAAKqgB,eAAepD,EAAQgD,EAAaC,EAAYC,GAEjE,MAAMG,EAAetgB,KAAKugB,qBAAqBrf,EAAM+b,EAAQmD,GAC7DL,EAAKxZ,MAAMkF,YAAY6U,EAAcE,OAAOhd,GAAO,GAGzD,CAEQ,eAAAid,GACN,MAAMC,EAAY9b,SAASqR,cAAc,QAEzC,OADAyK,EAAUtE,UAAY,IACfsE,CACT,CAEQ,gBAAAhD,CAAiBiD,GACvB,OAAOA,EAAI5C,QAAQ,SAAU,IAC/B,CAEQ,cAAAsC,CACN7D,EACAyD,EACAC,EACAC,GAEA,IAAI3c,EAAQyc,EACZ,GAAsB,WAAlBzD,EAAQa,MAAoB,MACP5L,IAAnB+K,EAAQnF,SACVmF,EAAQnF,OAAS,CAAE7F,IAAK,EAAGE,IAAKyO,IAElC,MAAM3O,EAAMgL,EAAQnF,OAAO7F,KAAO,EAC5BE,EAAM8K,EAAQnF,OAAO3F,KAAOyO,EAClC3c,EAAQ4H,KAAKgM,MAAMhM,KAAKiM,UAAY3F,EAAMF,EAAM,IAAMA,C,CAWxD,MATsB,QAAlBgL,EAAQa,MACV7Z,EAAQ2c,EAAe3c,EAAQ,EACJ,WAAlBgZ,EAAQa,QACjB7Z,GAAgB4H,KAAKgM,MAAM+I,EAAe,IAGxC3D,EAAQnR,MACV7H,EAAQ4H,KAAKC,IAAI7H,IAEZA,CACT,CAEQ,oBAAA+c,CACNrf,EACA+b,EACAzZ,GAEA,IAAI8c,EAAe,KAAKpf,IAIxB,OAHI+b,EAAOI,QACTiD,GAAgB,IAAIrD,EAAOI,SAEtBiD,CACT,ECjYK,MAAMM,EAAb,cACU,KAAAC,oBAA8B,EAC9B,KAAAC,YAAsB,EACtB,KAAAtY,KAAe,EACf,KAAAuY,mBAA6B,EAC7B,KAAAC,gBAA8B,OAC9B,KAAAC,QAAsB,MAsChC,CApCS,KAAAxR,CAAMyR,GACPlhB,KAAK6gB,qBACT7gB,KAAK8gB,YAAc,IAAOI,EAC1BlhB,KAAKwI,KAAO2Y,YAAYC,MACxBphB,KAAK6gB,oBAAqB,EAIxB7gB,KAAKihB,QADI,GAAPC,EACa,KACblhB,KAAKghB,kBACLhhB,KAAK+gB,mBAAqBtX,uBAAsB,IAAMzJ,KAAKihB,WAAU,EAGxD,KACbjhB,KAAK+gB,mBAAqBtX,uBAAsB,IAAMzJ,KAAKihB,YAC3D,MAAMG,EAAMD,YAAYC,MAClBC,EAAUD,EAAMphB,KAAKwI,KACvB6Y,EAAUrhB,KAAK8gB,cACjB9gB,KAAKwI,KAAO4Y,EAAOC,EAAUrhB,KAAK8gB,YAClC9gB,KAAKghB,kB,EAIXhhB,KAAKihB,UACP,CAEO,IAAAK,GACAthB,KAAK6gB,qBACVU,qBAAqBvhB,KAAK+gB,oBAC1B/gB,KAAK+gB,mBAAqB,EAC1B/gB,KAAK6gB,oBAAqB,EAC5B,CAEO,UAAAW,CAAWC,GAChBzhB,KAAKghB,gBAAkBS,CACzB,ECxCK,MAAMC,UAA+BzgB,EAS1C,WAAAG,CAAYC,GACVoD,MAAMpD,GAFA,KAAAsgB,aAAe,EAGrB3hB,KAAKmB,MAAQ,CAKf,CAEA,OAAAwC,GACE3D,KAAK4hB,OAAShd,SAASqR,cAAc,UACrCjW,KAAK6hB,QAAU7hB,KAAK4hB,OAAOE,WAAW,MACtC9hB,KAAK4hB,OAAOnb,MAA4B,GAApB8L,OAAO0G,WAC3BjZ,KAAK4hB,OAAOlb,OAAS6L,OAAOwP,YAAc,GAAK,GAC/C/hB,KAAK2hB,aAAepP,OAAOwP,YAAc,GAAK,GAC9C/hB,KAAK4hB,OAAOrb,MAAMvE,SAAW,QAC7BhC,KAAK4hB,OAAOrb,MAAMyb,OAAYzP,OAAOwP,YAAc,GAAK,GAA7B,KAC3B/hB,KAAK4hB,OAAOrb,MAAMyD,KAAO,MACzBhK,KAAK4hB,OAAOrb,MAAMiS,UAAY,mBAC9BxY,KAAK4hB,OAAOrb,MAAM0b,gBAAkB,UACpCjiB,KAAK4hB,OAAOrb,MAAM2b,OAAS,qCAC3BliB,KAAK4hB,OAAOrb,MAAM4b,OAAS,OAC3Bvd,SAASyR,KAAKD,YAAYpW,KAAK4hB,QAE/B5hB,KAAKoiB,gBAAkB,GACvBpiB,KAAKqiB,WAAariB,KAAK4hB,OAAOnb,MAC9BzG,KAAKsiB,gBAAkB,EACvBtiB,KAAKuiB,eAAiB,CACxB,CAEA,QAAAxe,CAASnC,GACP5B,KAAKsiB,gBAAkBlX,KAAKC,IAAIrL,KAAK4B,KAAK2W,IAC1CvY,KAAKoiB,gBAAgB/e,KAAKrD,KAAKsiB,iBAC3BtiB,KAAKoiB,gBAAgBtW,OAAS9L,KAAKqiB,YACrCriB,KAAKoiB,gBAAgBI,QAEvBxiB,KAAKyiB,WACP,CAGA,SAAAA,GACE,MAAMC,EAAM1iB,KAAK6hB,QACjBa,EAAIC,UAAU,EAAG,EAAG3iB,KAAK4hB,OAAOnb,MAAOzG,KAAK4hB,OAAOlb,QACnDgc,EAAIE,YAAc,UAClBF,EAAIG,UAAY,EAChBH,EAAIE,YAAc,MAClBF,EAAIG,UAAY,EAChBH,EAAII,YACJ9iB,KAAKoiB,gBAAgBtd,SAAQ,CAACie,EAAUvf,KACtC,MAAMuG,EAAIvG,EACJ0G,EAAIlK,KAAK4hB,OAAOlb,OAASqc,EAAM/iB,KAAK2hB,aAC5B,IAAVne,EACFkf,EAAIM,OAAOjZ,EAAGG,GAEdwY,EAAIO,OAAOlZ,EAAGG,E,IAGlBwY,EAAIQ,QACN,CAEA,iBAAAC,CAAkBnhB,GAChBhC,KAAKuiB,eAAiBvgB,CACxB,ECvEK,MAAMohB,UAAyBniB,EAMpC,WAAAG,CAAYC,GACVoD,MAAMpD,GANA,KAAAgiB,UAAY,EACZ,KAAAC,MAAuB,KACvB,KAAAC,eAAsB,KACtB,KAAAC,eAAiB,EA+BjB,KAAAC,WAAcC,IACf1jB,KAAKwjB,iBACRxjB,KAAKwjB,eAAiBE,GAEVA,EAAY1jB,KAAKwjB,gBAClB,MACXxjB,KAAKujB,eAAexb,aAAa,WAAY/H,KAAKqjB,WAIlDrjB,KAAKqjB,UAAY,EACjBrjB,KAAKwjB,eAAiBE,GAExB1jB,KAAKsjB,MAAQ7Z,sBAAsBzJ,KAAKyjB,WAAW,EAxCnDzjB,KAAKmB,MAAQ,CACf,CACQ,oBAAAwiB,GACN3jB,KAAKujB,eAAiB3e,SAASqR,cAAc,OAC7CjW,KAAKujB,eAAehd,MAAMvE,SAAW,QACrChC,KAAKujB,eAAehd,MAAMyb,OAAS,OACnChiB,KAAKujB,eAAehd,MAAMqd,MAAQ,OAClC5jB,KAAKujB,eAAehd,MAAM0b,gBAAkB,UAC5CjiB,KAAKujB,eAAehd,MAAM2b,OAAS,qCACnCliB,KAAKujB,eAAehd,MAAM4b,OAAS,OACnCniB,KAAKujB,eAAehd,MAAMsd,MAAQ,UAClC7jB,KAAKujB,eAAexb,aAAa,WAAY,KAC7CnD,SAASyR,KAAKD,YAAYpW,KAAKujB,gBAC/B,MAAMhd,EAAQ3B,SAASqR,cAAc,SACrC1P,EAAM6V,UAAY,oQAWlBxX,SAASuR,KAAKC,YAAY7P,EAC5B,CAgBA,OAAA5C,GACE3D,KAAK2jB,uBACL3jB,KAAKwjB,eAAiB,CACxB,CAEA,QAAA5f,CAAShC,GACP5B,KAAKqjB,YACLrjB,KAAKyjB,WAAWzjB,KAAKwjB,eACvB,CAEA,UAAA9gB,GACEkC,SAASyR,KAAKoJ,YAAYzf,KAAKujB,eACjC,EC9DK,MAAMO,UAA0B7iB,EAOrC,WAAAG,CAAYC,GACVoD,MAAMpD,GACNrB,KAAKmB,MAAQ,CAKf,CAEA,OAAAwC,GACE3D,KAAK4hB,OAAShd,SAASqR,cAAc,UACrCjW,KAAK6hB,QAAU7hB,KAAK4hB,OAAOE,WAAW,MACtC9hB,KAAK4hB,OAAOnb,MAA4B,GAApB8L,OAAO0G,WAC3BjZ,KAAK4hB,OAAOlb,OAAS6L,OAAOwP,YAAc,GAAK,GAC/C/hB,KAAK4hB,OAAOrb,MAAMvE,SAAW,QAC7BhC,KAAK4hB,OAAOrb,MAAMyb,OAAS,OAC3BhiB,KAAK4hB,OAAOrb,MAAMyD,KAAO,MACzBhK,KAAK4hB,OAAOrb,MAAMiS,UAAY,mBAC9BxY,KAAK4hB,OAAOrb,MAAM0b,gBAAkB,UACpCjiB,KAAK4hB,OAAOrb,MAAM2b,OAAS,qCAC3BliB,KAAK4hB,OAAOrb,MAAM4b,OAAS,OAC3Bvd,SAASyR,KAAKD,YAAYpW,KAAK4hB,QAE/B5hB,KAAKoiB,gBAAkB,GACvBpiB,KAAKqiB,WAAariB,KAAK4hB,OAAOnb,MAC9BzG,KAAKsiB,gBAAkB,EACvBtiB,KAAKuiB,eAAiB,CACxB,CAEA,QAAAxe,CAASnC,GACP5B,KAAKsiB,gBAAkBlX,KAAKC,IAAIrL,KAAK4B,KAAKoX,GAC1ChZ,KAAKoiB,gBAAgB/e,KAAKrD,KAAKsiB,iBAC3BtiB,KAAKoiB,gBAAgBtW,OAAS9L,KAAKqiB,YACrCriB,KAAKoiB,gBAAgBI,QAEvBxiB,KAAKyiB,WACP,CAGA,SAAAA,GACE,MAAMC,EAAM1iB,KAAK6hB,QACjBa,EAAIC,UAAU,EAAG,EAAG3iB,KAAK4hB,OAAOnb,MAAOzG,KAAK4hB,OAAOlb,QACnDgc,EAAIE,YAAc,UAClBF,EAAIG,UAAY,EAChBH,EAAIE,YAAc,UAClBF,EAAIG,UAAY,EAChBH,EAAII,YACJ9iB,KAAKoiB,gBAAgBtd,SAAQ,CAACie,EAAUvf,KACtC,MAAMuG,EAAIvG,EACJ0G,EAAIlK,KAAK4hB,OAAOlb,OAASqc,EAAM,EACvB,IAAVvf,EACFkf,EAAIM,OAAOjZ,EAAGG,GAEdwY,EAAIO,OAAOlZ,EAAGG,E,IAGlBwY,EAAIQ,QACN,CAEA,iBAAAC,CAAkBnhB,GAChBhC,KAAKuiB,eAAiBvgB,CACxB,ECpEK,MAAM+hB,UAA8B9iB,EAKzC,WAAAG,CAAYC,GACVoD,MAAMpD,GALA,KAAAgiB,UAAoB,EAM1BrjB,KAAKmB,MAAQ,CACf,CACQ,oBAAAwiB,GACN3jB,KAAKujB,eAAiB3e,SAASqR,cAAc,OAC7CjW,KAAKujB,eAAehd,MAAMvE,SAAW,QACrChC,KAAKujB,eAAehd,MAAMyb,OAAS,OACnChiB,KAAKujB,eAAehd,MAAMyD,KAAO,OACjChK,KAAKujB,eAAehd,MAAM0b,gBAAkB,UAC5CjiB,KAAKujB,eAAehd,MAAM2b,OAAS,qCACnCliB,KAAKujB,eAAehd,MAAM4b,OAAS,OACnCniB,KAAKujB,eAAexb,aAAa,gBAAiB,KAClDnD,SAASyR,KAAKD,YAAYpW,KAAKujB,gBAC/B,MAAMhd,EAAQ3B,SAASqR,cAAc,SACrC1P,EAAM6V,UAAY,2RAWlBxX,SAASuR,KAAKC,YAAY7P,EAC5B,CACA,OAAA5C,GACE3D,KAAK2jB,sBACP,CAEA,QAAA5f,CAASnC,GACP,IAAIoiB,EAAY,GACZpiB,EAAKwS,EAAIxS,EAAK6S,IAChBuP,EAAY,KAEVpiB,EAAKwS,EAAIxS,EAAK6S,IAChBuP,EAAY,KAEdhkB,KAAKujB,eAAexb,aAAa,YAAaic,GAC9ChkB,KAAKujB,eAAexb,aAAa,QAAS,GAAG/H,KAAK4B,KAAKwS,IACzD,CAEA,QAAAxQ,CAAShC,GACP5B,KAAKqjB,WACP,CAEA,UAAA3gB,GACEkC,SAASyR,KAAKoJ,YAAYzf,KAAKujB,eACjC,EC1DK,MAAMU,EACX,OAAAtc,CAAQ1D,EAAQigB,EAAW3J,EAAS,MAClC,OAA4B,MAArBtW,EAAEiB,aAAagf,GAAa3J,EAAItW,EAAEiB,aAAagf,EACxD,ECHK,MAAMC,EACX,OAAAxc,CAAQ1D,GACN,OAAOA,EAAE4F,uBACX,ECHK,MAAMua,EAAb,cACE,KAAAC,MAAa,KAEb,KAAA5P,EAAY,EACZ,KAAAL,EAAY,EACZ,KAAAmG,EAAY,EACZ,KAAAvB,EAAY,EACZ,KAAAT,GAAa,EACb,KAAAY,KAAe,EAEf,KAAA1K,GAAa,EACb,KAAA6V,GAAa,EACb,KAAAvQ,GAAa,EACb,KAAAwQ,KAAe,EAEf,KAAA1P,IAAc,EACd,KAAAhB,IAAc,EAEd,KAAA2Q,GAAU,CAACza,EAAE,EAAEG,EAAE,GAEjB,KAAAua,KAAe,EACf,KAAAC,KAAe,EACf,KAAA5O,GAAgC,WAEhC,KAAAD,GAAuC,QACzC,ECzBO,MAAM8O,EAAb,cAEU,KAAAC,YAA4C,IAAIpjB,IAChD,KAAAU,OAA0B,IAAIR,KAqCxC,CApCE,EAAAmjB,CAAG3hB,EAAY4hB,G,MACoB,GAA5B9kB,KAAK4kB,YAAYzhB,IAAID,IACxBlD,KAAK4kB,YAAYxhB,IAAIF,EAAI,IAEH,QAAxB,EAAAlD,KAAK4kB,YAAYpkB,IAAI0C,UAAG,SAAEG,KAAKyhB,GAC/B9kB,KAAK+kB,iBACP,CACO,GAAA5hB,CAAID,GACT,OAAOlD,KAAK4kB,YAAYzhB,IAAID,EAC9B,CACO,IAAA2D,CAAK3D,EAAYlC,G,MAClBhB,KAAK4kB,YAAYzhB,IAAID,KACC,QAAxB,EAAAlD,KAAK4kB,YAAYpkB,IAAI0C,UAAG,SAAE4B,SAASggB,IACjCA,EAAM9jB,EAAM,IAGlB,CACO,GAAAgkB,CAAI9hB,EAAY4hB,GACrB,IAAIG,EAAKjlB,KAAK4kB,YAAYpkB,IAAI0C,GACtB,MAAJ+hB,GACFjlB,KAAK4kB,YAAYxhB,IAAIF,EAAI+hB,EAAGC,QAAQC,GAAWA,IAAML,KAEvD9kB,KAAK+kB,iBACP,CACO,GAAAK,CAAIpkB,GACThB,KAAKkC,OAAO4C,SAAQggB,IAClBA,EAAM9jB,EAAM,GAEhB,CACQ,eAAA+jB,GACNrjB,MAAMsd,KAAKhf,KAAK4kB,YAAYS,UAAUvgB,SAAQwgB,IAC5CA,EAAaxgB,SAAQggB,IACnB9kB,KAAKkC,OAAOmB,KAAKyhB,EAAM,GACvB,GAEN,ECvCK,MAAMS,EACJ,WAAAC,CAAYxM,EAAWjU,EAAc0gB,EAASC,GACnD,IAIIC,EAJAC,EAAa5M,EAAEhC,WAAW,KAc9B,OAbI4O,IACF5M,EAAIA,EAAE/B,MAAM,IAGJ,eAAN+B,EACF2M,EAAK5gB,EAAQ8gB,aACJ7M,EAAE8M,SAAS,MACpBH,EAAKI,WAAW/M,GACPA,EAAE8M,SAAS,KACpBH,EAAKI,WAAW/M,GAAKyM,EAAK,IACjBzM,EAAE8M,SAAS,SACpBH,EAAKI,WAAW/M,GAAK0M,GAEhBE,GAAcD,EAAKA,CAC5B,ECSK,MAAMK,EACX,OAAAre,CAAQ1D,EAAQgiB,EAAiBrhB,SAASyR,MACxC,IAAI6P,EACJ,IACEA,EAAKD,EAAUpc,uB,CACf,MAAOsc,GACPD,EAAKthB,SAASyR,KAAKxM,uB,CAErB,IAAIuc,EAlCR,SAA2B9jB,GACzB,IAAI,IAAE6H,EAAG,KAAEH,EAAI,MAAEvD,EAAK,OAAEC,GAAWpE,EAAGuH,wBAClCwc,EAaJ,SAAwB/jB,GAEtB,OADgBiQ,OAAO2L,iBAAiB5b,GAAIkW,UAEzC7B,MAAM,WACNM,MAAM,GAAI,GACVC,KAAI,SAAU8B,GACb,OAAO+M,WAAW/M,EACpB,GACJ,CArBmBsN,CAAehkB,GAClC,GAA2B,GAAvB+jB,EAAava,OAAa,CAC5B,IAAI2I,EAAI4R,EACR,IAAIE,EAAM9R,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GACjC,MAAO,CACLhO,MAAOA,EAAQgO,EAAE,IAAM,EAAI,EAAIA,EAAE,GACjC/N,OAAQA,EAAS+N,EAAE,IAAM,EAAI,EAAIA,EAAE,GACnCzK,MAAOA,EAAOyK,EAAE,GAAKtK,EAAMsK,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAAM8R,EAC/Dpc,MAAOH,EAAOyK,EAAE,GAAKtK,EAAMsK,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAAM8R,E,CAGjE,MAAO,CAAEpc,MAAKH,OAAMvD,QAAOC,SAW/B,CAUa8f,CAAkBviB,GAG3B,MAAO,CAAEkG,IAFDic,EAAGjc,IAAM+b,EAAG/b,IAEHH,KADRoc,EAAGpc,KAAOkc,EAAGlc,KAExB,ECHF,SAASyc,IACP,MAAO,iBAAkBlU,QAAUmU,UAAUC,eAAiB,CAChE,CAEA,MAAMC,EAyCJ,mBAAIpM,GACF,OAAOxa,KAAK4B,KAAKkU,EACnB,CAEA,mBAAI0E,CAAgBA,GAClBxa,KAAK4B,KAAKkU,GAAK0E,EAEfxa,KAAK6mB,IAAIrM,gBAAkBA,EAC3Bxa,KAAK8mB,UAAUtM,gBAAkBA,EACjCxa,KAAK+mB,WAAWvM,gBAAkBA,EAClCxa,KAAKgnB,WAAWxM,gBAAkBA,EAEX,cAAnBA,GACF5V,SAAS2C,gBAAgBpC,UAAUC,IAAI,eACvCR,SAAS2C,gBAAgBpC,UAAU4G,OAAO,eAE1CnH,SAAS2C,gBAAgBpC,UAAUC,IAAI,aACvCR,SAAS2C,gBAAgBpC,UAAU4G,OAAO,gBAG5C/L,KAAKinB,UACLjnB,KAAKknB,cACLlnB,KAAKqQ,QAAQvL,SAASjF,IACpBA,EAAOuE,yBAAyB,GAEpC,CACA,mBAAIuW,GACF,OAAO3a,KAAKsB,SAASqZ,eACvB,CACA,mBAAIA,CAAgBgB,GAClB3b,KAAKsB,SAASqZ,gBAAkB,GAAM,GAAcgB,CACtD,CACA,SAAIA,GACF,OAAO3b,KAAKsB,SAASqa,KACvB,CACA,SAAIA,CAAMA,GACR3b,KAAKsB,SAASqa,MAAQA,CACxB,CAEA,kBAAIwL,GACF,OAAOnnB,KAAK4B,KAAKwS,CACnB,CACA,kBAAI+S,CAAeA,GACjBnnB,KAAK4B,KAAKwS,EAAI+S,EACdnnB,KAAK4B,KAAK6S,EAAI0S,EACd5U,OAAOmC,SAAS,EAAG1U,KAAK4B,KAAKwS,GAC7B,IAAK,IAAIsE,EAAI,EAAGA,EAAI1Y,KAAKqQ,QAAQvE,OAAQ4M,IACvC1Y,KAAKqQ,QAAQqI,GAAG3U,SAAS/D,KAAK4B,KAGlC,CACA,mBAAIyY,CAAgB4L,GAClB,IAAImB,EAAiC,MAAhBpnB,KAAK4B,KAAKma,GAC3BqL,IACFpnB,KAAK4B,KAAKma,GAAG9P,oBAAoB,SAAUjM,KAAKqnB,cAChDrnB,KAAK4B,KAAKma,GAAG9P,oBAAoB,SAAUjM,KAAKsnB,eAElDtnB,KAAK6mB,IAAIxM,gBAAkB4L,EAC3BjmB,KAAK8mB,UAAUzM,gBAAkB4L,EACjCjmB,KAAK+mB,WAAW1M,gBAAkB4L,EAClCjmB,KAAKgnB,WAAW3M,gBAAkB4L,EAClCjmB,KAAK4B,KAAKma,GAAKkK,EACXmB,IACFpnB,KAAK4B,KAAKma,GAAGzW,iBAAiB,SAAUtF,KAAKqnB,cAC7CrnB,KAAK4B,KAAKma,GAAGzW,iBAAiB,SAAUtF,KAAKsnB,eAE/CtnB,KAAKinB,UACLjnB,KAAKknB,aACP,CAIA,oBAAIK,CAAiBC,GACnBxnB,KAAKynB,MAAQD,EACbxnB,KAAK0nB,kBACP,CAEA,qBAAIC,CAAkBC,GACpB5nB,KAAK6nB,MAAQD,EACb5nB,KAAK0nB,kBACP,CACQ,gBAAAA,GAMN,OALI1nB,KAAKuS,OAAO0G,WAAa,MAAQwN,IACnCzmB,KAAKkV,WAAalV,KAAKynB,MAEvBznB,KAAKkV,WAAalV,KAAK6nB,MAEjB7nB,KAAKkV,YACX,IAAK,UACHlV,KAAK4B,KAAKiU,GAAK,UACf7V,KAAK6mB,IAAM7mB,KAAKgnB,WAChBhnB,KAAK2C,uBACLiC,SAAS2C,gBAAgBhB,MAAMuhB,SAAW,SAC1C,MACF,IAAK,UACH9nB,KAAK4B,KAAKiU,GAAK,UACf7V,KAAK6mB,IAAM7mB,KAAK+mB,WAChB/mB,KAAK2C,uBACLiC,SAAS2C,gBAAgBhB,MAAMuhB,SAAW,OAC1C,MAOF,QACE9nB,KAAK4B,KAAKiU,GAAK,SACf7V,KAAK6mB,IAAM7mB,KAAK8mB,UAChB9mB,KAAK2C,uBACLiC,SAAS2C,gBAAgBhB,MAAMuhB,SAAW,OAGhD,CAEA,cA1JQ,KAAAzX,QAAgC,IAAI3O,MACpC,KAAAqmB,UAAkC,IAAIrmB,MACtC,KAAAQ,OAAsB,IAAIyiB,EAC1B,KAAAxiB,KAAkB,IAAIye,EAOtB,KAAAoH,GAAa,EACb,KAAAvC,GAAa,EAKb,KAAAwC,eAAsC,IAAIla,EAC1C,KAAAma,MAAwB,IAAIva,EAC5B,KAAAwa,WAA8B,IAAIlE,EAClC,KAAAmE,oBAAgD,IAAIjE,EACpD,KAAAkE,UAA4B,IAAIrC,EAU9B,KAAAvkB,QAAqC,IAAID,IAEzC,KAAA8mB,aAA2B,IAAI5mB,MAEjC,KAAA6mB,SAAmB,EAEnB,KAAAC,QAAU,IAAIjD,EACd,KAAAkD,WAAqB,EAwErB,KAAAvT,WAA+C,SAC/C,KAAAuS,MAA+B,UAK/B,KAAAI,MAA0C,SAyM1C,KAAAa,SAAqL,CAC3L,OAAU,SACV,SAAY,YACZ,KAAQ,OACR,OAAU,UACV,OAAU,SACV,cAAe,mBACf,OAAU,SACV,MAAS,QACT,kBAAmB,mBACnB,kBAAmB,mBACnB,gBAAiB,kBAeX,KAAAC,gBAAuB,CAC7BC,kBAAmB,KACnBC,gBAAiB,KAEjBC,cAAe,MACfC,aAAc,SACdC,cAAe,SACfC,aAAc,MAEdC,gBAAiB,KACjBC,mBAAoB,KAEpBC,UAAW,aAEXC,eAAgB,GAChBC,aAAc,IACdC,WAAY,GACZC,mBAAoB,EACpBC,eAAgB,IA7MhBzpB,KAAKN,KAAOkF,SAASyR,KACrBrW,KAAKuS,OAASA,OAEdvS,KAAKsB,SAAW,IAAIwa,EACpB9b,KAAK4B,KAAO,IAAIwiB,EAEhBpkB,KAAK8mB,UAAY,IAAI7L,EAAmBrW,SAAU5E,KAAKsB,SAAUtB,KAAK4B,MACtE5B,KAAK+mB,WAAa,IAAItM,EAAoB7V,SAAU5E,KAAKsB,SAAUtB,KAAK4B,MACxE5B,KAAKgnB,WAAa,IAAIlM,EAAoBlW,SAAU5E,KAAKsB,SAAUtB,KAAK4B,MAExE5B,KAAK8mB,UAAUtkB,aAAexC,KAAKwC,aAAa6S,KAAKrV,MACrDA,KAAK+mB,WAAWvkB,aAAexC,KAAKwC,aAAa6S,KAAKrV,MACtDA,KAAKgnB,WAAWxkB,aAAexC,KAAKwC,aAAa6S,KAAKrV,MAEtDA,KAAK8mB,UAAUrkB,kBAAoBzC,KAAKyC,kBAAkB4S,KAAKrV,MAC/DA,KAAK+mB,WAAWtkB,kBAAoBzC,KAAKyC,kBAAkB4S,KAAKrV,MAChEA,KAAKgnB,WAAWvkB,kBAAoBzC,KAAKyC,kBAAkB4S,KAAKrV,MAEhEA,KAAK8mB,UAAUvkB,cAAgBvC,KAAKuC,cAAc8S,KAAKrV,MACvDA,KAAK+mB,WAAWxkB,cAAgBvC,KAAKuC,cAAc8S,KAAKrV,MACxDA,KAAKgnB,WAAWzkB,cAAgBvC,KAAKuC,cAAc8S,KAAKrV,MAExDA,KAAK6mB,IAAM7mB,KAAK8mB,UAChB9mB,KAAKqa,gBAAkB9H,OACvBvS,KAAK4B,KAAKma,GAAK/b,KAAKuS,OAEpBvS,KAAK4B,KAAKkU,GAAK,WACflR,SAAS2C,gBAAgBpC,UAAUC,IAAI,aAEvCpF,KAAK0pB,YAAc1pB,KAAK2pB,aAAatU,KAAKrV,MAC1CA,KAAKqnB,aAAernB,KAAKyZ,cAAcpE,KAAKrV,MAC5CA,KAAKsnB,aAAetnB,KAAK6D,SAASwR,KAAKrV,MACvCA,KAAK4pB,gBAAkB5pB,KAAK6pB,iBAAiBxU,KAAKrV,MACjC,IAAI8pB,gBAAe,KAClC9pB,KAAK6D,UAAU,IAGRkmB,QAAQnlB,SAAS2C,iBAC1BvH,KAAKmC,KAAKqf,YAAW,KACnBxhB,KAAK4Y,eAAe,IAEtB5Y,KAAKinB,UAELjnB,KAAK6kB,GAAG,eAAe,KACrB7kB,KAAKinB,SAAS,GAElB,CAEO,kBAAO+C,GAIZ,OAHKpD,EAAWlO,IACdkO,EAAWlO,EAAI,IAAIkO,GAEdA,EAAWlO,CACpB,CAEO,KAAAuR,CAAS/oB,GAEd,OADoBlB,KAAKqQ,QAAQ6Z,MAAMrqB,GAAgBA,aAAkBqB,GAE3E,CAEO,GAAAipB,CAAIC,EAAkC9oB,EAAgB,MAC3D,MAAMzB,EAAS,IAAIuqB,EACjB,CACExoB,KAAM5B,KAAK4B,KACXC,KAAM7B,KAAKkoB,MACXpmB,UAAW9B,KAAKmoB,WAChBpmB,mBAAoB/B,KAAKooB,oBACzBpmB,SAAUhC,KAAKqoB,UACfpmB,cAAejC,KAAKioB,eACpB/lB,OAAQlC,KAAKkC,OACbC,KAAMnC,KAAKmC,MAEbb,GAGiB,GAAfzB,EAAOqB,MACTlB,KAAKqQ,QAAQhN,KAAKxD,GAED,GAAfA,EAAOqB,MACTlB,KAAK+nB,UAAU1kB,KAAKxD,EAExB,CACO,KAAA4P,CAAMyR,GACXlhB,KAAK4B,KAAKma,GAAGzW,iBAAiB,SAAUtF,KAAKqnB,cAC7CrnB,KAAK4B,KAAKma,GAAGzW,iBAAiB,SAAUtF,KAAKsnB,cAE7CtnB,KAAKN,KAAK4F,iBAAiB,QAAStF,KAAK0pB,YAAa,CAAEW,SAAS,IACjErqB,KAAKN,KAAK4F,iBAAiB,YAAatF,KAAK4pB,iBAS7C5pB,KAAKmC,KAAKsN,MAAMyR,GAChBtc,SAAS2C,gBAAgBpC,UAAUC,IAAI,WAEvC,IAAK,IAAIsT,EAAI,EAAGA,EAAI1Y,KAAKqQ,QAAQvE,OAAQ4M,IACvC1Y,KAAKqQ,QAAQqI,GAAG/U,UAElB,IAAK,IAAI+U,EAAI,EAAGA,EAAI1Y,KAAK+nB,UAAUjc,OAAQ4M,IACzC1Y,KAAK+nB,UAAUrP,GAAG/U,UAGpB3D,KAAKknB,cACLlnB,KAAKsqB,uBACLtqB,KAAKyoB,WAAY,EACjBzoB,KAAKkC,OAAO2E,KAAK,QAAS,KAC5B,CAEQ,oBAAAlE,GACN,IAAK,IAAI+V,EAAI,EAAGA,EAAI1Y,KAAKqQ,QAAQvE,OAAQ4M,IACvC1Y,KAAKqQ,QAAQqI,GAAG/V,uBAElB,IAAK,IAAI+V,EAAI,EAAGA,EAAI1Y,KAAK+nB,UAAUjc,OAAQ4M,IACzC1Y,KAAK+nB,UAAUrP,GAAG/V,sBAEtB,CAEQ,WAAAukB,GACNtiB,SAASC,iBAAiB,YAAYC,SAASC,IAC7C/E,KAAKiD,UAAU8B,EAAe,IAEhCH,SAASC,iBAAiB,sBAAsBC,SAASC,IACvD,IAAIwlB,EAAkBvqB,KAAKmoB,WAAWxgB,QAAQ5C,EAAS,oBACvD,GAAuB,MAAnBwlB,GAA2BvqB,KAAKyB,QAAQ0B,IAAIonB,GAAkB,CAChE,IAAIC,EAAsBxqB,KAAKyB,QAAQjB,IAAI+pB,GAChB,MAAvBC,GACFA,EAAoBje,SAASlJ,KAAK0B,E,KAIxC/E,KAAKqQ,QAAQvL,SAASjF,IACpBA,EAAOgE,WACPhE,EAAOkE,SAAS/D,KAAK4B,MACrB/B,EAAO+D,SAAS5D,KAAK4B,KAAK,GAE9B,CAEO,OAAA6oB,GACLzqB,KAAKuS,OAAOtG,oBAAoB,SAAUjM,KAAKqnB,cAC/CrnB,KAAKN,KAAKuM,oBAAoB,QAASjM,KAAKqnB,cAC5CrnB,KAAKuS,OAAOtG,oBAAoB,SAAUjM,KAAKsnB,cAC/CtnB,KAAKN,KAAKuM,oBAAoB,YAAajM,KAAK4pB,iBAChD5pB,KAAKmC,KAAKmf,OACVthB,KAAKqQ,QAAQvL,SAASjF,IACpBA,EAAO6C,YAAY,IAErB1C,KAAK+nB,UAAUjjB,SAASjF,IACtBA,EAAO6C,YAAY,IAGrB1C,KAAKqQ,QAAU,IAAI3O,MACnB1B,KAAK+nB,UAAY,IAAIrmB,MAGrB1B,KAAKkC,OAAS,IAAIyiB,CACpB,CAeO,EAAAE,CAAG1kB,EAAiC2kB,EAAY5hB,EAAa,IAClE,MAAMwnB,EAAY1qB,KAAK0oB,SAASvoB,GAAO+C,EAC3B,UAAR/C,GAAmBH,KAAKyoB,WACxB3D,IAEJ9kB,KAAKkC,OAAO2iB,GAAG6F,EAAW5F,EAC5B,CAEO,GAAAE,CAAI7kB,EAAiC2kB,EAAY5hB,EAAa,IACjE,MAAMwnB,EAAY1qB,KAAK0oB,SAASvoB,GAAO+C,EACvClD,KAAKkC,OAAO8iB,IAAI0F,EAAW5F,EAC/B,CAuBO,aAAA6F,CAAcrpB,GACkB,MAAjCA,EAAS,uBACXtB,KAAK2oB,gBAAgBC,kBAAoBtnB,EAAS,sBAEZ,MAApCA,EAAS,0BACXtB,KAAK2oB,gBAAgBE,gBAAkBvnB,EAAS,yBAEZ,MAAlCA,EAAS,wBACXtB,KAAK2oB,gBAAgBC,kBAAoBtnB,EAAS,uBAEb,MAAnCA,EAAS,yBACXtB,KAAK2oB,gBAAgBE,gBAAkBvnB,EAAS,wBAGb,MAAjCA,EAAS,uBACXtB,KAAK2oB,gBAAgBO,gBAAkB5nB,EAAS,sBAEZ,MAAlCA,EAAS,wBACXtB,KAAK2oB,gBAAgBO,gBAAkB5nB,EAAS,uBAEV,MAApCA,EAAS,0BACXtB,KAAK2oB,gBAAgBQ,mBAAqB7nB,EAAS,yBAEd,MAAnCA,EAAS,yBACXtB,KAAK2oB,gBAAgBQ,mBAAqB7nB,EAAS,wBAGlB,MAA/BA,EAAS,qBACXtB,KAAK2oB,gBAAgBG,cAAgBxnB,EAAS,oBAEb,MAA/BA,EAAS,qBACXtB,KAAK2oB,gBAAgBK,cAAgB1nB,EAAS,oBAEd,MAA9BA,EAAS,oBACXtB,KAAK2oB,gBAAgBI,aAAeznB,EAAS,mBAEb,MAA9BA,EAAS,oBACXtB,KAAK2oB,gBAAgBM,aAAe3nB,EAAS,mBAEjB,MAA1BA,EAAS,gBACXtB,KAAK2oB,gBAAgBS,UAAY9nB,EAAS,eAGT,MAA/BA,EAAS,qBACXtB,KAAK2oB,gBAAgBU,eAAiB/nB,EAAS,oBAEhB,MAA7BA,EAAS,mBACXtB,KAAK2oB,gBAAgBW,aAAehoB,EAAS,kBAEhB,MAA3BA,EAAS,iBACXtB,KAAK2oB,gBAAgBY,WAAajoB,EAAS,gBAGL,MAApCA,EAAS,0BACXtB,KAAK2oB,gBAAgBa,mBAAqBloB,EAAS,yBAElB,MAA/BA,EAAS,qBACXtB,KAAK2oB,gBAAgBc,eAAiBnoB,EAAS,mBAEnD,CAEU,WAAAspB,CAAYtoB,EAAiBD,G,4DAClB,QAAnB,EAAAA,EAAO2N,oBAAY,SAAE6a,aACE,QAAvB,EAAAxoB,EAAO4N,wBAAgB,SAAE4a,aACJ,QAArB,EAAAxoB,EAAO6N,sBAAc,SAAE2a,aAEvB,MAAMC,EAAa9qB,KAAK+qB,iBAAiBzoB,GAEzC,IAAI0oB,EAAIhrB,KAAKooB,oBAAoBzgB,QAAQrF,GACrC2oB,EAAKD,EAAEvkB,MAAQzG,KAAK4B,KAAK6iB,KACzByG,EAAKF,EAAEtkB,OAAS1G,KAAK4B,KAAK8iB,KAE1ByG,EAAoD,QAA7B,EAAAL,EAAW,0BAAkB,QAAI9qB,KAAK2oB,gBAAgBG,cAC7EsC,EAAmD,QAA7B,EAAAN,EAAW,0BAAkB,QAAI9qB,KAAK2oB,gBAAgBK,cAC5EqC,EAAiD,QAA5B,EAAAP,EAAW,yBAAiB,QAAI9qB,KAAK2oB,gBAAgBI,aAC1EuC,EAAgD,QAA5B,EAAAR,EAAW,yBAAiB,QAAI9qB,KAAK2oB,gBAAgBM,aAE7E5mB,EAAO8M,WAGF,EAHcnP,KAAKwoB,QAAQhD,YACuC,QAAnE,EAA+B,QAA/B,EAAAsF,EAAW,4BAAoB,QAAIA,EAAW,6BAAqB,QAAI9qB,KAAK2oB,gBAAgBO,gBAC5F5mB,EAAoB,YAAhBtC,KAAK4B,KAAKkU,GAAmBoV,EAAKD,EAAI,IAG9C5oB,EAAO+M,cAGF,EAHiBpP,KAAKwoB,QAAQhD,YACuE,QAAtG,EAAiE,QAAjE,EAA2B,QAA3B,EAAAsF,EAAW,wBAAgB,QAAIA,EAAW,+BAAuB,QAAIA,EAAW,8BAAsB,QAAI9qB,KAAK2oB,gBAAgBQ,mBAC/H7mB,EAAoB,YAAhBtC,KAAK4B,KAAKkU,GAAmBoV,EAAKD,EAAI,IAG9C5oB,EAAOgK,iBAAoDoF,IAAtCqZ,EAAW,uBAChCzoB,EAAOgJ,SAAmCoG,IAA7BqZ,EAAW,cACxBzoB,EAAOsH,0BAAsE8H,IAA/CqZ,EAAW,gCACzCzoB,EAAO+J,+BAAiFqF,IAArDqZ,EAAW,sCAE9C,IAAIS,EAAcT,EAAW,uBACzBS,IACAlpB,EAAOwJ,kBAAoB0f,GAG/BlpB,EAAOa,GAA4B,QAAvB,EAAA4nB,EAAW,oBAAY,QAAI,UAAU9qB,KAAKuoB,WACtDlmB,EAAOlC,IAA8B,QAAxB,EAAA2qB,EAAW,qBAAa,QAAI9qB,KAAK2oB,gBAAgBS,UAC9D/mB,EAAOQ,MAA4B,QAApB,EAAAioB,EAAmB,cAAC,QAAI,IAAInU,MAAM,KAEjDtU,EAAOsK,SAAwC,QAA7B,EAAAme,EAAW,0BAAkB,QAAI9qB,KAAK2oB,gBAAgBU,eACxEhnB,EAAOuK,OAAoC,QAA3B,EAAAke,EAAW,wBAAgB,QAAI9qB,KAAK2oB,gBAAgBW,aACpEjnB,EAAOR,KAAgC,QAAzB,EAAAipB,EAAW,sBAAc,QAAI9qB,KAAK2oB,gBAAgBY,WAChElnB,EAAOuN,OAASmW,WAAsC,QAA3B,EAAA+E,EAAW,wBAAgB,QAAI,OAC1DzoB,EAAOsN,MAAQoW,WAAqC,QAA1B,EAAA+E,EAAW,uBAAe,QAAI,KAExD,IAAIpR,EAAmBqM,WAA6C,QAAlC,EAAA+E,EAAW,+BAAuB,QAAI9qB,KAAK2oB,gBAAgBa,oBAC7FnnB,EAAOwN,sBAA+B,GAAM6J,EAAZ,GAChCrX,EAAOyN,oBAAsB,GAAM,IAAO,EAAI4J,GAC9CrX,EAAOwI,UAA0C,QAA9B,EAAAigB,EAAW,2BAAmB,QAAI,SAErDxoB,EAAGyF,aAAa,YAAa1F,EAAOa,IACpCb,EAAOoK,KAAuB,YAAhBzM,KAAK4B,KAAKkU,GAAmBoV,EAAKD,EAEhD5oB,EAAOwM,OAAS7O,KAAKwoB,QAAQhD,YAC0C,QAAnE,EAA+B,QAA/B,EAAAsF,EAAW,4BAAoB,QAAIA,EAAW,6BAAqB,QAAI9qB,KAAK2oB,gBAAgBC,kBAC5FtmB,EAAItC,KAAK4B,KAAKmS,GAAI,IAEtB1R,EAAOyM,KAAO9O,KAAKwoB,QAAQhD,YACgD,QAAvE,EAAkC,QAAlC,EAAAsF,EAAW,+BAAuB,QAAIA,EAAW,8BAAsB,QAAI9qB,KAAK2oB,gBAAgBE,gBAChGvmB,EAAItC,KAAK4B,KAAKmS,GAAI,IAGtB,IAAIyX,EAAgBnpB,EAAOwM,OACvB4c,EAAcppB,EAAOyM,KAErB4c,GAAwC,QAApB,EAAAZ,EAAmB,cAAC,QAAI,IAAInU,MAAM,KAC1DtU,EAAO6M,OAAS,EACZwc,EAAiB5oB,SAAS,cAC1B0oB,EAAgBC,EAAcppB,EAAOwM,OAASxM,EAAOyM,KAAO,EAC5DzM,EAAO6M,OAAS6W,WAAwC,QAA7B,EAAA+E,EAAW,0BAAkB,QAAI9qB,KAAK2oB,gBAAgBc,gBACjFpnB,EAAOwM,QAAUxM,EAAO6M,OAASlP,KAAK4B,KAAKmS,GAC3C1R,EAAOyM,MAAQzM,EAAO6M,OAASlP,KAAK4B,KAAKmS,IAG7C1R,EAAO8N,YAAyCsB,IAAhCqZ,EAAW,iBAC3BzoB,EAAOgN,OAAS8b,EAChB9oB,EAAOiN,QAAU8b,EACjB/oB,EAAOkN,OAAS8b,EAChBhpB,EAAOmN,QAAU8b,EAEjBjpB,EAAO6I,UAAY+f,EAAK,EACxB5oB,EAAO8I,WAAa+f,EAAK,EAEzB,IAAI9Z,EAAapR,KAAK4B,KAAKmS,GACvBhF,EAA2B,YAAhB/O,KAAK4B,KAAKkU,GACnB9V,KAAKqoB,UAAU1gB,QAAQrF,EAAItC,KAAK4B,KAAKma,IAAI5R,IAAMnK,KAAK4B,KAAK8iB,KACzD1kB,KAAKqoB,UAAU1gB,QAAQrF,EAAItC,KAAK4B,KAAKma,IAAI/R,KAAOhK,KAAK4B,KAAK6iB,KAEhEpiB,EAAOoN,MAAQV,EACf1M,EAAOqN,IAAMX,GAA4B,YAAhB/O,KAAK4B,KAAKkU,GAAmBoV,EAAKD,GAE3D5oB,EAAO8O,mBAAmBC,GAE1B,IAAIua,EAAe3rB,KAAKsoB,aAAapD,QAAO0G,GAAQA,EAAK1oB,IAAMb,EAAOa,KACtElD,KAAKsoB,aAAetoB,KAAKsoB,aAAapD,QAAO0G,GAAQA,EAAK1oB,IAAMb,EAAOa,KACvEyoB,EAAa7mB,SAAQ+mB,GAAexpB,EAAOkK,SAASlJ,KAAKwoB,EAAY9mB,WAErE,IA4BI+mB,EAAkB,CAClBpsB,KAAM,KACNqsB,WAAY,GAAGP,EAA+B,GAAfxrB,KAAK4B,KAAKmS,YAAiB0X,EAA6B,GAAfzrB,KAAK4B,KAAKmS,WAClFiY,UAAW,MAGXC,EAAgB,CAChBvsB,KAAM,KACNqsB,WAAY,GAAGP,EAAgBnpB,EAAO8M,mBAAmBsc,EAAcppB,EAAO+M,qBAC9E4c,UAAW,MAGXE,EAAa,IAAIC,sBAxCGC,IACpBA,EAAQtnB,SAASb,IACTA,EAAEooB,eACGhqB,EAAO+N,SACRpQ,KAAKkC,OAAO2E,KAAK,mBAAmBxE,EAAOa,MAAM,GACjDb,EAAO0O,SAGP1O,EAAO+N,SACPpQ,KAAKkC,OAAO2E,KAAK,mBAAmBxE,EAAOa,MAAM,GACjDb,EAAO2O,Q,GAGjB,GA2BsD8a,GACxDQ,EAAW,IAAIH,sBAzBGC,IAClBA,EAAQtnB,SAASb,IACTA,EAAEooB,gBACFrsB,KAAKkC,OAAO2E,KAAK,UAAUxE,EAAOa,MAAM,GACxCb,EAAO4O,SAEPjR,KAAKkC,OAAO2E,KAAK,UAAUxE,EAAOa,MAAM,GACxCb,EAAO6O,O,GAEb,GAgBkD+a,GAExDC,EAAWnC,QAAQznB,GACnBgqB,EAASvC,QAAQznB,GAEjBD,EAAO4N,iBAAmBic,EAC1B7pB,EAAO6N,eAAiBoc,EAExBtsB,KAAKqQ,QAAQvL,SAASjF,IACdA,EAAO+C,WAAWP,KAClBxC,EAAOuC,WAAWC,EAAQC,GAC1BzC,EAAOkD,QAAQV,G,GAG3B,CAGQ,gBAAA0oB,CAAiBzoB,GACrB,IAAIwoB,EAAkC,CAAC,EAIvC,OAHAppB,MAAMsd,KAAK1c,EAAGwoB,YAAYhmB,SAAQynB,IAC9BzB,EAAWyB,EAAKrS,MAAQqS,EAAKvrB,KAAK,IAE/B8pB,CACX,CAGE,SAAA7nB,CAAUX,GAER,IAEID,EAEFA,EADY,MAHDrC,KAAKmoB,WAAWxgB,QAAQrF,EAAI,iBAI9B,IAAIsM,EAAatM,GAEtBtC,KAAKyB,QAAQ0B,IAAInD,KAAKmoB,WAAWxgB,QAAQrF,EAAI,cACtCtC,KAAKyB,QAAQjB,IAAIR,KAAKmoB,WAAWxgB,QAAQrF,EAAI,cAE7C,IAAIsM,EAAatM,GAG9BA,EAAGyF,aAAa,gBAAiB,IACjC/H,KAAK4qB,YAAYtoB,EAAID,GACrBrC,KAAKyB,QAAQ2B,IAAIf,EAAOa,GAAIb,GAC5BrC,KAAKuoB,UACP,CAEO,YAAAjlB,CAAaJ,GAClB,IAAIspB,EAAgBxsB,KAAKyB,QAAQjB,IAAI0C,GACF,OAA/BspB,aAAa,EAAbA,EAAexc,gBACjBwc,SAAAA,EAAexc,aAAa6a,cAES,OAAnC2B,aAAa,EAAbA,EAAevc,oBACjBuc,SAAAA,EAAevc,iBAAiB4a,cAEG,OAAjC2B,aAAa,EAAbA,EAAetc,kBACjBsc,SAAAA,EAAetc,eAAe2a,cAEhC7qB,KAAKyB,QAAQ8B,OAAOL,GACpBspB,SAAAA,EAAelqB,GAAGmqB,gBAAgB,iBAClCD,SAAAA,EAAexb,QACfwb,OAAgB/a,CAClB,CAEQ,gBAAAoY,CAAiB5lB,GACvBjE,KAAKioB,eAAejkB,YAAYC,GAEhC,IAAK,IAAIyU,EAAI,EAAGA,EAAI1Y,KAAKqQ,QAAQvE,OAAQ4M,IACvC1Y,KAAKqQ,QAAQqI,GAAG1U,YAAYC,GAE9B,IAAK,IAAIyU,EAAI,EAAGA,EAAI1Y,KAAK+nB,UAAUjc,OAAQ4M,IACzC1Y,KAAK+nB,UAAUrP,GAAG1U,YAAYC,EAGlC,CACQ,YAAA0lB,CAAa1lB,GACnBjE,KAAK6mB,IAAI3iB,QAAQD,GACjB,IAAK,IAAIyU,EAAI,EAAGA,EAAI1Y,KAAKqQ,QAAQvE,OAAQ4M,IACvC1Y,KAAKqQ,QAAQqI,GAAGxU,QAAQD,GAE1B,IAAK,IAAIyU,EAAI,EAAGA,EAAI1Y,KAAK+nB,UAAUjc,OAAQ4M,IACzC1Y,KAAK+nB,UAAUrP,GAAGxU,QAAQD,EAE9B,CACQ,aAAA1B,GACN,IAAK,IAAImW,EAAI,EAAGA,EAAI1Y,KAAKqQ,QAAQvE,OAAQ4M,IACvC1Y,KAAKqQ,QAAQqI,GAAGnW,gBAElB,IAAK,IAAImW,EAAI,EAAGA,EAAI1Y,KAAK+nB,UAAUjc,OAAQ4M,IACzC1Y,KAAK+nB,UAAUrP,GAAGnW,eAEtB,CACQ,YAAAC,GACN,IAAK,IAAIkW,EAAI,EAAGA,EAAI1Y,KAAKqQ,QAAQvE,OAAQ4M,IACvC1Y,KAAKqQ,QAAQqI,GAAGlW,eAElB,IAAK,IAAIkW,EAAI,EAAGA,EAAI1Y,KAAK+nB,UAAUjc,OAAQ4M,IACzC1Y,KAAK+nB,UAAUrP,GAAGlW,cAEtB,CACQ,iBAAAC,GACN,IAAK,IAAIiW,EAAI,EAAGA,EAAI1Y,KAAKqQ,QAAQvE,OAAQ4M,IACvC1Y,KAAKqQ,QAAQqI,GAAGjW,oBAElB,IAAK,IAAIiW,EAAI,EAAGA,EAAI1Y,KAAK+nB,UAAUjc,OAAQ4M,IACzC1Y,KAAK+nB,UAAUrP,GAAGjW,mBAEtB,CACQ,aAAAgX,CAAcxV,GACpBjE,KAAK6mB,IAAI9iB,SAASE,GAClB,IAAK,IAAIyU,EAAI,EAAGA,EAAI1Y,KAAKqQ,QAAQvE,OAAQ4M,IACvC1Y,KAAKqQ,QAAQqI,GAAG3U,SAAS/D,KAAK4B,MAEhC,IAAK,IAAI8W,EAAI,EAAGA,EAAI1Y,KAAK+nB,UAAUjc,OAAQ4M,IACzC1Y,KAAK+nB,UAAUrP,GAAG3U,SAAS/D,KAAK4B,MAElC5B,KAAKkC,OAAO2E,KAAK,OAAQ7G,KAAK4B,KAAKoX,GACnChZ,KAAKkC,OAAO2E,KAAK,SAAU7G,KAAK4B,KAAKwS,EACvC,CACQ,aAAAwE,GACN5Y,KAAKioB,eAAerkB,WACpB5D,KAAK6mB,IAAIjjB,WACT,IAAK,IAAI8U,EAAI,EAAGA,EAAI1Y,KAAKqQ,QAAQvE,OAAQ4M,IACvC1Y,KAAKqQ,QAAQqI,GAAG9U,SAAS5D,KAAK4B,MAEhC,IAAK,IAAI8W,EAAI,EAAGA,EAAI1Y,KAAK+nB,UAAUjc,OAAQ4M,IACzC1Y,KAAK+nB,UAAUrP,GAAG9U,SAAS5D,KAAK4B,MAElC5B,KAAKkC,OAAO2E,KAAK,SAAU,KAC7B,CACO,QAAAhD,GACL,IAAI6oB,EAAQ,EACRC,EAAQ,EACZ,IACE,IAAI/iB,EAAO5J,KAAK6mB,IAAIxM,gBAAgBxQ,wBACpC6iB,EAAQ9iB,EAAKnD,MACbkmB,EAAQ/iB,EAAKlD,M,CACb,MAAOyf,GACPuG,EAAQ1sB,KAAK6mB,IAAIxM,gBAAgBpB,WACjC0T,EAAQ3sB,KAAK6mB,IAAIxM,gBAAgB0H,W,CAEf,YAAhB/hB,KAAK4B,KAAKkU,IACZ9V,KAAK4B,KAAK6M,GAAKzO,KAAK4B,KAAKiS,IAAM8Y,EAC/B3sB,KAAK4B,KAAKmS,GAAK4Y,IAEf3sB,KAAK4B,KAAK6M,GAAKzO,KAAK4B,KAAKiT,IAAM6X,EAC/B1sB,KAAK4B,KAAKmS,GAAK2Y,IAEb1sB,KAAKgoB,IAAM0E,GAAS1sB,KAAKuS,OAAO0G,WAAa,QAC/CjZ,KAAKinB,UACLjnB,KAAKqQ,QAAQvL,SAASjF,IACpBA,EAAOgE,UAAU,IAEnB7D,KAAK+nB,UAAUjjB,SAASjF,IACtBA,EAAOgE,UAAU,KAGrB7D,KAAKgoB,GAAK0E,EACV1sB,KAAKylB,GAAKkH,CACZ,CACQ,oBAAArC,GAGN,MAAMsC,EAAwB7nB,IAC5B,GAAwD,MAApD/E,KAAKmoB,WAAWxgB,QAAQ5C,EAAS,gBACnC,OAEF,IAAI8nB,EAAW9nB,EAAQG,aAAa,aAChCqlB,EAAkBvqB,KAAKmoB,WAAWxgB,QAAQ5C,EAAS,oBAEhC,MAAnBwlB,IACFvqB,KAAKsoB,aAAetoB,KAAKsoB,aAAapD,QACnC4H,GAA0BA,EAAiB5pB,IAAMqnB,KAGtC,MAAZsC,GACF7sB,KAAKsD,aAAaupB,E,EAIhBE,EAAsBhoB,IAC1B,GAAwD,MAApD/E,KAAKmoB,WAAWxgB,QAAQ5C,EAAS,gBACnC,OAEF/E,KAAKiD,UAAU8B,GACf,IAAIwlB,EAAkBvqB,KAAKmoB,WAAWxgB,QAAQ5C,EAAS,oBACvD,GAAuB,MAAnBwlB,EACF,GAAIvqB,KAAKyB,QAAQ0B,IAAIonB,GAAkB,CACrC,IAAIC,EAAsBxqB,KAAKyB,QAAQjB,IAAI+pB,GAChB,MAAvBC,GACFA,EAAoBje,SAASlJ,KAAK0B,E,MAGpC/E,KAAKsoB,aAAajlB,KAAK,CACrBH,GAAIqnB,EACJxlB,W,EAOS,IAAIioB,kBAAkBC,IACrCA,EAAUnoB,SAASooB,IACK,cAAlBA,EAAShsB,OACPgsB,EAASC,aAAarhB,OAAS,GACjCohB,EAASC,aAAaroB,SAASsoB,IAC7B,GAAIA,EAAYC,WAAaC,KAAKC,aAAc,CAC9C,MAAMxoB,EAAUqoB,EACZroB,EAAQqO,aAAa,WACvBwZ,EAAqB7nB,GAEvBA,EAAQF,iBAAiB,YAAYC,SAAS0oB,IAC5CZ,EAAqBY,EAAa,G,KAKtCN,EAASO,WAAW3hB,OAAS,GAE/BohB,EAASO,WAAW3oB,SAAS4oB,IAC3B,GAAIA,EAAUL,WAAaC,KAAKC,aAAc,CAC5C,MAAMxoB,EAAU2oB,EACZ3oB,EAAQqO,aAAa,YAAcrO,EAAQqO,aAAa,kBAC1D2Z,EAAmBhoB,GAErBA,EAAQF,iBAAiB,iCAAiCC,SAAS0oB,IACjET,EAAmBS,EAAa,G,MAMpCN,EAASO,WAAW3hB,OAAS,GAAKohB,EAASC,aAAarhB,OAAS,IACnE9L,KAAKqQ,QAAQvL,SAASjF,IACpBA,EAAOiE,WAAW,I,GAIxB,IAOKimB,QAAQnlB,SAASyR,KALX,CACbyU,YAAY,EACZ6C,WAAW,EACXC,SAAS,GAGb,CACQ,OAAA3G,GAUN,IACE,IAAI4G,GAVkBvrB,EAUuBtC,KAAK4B,KAAKma,GATvCxJ,OAAO2L,iBAAiB5b,GAAIkW,UAEzC7B,MAAM,WACNM,MAAM,GAAI,GACVC,KAAI,SAAU8B,GACb,OAAO+M,WAAW/M,EACpB,KAIFhZ,KAAK4B,KAAK6iB,KAAOoJ,EAAmB,GACpC7tB,KAAK4B,KAAK8iB,KAAOmJ,EAAmB,E,CACpC,MAAO1H,GACPnmB,KAAK4B,KAAK6iB,KAAO,EACjBzkB,KAAK4B,KAAK8iB,KAAO,C,CAfnB,IAAwBpiB,EAiBxB,IACE,IAAIsH,EAAO5J,KAAK4B,KAAKma,GAAGlS,wBACxB7J,KAAKgoB,GAAKpe,EAAKnD,MAAQzG,KAAK4B,KAAK6iB,KACjCzkB,KAAKylB,GAAK7b,EAAKlD,OAAS1G,KAAK4B,KAAK8iB,I,CAClC,MAAOyB,GACPnmB,KAAKgoB,GAAKhoB,KAAK4B,KAAKma,GAAG9C,WACvBjZ,KAAKylB,GAAKzlB,KAAK4B,KAAKma,GAAGgG,W,CAErB/hB,KAAKgoB,GAAK,MAAQvB,IACpBzmB,KAAKkV,WAAalV,KAAKynB,MAEvBznB,KAAKkV,WAAalV,KAAK6nB,MAGzB,IAAIiG,EAAIlpB,SAASyR,KACf8O,EAAIvgB,SAAS2C,gBAEfvH,KAAK4B,KAAKiT,IAAM7U,KAAK4B,KAAKma,GAAGgS,YAC7B/tB,KAAK4B,KAAKiS,IAAM7T,KAAK4B,KAAKma,GAAGiS,aACRvc,MAAjBzR,KAAK4B,KAAKiT,MACZ7U,KAAK4B,KAAKiT,IAAMzJ,KAAKsG,IAAIoc,EAAEC,YAAaD,EAAEjP,YAAasG,EAAE8I,YAAa9I,EAAE4I,YAAa5I,EAAEtG,cAEpEpN,MAAjBzR,KAAK4B,KAAKiS,MACZ7T,KAAK4B,KAAKiS,IAAMzI,KAAKsG,IAAIoc,EAAEE,aAAcF,EAAEjI,aAAcV,EAAE+I,aAAc/I,EAAE6I,aAAc7I,EAAEU,eAEzE,YAAhB7lB,KAAK4B,KAAKkU,IACZ9V,KAAK4B,KAAK6M,GAAKzO,KAAK4B,KAAKiS,IAAM7T,KAAKylB,GACpCzlB,KAAK4B,KAAKmS,GAAK/T,KAAKylB,KAEpBzlB,KAAK4B,KAAK6M,GAAKzO,KAAK4B,KAAKiT,IAAM7U,KAAKgoB,GACpChoB,KAAK4B,KAAKmS,GAAK/T,KAAKgoB,IAEtBhoB,KAAK4B,KAAK2iB,MAAuB,GAAhBvkB,KAAK4B,KAAKmS,GAC3B/T,KAAK0nB,kBACP,E","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 this.objects = new Array<StringObject>();\r\n this.objectsMap = new Map<string, StringObject>();\r\n }\r\n \r\n onChangeScrollParams(): void {}\r\n\r\n tryConnect(object: StringObject): boolean {\r\n return object.keys.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 if (!this.objectsMap.has(id)) {\r\n this.objectsMap.set(id, object);\r\n this.objects.push(object);\r\n }\r\n }\r\n\r\n removeObject(id: string) {\r\n const object = this.objectsMap.get(id);\r\n if (object) {\r\n this.objectsMap.delete(id);\r\n const index = this.objects.indexOf(object);\r\n if (index !== -1) {\r\n this.objects.splice(index, 1);\r\n }\r\n }\r\n }\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';\nimport { StringModule } from '../../StringModule';\n\nexport class StringLazy extends StringModule {\n private isStartLoaded: boolean = false\n private imageLoadingCount: number = 0\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'lazy';\n }\n\n onStart(): void {\n const imagesEls = document.querySelectorAll('img[string-lazy]');\n imagesEls.forEach((element: any) => {\n this.load(element)\n });\n this.isStartLoaded = true\n }\n\n onConnect(object: StringObject) {\n this.imageLoadingCount++\n if (this.isStartLoaded) {\n let element: any = object.el \n this.load(element)\n }\n }\n\n private load(element: any) {\n this.getImageSize(element, element.getAttribute('string-lazy'));\n element.classList.add(`lazyLoad`);\n element.src = element.getAttribute('string-lazy') as any;\n element.addEventListener('load', () => {\n element.classList.add(`-loaded`);\n \n });\n }\n\n private getImageSize(element: HTMLElement, url: string) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status === 206 || xhr.status === 200) {\n const buffer = xhr.response;\n const blob = new Blob([buffer]);\n const img = new Image();\n img.onload = () => {\n element.style.aspectRatio = `${img.width} / ${img.height}`;\n resolve({ width: img.width, height: img.height });\n URL.revokeObjectURL(img.src);\n this.imageLoadingCount--\n if (this.imageLoadingCount <= 0) {\n this.events.emit('all-image-loaded', null)\n this.imageLoadingCount = 0\n }\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n img.src = URL.createObjectURL(blob);\n } else {\n reject(new Error('Failed to load image'));\n }\n };\n xhr.onerror = () => {\n reject(new Error('Network error'));\n };\n xhr.setRequestHeader('Range', 'bytes=0-');\n xhr.send();\n });\n }\n}\n","import { StringModule } from \"../../StringModule\";\nimport { StringData } from \"../../Utils/StringData\";\n\n\nexport class StringLoading extends StringModule{\n loadingTimeout: number = 0\n\n constructor(visitor: any, settings: any = null) {\n super(visitor)\n this._type = 2\n\n if (settings != null) {\n if (settings.timeout != null) {\n this.loadingTimeout = settings.timeout\n }\n }\n }\n onStart(): void {\n setTimeout(() => {\n const htmlElement = document.documentElement;\n htmlElement.classList.add('-loaded');\n }, this.loadingTimeout);\n \n }\n}","import { StringObject } from \"../../Objects/StringObject\";\nimport { StringModule } from \"../../StringModule\";\n\nexport class StringVideoAutoplay extends StringModule {\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = \"autoplay\";\n }\n\n onConnect(object: StringObject) {\n const videoElement = object.el as HTMLVideoElement;\n const videoSrc = this.attribute.process(videoElement, \"string-src\", \"\");\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\n if (videoElement.tagName.toLowerCase() === \"video\" && videoSrc && started == false) {\n videoElement.setAttribute(\"muted\", \"muted\");\n videoElement.setAttribute(\"playsinline\", \"\");\n videoElement.setAttribute(\"loop\", \"\");\n videoElement.setAttribute(\"autoplay\", \"\");\n videoElement.src = videoSrc;\n videoElement.muted = true;\n videoElement.addEventListener(\"canplaythrough\", () => {\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\n if (started == false) {\n this.tryPlay(object, videoElement); \n }\n }, { once: true });\n videoElement.load();\n } else {\n console.warn(\n \"StringVideoAutoplay: Element is not a <video> tag or string-src is missing.\",\n object.el\n );\n }\n }\n\n private tryPlay(object: StringObject, element: HTMLVideoElement) {\n element.play().catch((err) => {\n console.warn(\"Autoplay failed:\", err);\n object.started = false;\n }).then(() => {\n object.started = true;\n element.setAttribute(`string-started`, '')\n });\n }\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\n\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.65\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 overCount: number = 0\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\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 \r\n } else {\r\n this.virtualCursor.mouseLerp = remapLerp(0.5)\r\n }\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\r\n requestAnimationFrame(() => {\r\n this.objects.forEach((object) => {\r\n if (object.isMouseOver && !object.cursorTargetDisabled) {\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\r\n const dx = object.mousePixelFloatX - elementX;\r\n const dy = object.mousePixelFloatY - elementY;\r\n const distanceSquared = dx * dx + dy * dy;\r\n if (distanceSquared > 0.0001) {\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 //console.log('cursor')\r\n\r\n if ((this.virtualCursor.lerpX != 0 || this.virtualCursor.lerpY != 0)) {\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.oldX = this.virtualCursor.smoothX;\r\n this.oldY = this.virtualCursor.smoothY;\r\n this.cursor.style.setProperty('--x', this.virtualCursor.smoothX);\r\n this.cursor.style.setProperty('--y', this.virtualCursor.smoothY);\r\n this.cursor.style.setProperty('--x-lerp', this.virtualCursor.lerpX);\r\n this.cursor.style.setProperty('--y-lerp', this.virtualCursor.lerpY);\r\n }\r\n })\r\n \r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n let timeoutId: any = null\r\n let onMouseEnterEventBind = () => {\r\n this.overCount++\r\n element.addEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseOver = true;\r\n if (object.cursorTargetClass!= null && object.cursorTargetClass.length > 0) {\r\n this.cursorContent.classList.add(object.cursorTargetClass)\r\n }\r\n this.cursor.classList.add('-showing');\r\n timeoutId = setTimeout(() => {\r\n this.cursor.classList.remove('-showing');\r\n this.cursor.classList.add('-show');\r\n }, 1200);\r\n };\r\n let onMouseLeaveEventBind = () => {\r\n this.overCount--\r\n if (timeoutId!=null) {\r\n clearTimeout(timeoutId)\r\n }\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseOver = false;\r\n if (object.cursorTargetClass != null && object.cursorTargetClass.length > 0) {\r\n this.cursorContent.classList.remove(object.cursorTargetClass)\r\n }\r\n this.cursor.classList.remove('-showing');\r\n this.cursor.classList.remove('-show');\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('mouseleave', onMouseLeaveEventBind);\r\n };\r\n }\r\n\r\n private setMouseCoordinates(object: StringObject, x: number, y: number) {\r\n if (!object.cursorTargetStyleDisabled) {\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 \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';\nimport { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringMagnetic extends StringModule {\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'magnetic';\n }\n\n onConnect(object: StringObject) {\n const element = object.el as HTMLElement;\n\n if (this.settings != null) {\n if (this.settings['string-strength'] != null) {\n object.strength = this.settings['string-strength'];\n }\n if (this.settings['string-radius'] != null) {\n object.radius = this.settings['string-radius'];\n }\n if (this.settings['string-lerp'] != null) {\n object.lerp = this.settings['string-lerp'];\n }\n }\n }\n\n onMouseMove(e: MouseEvent): void {\n this.objects.forEach((object) => {\n const element = object.el as HTMLElement;\n const rect = element.getBoundingClientRect();\n const elementCenterX = rect.left + object.halfWidth;\n const elementCenterY = rect.top + object.halfHeight;\n const distX = e.clientX - elementCenterX;\n const distY = e.clientY - elementCenterY;\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\n\n if (distance < object.radius) {\n object.magneticTargetX = distX * object.strength * ((object.radius - distance) / object.radius);\n object.magneticTargetY = distY * object.strength * ((object.radius - distance) / object.radius);\n object.isMagneting = true;\n } else {\n object.magneticTargetX = 0;\n object.magneticTargetY = 0;\n }\n });\n }\n\n onUpdate(data: StringData): void {\n this.objects.forEach((object) => {\n if (object.isMagneting) {\n let lerpX = this.lerp.process(object.magneticX, object.magneticTargetX, object.lerp);\n let lerpY = this.lerp.process(object.magneticY, object.magneticTargetY, object.lerp);\n if (lerpX > -0.01 && lerpX < 0.01) {\n lerpX = 0;\n object.magneticX = object.magneticTargetX;\n }\n if (lerpY > -0.01 && lerpY < 0.01) {\n lerpY = 0;\n object.magneticY = object.magneticTargetY;\n }\n object.magneticX += lerpX;\n object.magneticY += lerpY;\n object.el.style.setProperty('--magnetic-x', object.magneticX.toString());\n object.el.style.setProperty('--magnetic-y', object.magneticY.toString());\n if (object.magneticTargetX == object.magneticX || object.magneticTargetY == object.magneticY) {\n object.isMagneting = false;\n }\n }\n });\n }\n}\n","export class StringLerpCalc {\r\n process(current: number, target: number, amt: number) {\r\n const difference = target - current;\r\n return difference * amt;\r\n }\r\n}","import { StringLerpCalc } from \"../Utils/StringLerpCalc\";\r\n\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\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\r\n onMouseMove(e: MouseEvent): void {\r\n this.targetX = e.clientX;\r\n this.targetY = e.clientY;\r\n \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 const distance = Math.sqrt(Math.pow(this._lerpX, 2) + Math.pow(this._lerpY, 2));\r\n if (distance < 0.1) {\r\n this._lerpX = 0\r\n this._lerpY = 0\r\n this._x = this.targetX;\r\n this._y = this.targetY;\r\n } else {\r\n this._x = this._x + this._lerpX;\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 keys: 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 public cursorTargetDisabled: boolean = false;\r\n public cursorTargetStyleDisabled: 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';\n\nexport class StringScrollbarHorizontal {\n private scrollbar: any;\n private thumb: any;\n private isDragging = false;\n private startY: number = 0;\n private startScrollPosition: number = 0;\n data: StringData;\n\n constructor(data: StringData, scrollbar: any, thumb: any) {\n this.data = data;\n this.scrollbar = scrollbar;\n this.thumb = thumb;\n }\n\n onResize(): void {\n const contentSize = this.data.psH;\n const visibleSize = this.data.wS;\n\n const thumbSize = (visibleSize / contentSize) * visibleSize;\n this.thumb.style.setProperty('--size', thumbSize + 'px');\n\n if (contentSize <= visibleSize) {\n this.scrollbar.classList.add('-hide');\n } else {\n this.scrollbar.classList.remove('-hide');\n }\n }\n\n updateThumb() {\n const contentHeight = this.data.psH;\n const visibleHeight = this.data.wS;\n this.thumb.style.setProperty('--position', `${(this.data.c / contentHeight) * visibleHeight + 'px'}`);\n }\n\n mouseDownEvent(e: MouseEvent) {\n this.startY = e.clientY;\n this.startScrollPosition = this.data.c;\n }\n\n mouseMoveEvent(e: MouseEvent) {\n const deltaY = e.clientY - this.startY;\n const newScrollPosition = this.startScrollPosition + (deltaY / this.data.wS) * this.data.psH;\n this.data.c = newScrollPosition;\n this.data.t = newScrollPosition;\n window.scrollTo(0, newScrollPosition);\n this.updateThumb();\n }\n}\n","import { StringData } from '../../../Utils/StringData';\n\nexport class StringScrollbarVertical {\n private scrollbar: any;\n private thumb: any;\n private isDragging = false;\n private startCoordinate: number = 0;\n private startScrollPosition: number = 0;\n data: StringData;\n\n constructor(data: StringData, scrollbar: any, thumb: any) {\n this.data = data;\n this.scrollbar = scrollbar;\n this.thumb = thumb;\n }\n\n onResize(): void {\n const contentSize = this.data.psW;\n const visibleSize = this.data.wS;\n const thumbSize = (visibleSize / contentSize) * visibleSize;\n this.thumb.style.setProperty('--size', thumbSize + 'px');\n\n if (contentSize <= visibleSize) {\n this.scrollbar.classList.add('-hide');\n } else {\n this.scrollbar.classList.remove('-hide');\n }\n }\n\n updateThumb() {\n const contentWidth = this.data.psW;\n const visibleWidth = this.data.wS;\n this.thumb.style.setProperty('--position', `${(this.data.c / contentWidth) * visibleWidth + 'px'}`);\n }\n\n mouseDownEvent(e: MouseEvent) {\n this.startCoordinate = e.clientX;\n this.startScrollPosition = this.data.c;\n }\n\n mouseMoveEvent(e: MouseEvent) {\n const deltaX = e.clientX - this.startCoordinate;\n const newScrollPosition = this.startScrollPosition + (deltaX / this.data.wS) * this.data.psW;\n this.data.c = newScrollPosition;\n this.data.t = newScrollPosition;\n window.scrollTo(0, newScrollPosition);\n this.updateThumb();\n }\n}\n","import { StringModule } from '../../../StringModule';\nimport { StringData } from '../../../Utils/StringData';\nimport { StringScrollbarHorizontal } from './StringScrollbarHorizontal';\nimport { StringScrollbarVertical } from './StringScrollbarVertical';\n\nexport class StringScrollbar extends StringModule {\n private scrollbar: any;\n private thumb: any;\n private scrollTimeout: any;\n\n private isDragging = false;\n private scrollMode: 'smooth' | 'disable' | 'default' = 'smooth';\n\n private mouseUpEventBind: any;\n private mouseDownEventBind: any;\n private mouseMoveEventBind: any;\n\n private scrollbarState: any;\n private scrollbarStateHorizontal: any;\n private scrollbarStateVertical: any;\n\n constructor(visitor: any) {\n super(visitor);\n\n this.mouseUpEventBind = this.mouseUpEvent.bind(this);\n this.mouseDownEventBind = this.mouseDownEvent.bind(this);\n this.mouseMoveEventBind = this.mouseMoveEvent.bind(this);\n }\n destructor(): void {\n document.removeEventListener('mouseup', this.mouseUpEventBind);\n this.thumb.removeEventListener('mousedown', this.mouseDownEventBind);\n document.removeEventListener('mousemove', this.mouseMoveEventBind);\n }\n\n onStart(): void {\n this.createScrollbar();\n this.updateThumb();\n this.addCustomStyles();\n document.addEventListener('mouseup', this.mouseUpEventBind);\n this.thumb.addEventListener('mousedown', this.mouseDownEventBind);\n document.addEventListener('mousemove', this.mouseMoveEventBind);\n document.documentElement.classList.add(`-no-scrollbar`);\n }\n\n onScroll(data: StringData): void {\n this.updateThumb();\n this.showScrollbar();\n this.hideScrollbar();\n }\n\n onResize(): void {\n this.scrollbarState.onResize();\n }\n\n onChangeScrollParams(): void {\n if (this.data.sM == 'disable' && this.scrollMode != 'disable') {\n this.scrollbar.classList.add('-hide');\n }\n if ((this.data.sM == 'smooth' && this.scrollMode == 'disable') || (this.data.sM == 'default' && this.scrollMode == 'disable')) {\n this.scrollbar.classList.remove('-hide');\n }\n this.scrollMode = this.data.sM;\n }\n\n onChangeScrollDirection() {\n if (this.data.sD == 'horizontal') {\n this.scrollbarState = this.scrollbarStateVertical;\n } else {\n this.scrollbarState = this.scrollbarStateHorizontal;\n }\n this.scrollbarState.onResize();\n }\n\n private addCustomStyles() {\n const style = document.createElement('style');\n style.textContent = `\n ::-webkit-scrollbar {\n display: none;\n width: 0;\n height: 0;\n -webkit-appearance: none;\n }\n body {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n .-without-scrollbar::-webkit-scrollbar {\n display: none;\n }\n .-without-scrollbar {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n `;\n document.head.appendChild(style);\n }\n\n private createScrollbar() {\n this.scrollbar = document.createElement('div');\n this.scrollbar.classList.add('scrollbar');\n this.thumb = document.createElement('div');\n this.thumb.classList.add('thumb');\n this.scrollbar.appendChild(this.thumb);\n document.body.appendChild(this.scrollbar);\n\n this.scrollbarStateHorizontal = new StringScrollbarHorizontal(this.data, this.scrollbar, this.thumb);\n this.scrollbarStateVertical = new StringScrollbarVertical(this.data, this.scrollbar, this.thumb);\n this.scrollbarState = this.scrollbarStateHorizontal;\n }\n\n private updateThumb() {\n this.scrollbarState.updateThumb();\n }\n\n private mouseDownEvent(e: MouseEvent) {\n this.isDragging = true;\n this.scrollbarState.mouseDownEvent(e);\n document.body.style.userSelect = 'none';\n this.scrollbar.classList.add('-touch');\n }\n\n private mouseMoveEvent(e: MouseEvent) {\n if (!this.isDragging) return;\n\n this.scrollbarState.mouseMoveEvent(e);\n }\n\n private mouseUpEvent() {\n this.isDragging = false;\n document.body.style.userSelect = '';\n this.hideScrollbar();\n this.scrollbar.classList.remove('-touch');\n }\n\n private showScrollbar() {\n this.scrollbar.classList.add('-scroll');\n }\n\n private hideScrollbar() {\n if (this.scrollTimeout) {\n clearTimeout(this.scrollTimeout);\n }\n this.scrollTimeout = setTimeout(() => {\n this.scrollbar.classList.remove('-scroll');\n }, 1000);\n }\n}\n","import { StringObject } from '../../Objects/StringObject';\nimport { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringAnchor extends StringModule {\n oldLerp: number = 0\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'anchor';\n }\n initObject(object: StringObject, el: any): void {\n object.anchor = this.attribute.process(el, `string-anchor`, \"center center\");\n }\n onConnect(object: StringObject) {\n if (object.anchor == null || object.anchor == \"\") {\n object.anchor = \"center center\"\n }\n const p = object.anchor.split(' ');\n const x = this.parseOrig(p[0]);\n const y = this.parseOrig(p[1] || p[0]);\n object.el.style.transformOrigin = `${x} ${y}`;\n }\n\n private parseOrig(part: string) {\n part = part.trim();\n if (part.startsWith('random')) {\n const o = part.slice(7, -1).split(',').map(s => s.trim());\n const c = Math.floor(Math.random() * o.length);\n return o[c];\n } else {\n return part;\n }\n }\n}\n\n","import { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringGlide extends StringModule {\n private previousLerp: number = 0;\n private displacement: number = 0;\n private acceleration: number = 0;\n private velocityMultiplier: number = 0.00125;\n private isInitialScroll: boolean = true;\n\n private baseVelocityMultiplier: number = 0.00125;\n private reducedVelocityMultiplier: number = this.baseVelocityMultiplier / 20;\n private negativeVelocityMultiplier: number = -0.0001;\n\n private readonly ACCELERATION_STEP: number = 0.05;\n private readonly MIN_DISPLACEMENT: number = 0.01;\n private readonly MAX_DISPLACEMENT: number = 1;\n private readonly MIN_VELOCITY: number = -1;\n private readonly MAX_VELOCITY: number = 1;\n\n private maxDisplacementValue: number = 0;\n\n\n private setupItem = (object: any) => {\n const transformCompute = `translate3d(0, ${-this.data.dV * this.maxDisplacementValue * object.glide}px, 0)`;\n object.el.style.transform = transformCompute;\n }\n\n private onUpdateDesktopEvent = ()=>{\n for (let i = 0; i < this.objects.length; i++) {\n let object = this.objects[i]\n this.setupItem(object)\n }\n }\n private onUpdateMobileEvent = ()=>{}\n private onUpdateEvent = this.onUpdateDesktopEvent\n\n constructor(visitor: any, settings: any = null) {\n super(visitor);\n this.htmlKey = 'glide';\n\n if (settings) {\n const { baseVelocityMultiplier, reducedVelocityMultiplier, negativeVelocityMultiplier } = settings;\n this.baseVelocityMultiplier = baseVelocityMultiplier ?? this.baseVelocityMultiplier;\n this.reducedVelocityMultiplier = reducedVelocityMultiplier ?? this.reducedVelocityMultiplier;\n this.negativeVelocityMultiplier = negativeVelocityMultiplier ?? this.negativeVelocityMultiplier;\n }\n }\n\n private calcExpanderFactor(isDirectionUp: boolean): void {\n const isConditionMet = isDirectionUp\n ? this.data.v < this.previousLerp\n : this.data.v > this.previousLerp;\n\n this.velocityMultiplier = isConditionMet\n ? (this.isInitialScroll ? this.baseVelocityMultiplier : this.reducedVelocityMultiplier)\n : this.negativeVelocityMultiplier;\n\n if (!isConditionMet) {\n this.isInitialScroll = false;\n }\n }\n onStart(): void {\n this.maxDisplacementValue = this.data.wS * 0.1\n }\n\n onResize(): void {\n if (window.innerWidth > 1080) {\n this.maxDisplacementValue = this.data.wS * 0.1\n this.onUpdateEvent = this.onUpdateDesktopEvent\n } else {\n this.onUpdateEvent = this.onUpdateMobileEvent \n this.resetState();\n this.objects.forEach((object) => {\n this.setupItem(object);\n })\n }\n }\n\n private resetState(): void {\n this.displacement = 0;\n this.acceleration = 0;\n this.isInitialScroll = true;\n this.velocityMultiplier = this.baseVelocityMultiplier;\n }\n\n onScrollStart(): void {\n this.resetState();\n }\n\n onScrollStop(): void {\n this.resetState();\n this.previousLerp = 0;\n document.documentElement.style.setProperty('--glide', '0');\n for (let i = 0; i < this.objects.length; i++) {\n let object = this.objects[i]\n const transformCompute = `translate3d(0, 0px, 0)`;\n object.el.style.transform = transformCompute;\n }\n }\n\n onUpdate(data: StringData): void {\n this.calcExpanderFactor(this.data.sDB === false);\n this.acceleration = Math.min(this.MAX_DISPLACEMENT, this.acceleration + this.ACCELERATION_STEP);\n this.displacement = Math.max(this.MIN_DISPLACEMENT, Math.min(this.MAX_DISPLACEMENT, this.displacement + this.velocityMultiplier));\n this.data.dV = Math.min(this.MAX_VELOCITY, Math.max(this.MIN_VELOCITY, this.data.v * this.displacement * this.acceleration));\n document.documentElement.style.setProperty('--glide', this.data.dV.toString());\n this.previousLerp = this.data.v;\n this.onUpdateEvent()\n }\n}","import { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringLerp extends StringModule {\n oldLerp: number = 0\n constructor(visitor: any) {\n super(visitor);\n this._type = 2;\n }\n onScrollStop(): void {\n document.documentElement.style.setProperty('--lerp', \"0\");\n }\n onScroll(data: StringData): void {\n document.documentElement.style.setProperty('--lerp', this.data.v.toString());\n this.oldLerp = data.v\n }\n}\n","import { StringObject } from '../../Objects/StringObject';\nimport { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringParallax extends StringModule {\n private setupParallax = (object: StringObject, progress: number) => {\n let transformCompute = `translate3d(0, ${\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\n }px, 0)`;\n object.el.style.transform = transformCompute;\n object.connects.forEach((element) => {\n element.style.transform = transformCompute;\n });\n };\n\n private onScrollDesktopEvent = () => {\n this.objects.forEach((object) => {\n let progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\n object.el.style.setProperty(object.key, progress.toString());\n this.setupParallax(object, progress);\n });\n }\n private onScrollMobileEvent = () => {}\n private onScrollEvent = this.onScrollDesktopEvent\n\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'parallax';\n }\n\n onConnect(object: StringObject): void {\n if (this.settings != null) {\n if (this.settings['string-parallax-bias'] != null) {\n let parallaxPosition = this.attribute.process(object.el, 'string-parallax-bias', this.settings['string-parallax-bias']);\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\n }\n if (this.settings['string-parallax'] != null) {\n object.factor = this.settings['string-parallax'];\n }\n }\n \n }\n\n onScroll(data: StringData): void {\n this.onScrollEvent()\n }\n onChangeScrollDirection(): void {\n if (this.data.sD == 'vertical') {\n this.setupParallax = (object: StringObject, progress: number) => {\n let transformCompute = `translate3d(0, ${\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\n }px, 0)`;\n object.el.style.transform = transformCompute;\n object.connects.forEach((element) => {\n element.style.transform = transformCompute;\n });\n };\n } else {\n this.setupParallax = (object: StringObject, progress: number) => {\n let transformCompute = `translate3d(${\n object.factor * this.data.wS * object.parallaxPositionStart + progress * object.factor * this.data.wS * object.parallaxPositionEnd\n }px, 0, 0)`;\n object.el.style.transform = transformCompute;\n object.connects.forEach((element) => {\n element.style.transform = transformCompute;\n });\n };\n }\n }\n\n onResize(): void {\n if (window.innerWidth > 1080) {\n this.onScrollEvent = this.onScrollDesktopEvent\n } else {\n this.onScrollEvent = this.onScrollMobileEvent \n this.objects.forEach((object) => {\n this.setupParallax(object, .5);\n })\n }\n }\n}\n","import { StringObject } from '../../Objects/StringObject';\nimport { StringModule } from '../../StringModule';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringProgress extends StringModule {\n private oldLerp = 0\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'progress';\n }\n\n onScroll(data: StringData): void {\n this.objects.forEach((object) => {\n this.setUpObject(object);\n });\n }\n\n onConnect(object: StringObject) {\n object.onEnter = () => {\n this.setUpObject(object);\n };\n }\n\n private setUpObject(object: StringObject) {\n const progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos));\n \n if (object.progress !== progress) {\n object.progress = progress;\n this.applyProgress(object);\n }\n }\n\n private applyProgress(object: StringObject) {\n const progressStr = object.progress.toString();\n\n this.events.emit(`progress_${object.id}`, object.progress);\n object.el.style.setProperty(object.key, progressStr);\n\n if (object.connects.length > 0) {\n object.connects.forEach((element) => {\n element.style.setProperty(object.key, progressStr);\n });\n }\n }\n\n}\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 \r\n this._scrollDirection = scrollDirection;\r\n if (this._scrollDirection == 'vertical') {\r\n this.onCalcUpdate = () => {\r\n \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","\nimport { StringData } from \"../../Utils/StringData\";\nimport { StringScroll } from \"./StringScroll\";\nimport { StringTypeSettings } from \"./StringTypeSettings\";\n\nexport class StringScrollDefault extends StringScroll {\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\n super(document, settings, data);\n this.name = 'mobile';\n }\n public onUpdate() {\n if (this.data.d!=0) {\n let delta = this.data.d * this.settings.speedAccelerate\n this.data.d -= delta\n this.data.v = delta \n\n if (Math.abs(this.data.v) < .1) {\n this.data.d = 0\n this.data.v = 0\n this.onScrollStop();\n } \n }\n }\n public onScroll(e: any) {\n this.data.c = this.d.documentElement.scrollTop;\n this.data.t = this.d.documentElement.scrollTop;\n }\n\n public onWheel(e: any) {\n if (e.deltaY != 0) {\n if (this.data.d == 0) {\n this.onScrollStart()\n }\n let plusDelta = e.deltaY\n if (this.data.t == 0) {\n this.data.d += Math.max(0, e.deltaY);\n }\n this.data.d += plusDelta;\n }\n }\n}","\nimport { StringData } from \"../../Utils/StringData\";\nimport { StringScroll } from \"./StringScroll\";\nimport { StringTypeSettings } from \"./StringTypeSettings\";\n\nexport class StringScrollDisable extends StringScroll {\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\n super(document, settings, data);\n this.name = 'disable';\n }\n\n public onUpdate() {}\n\n public onWheel(e: any) {\n e.preventDefault();\n }\n\n public onScroll(e: any) {\n e.preventDefault();\n }\n}","import { StringData } from '../../Utils/StringData';\r\nimport { StringScroll } from './StringScroll';\r\nimport { StringTypeSettings } from './StringTypeSettings';\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 this.isBottomScrollDirection = newDirection;\r\n this.data.sDB = newDirection;\r\n this.onChangeDirection();\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 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 this.onCalcUpdate();\r\n document.documentElement.classList.remove(CLASS_NAMES.SCROLL_BACK, CLASS_NAMES.SCROLL_FORWARD);\r\n }\r\n\r\n public onUpdate(): void {\r\n \r\n if (this.data.d != 0) {\r\n if (this.isScrollbarManipulation) {\r\n this.isScrollbarManipulation = false;\r\n this.data.c = this.data.t;\r\n this.onCalcUpdate();\r\n this.stopScroll();\r\n return;\r\n }\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 \r\n\r\n const absVelocity = Math.abs(this.data.v);\r\n this.data.c += this.data.v;\r\n this.updateScrollDirection(this.data.v > 0);\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 this.onCalcUpdate();\r\n }\r\n }\r\n\r\n\r\n //old\r\n // this.v = ((this.data.t - this.data.c) * 0.1)\r\n // if (this.v > 0.01 || this.v < -0.01) {\r\n // this.data.c = this.data.c +this.v;\r\n // this.isProg = true\r\n // document.documentElement.scrollTop = this.data.c\r\n // } else {\r\n // if(this.v != 0){\r\n // this.v = 0\r\n // this.data.c = this.data.t\r\n // this.isProg = false\r\n // this.d.documentElement.scrollTop = this.data.c\r\n // } \r\n // }\r\n }\r\n\r\n public onWheel(e: WheelEvent) {\r\n e.preventDefault()\r\n let plusDelta = e.deltaY;\r\n if (plusDelta === 0) return;\r\n\r\n if (this.data.d === 0) {\r\n this.onScrollStart();\r\n }\r\n\r\n let scrollDirection = Math.sign(plusDelta);\r\n if ((this.data.t === 0 && scrollDirection < 0) || (this.data.t === this.data.bS && scrollDirection > 0)) return;\r\n\r\n this.data.d += plusDelta;\r\n\r\n\r\n\r\n //old\r\n // if (e.deltaY != 0) {\r\n // e.preventDefault()\r\n // this.data.d = e.deltaY\r\n // this.data.t += this.data.d\r\n // this.data.t = Math.min(Math.max(this.data.t, 0), this.data.bS)\r\n // }\r\n }\r\n\r\n\r\n public onScroll(e: Event): void {\r\n \r\n if (!this.isProg) {\r\n this.isScrollbarManipulation = true;\r\n this.data.d = 1\r\n this.data.t = this.scrollContainer?.scrollTop ?? document.documentElement.scrollTop;\r\n } else {\r\n e.preventDefault()\r\n }\r\n }\r\n}","export class StringTypeSettings{\n private sC: number = 0.1\n private sA: number = 0.25\n\n public get speed() {\n return this.sC\n }\n public get speedAccelerate() {\n return this.sA\n }\n\n public set speedAccelerate(speed: number) {\n this.sA = speed\n }\n public set speed(speed: number) {\n this.sC = speed\n }\n\n \n}","import { StringObject } from '../../Objects/StringObject';\nimport { StringModule } from '../../StringModule';\n\ninterface ISplitOptions {\n line?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\n word?: Array<{\n align: string;\n random?: { min: number; max: number };\n abs?: boolean;\n }>;\n char?: Array<{\n align: string;\n random?: { min: number; max: number };\n abs?: boolean;\n }>;\n charLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\n charWord?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\n wordLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\n}\n\nexport class StringSplit extends StringModule {\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'split';\n }\n\n onStart(): void {}\n onResize(): void {\n document.querySelectorAll(`[string=\"split\"].-splited`).forEach((element) => {\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\n if (element.innerHTML != this.split(splitOptions, element).html) {\n element.innerHTML = this.split(splitOptions, element).html\n }\n });\n }\n\n onConnect(object: StringObject) {\n let element = object.el;\n if (!element.classList.contains('-splited')) {\n element.classList.add('-splited');\n element.setAttribute('string-split-original', element.innerHTML);\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\n \n if (element.innerHTML != this.split(splitOptions, element).html) {\n element.innerHTML = this.split(splitOptions, element).html\n }\n }\n }\n\n private parseSplitOptions(attributeValue: string | null): ISplitOptions {\n const options: ISplitOptions = {\n line: [],\n word: [],\n char: [],\n charLine: [],\n charWord: [],\n wordLine: [],\n };\n\n if (attributeValue) {\n const parts = attributeValue.split('|');\n\n parts.forEach((part) => {\n const match = part.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\n\n if (match) {\n const prefix = match[1] || '';\n const option = match[2];\n const params = match[4] ? match[4].split(',') : [];\n switch (prefix + option) {\n case 'char-line':\n (options.charLine as any[]).push(this.parseParam(params));\n break;\n case 'char-word':\n (options.charWord as any[]).push(this.parseParam(params));\n break;\n case 'word-line':\n (options.wordLine as any[]).push(this.parseParam(params));\n break;\n case 'line':\n (options.line as any[]).push(this.parseParam(params));\n break;\n case 'word':\n (options.word as any[]).push(this.parseParam(params));\n break;\n case 'char':\n (options.char as any[]).push(this.parseParam(params));\n break;\n }\n }\n });\n }\n\n return options;\n }\n\n private parseParam(params: string[]): { align: string; random?: { min: number; max: number }; abs?: boolean } {\n const result: { align: string; random?: { min: number; max: number }; abs?: boolean } = { align: 'start' };\n\n params.forEach((param) => {\n if (param === 'abs') {\n result.abs = true;\n } else if (param.startsWith('random')) {\n const match = param.match(/random\\((\\d+),(\\d+)\\)/);\n if (match) {\n result.random = { min: parseInt(match[1]), max: parseInt(match[2]) };\n result.align = 'random';\n } else {\n result.align = 'random';\n }\n } else if (['start', 'center', 'end'].includes(param)) {\n result.align = param;\n } else {\n result.align = 'start';\n }\n });\n\n return result;\n }\n\n public split(options: ISplitOptions, elementRoot: any): any {\n //let text = elementRoot.innerHTML;\n let text = elementRoot.getAttribute('string-split-original');\n if (text.length === 0) return '';\n\n text = this.decodeHtmlEntity(text);\n \n const element = document.createElement('span');\n const words = text.split(/\\s+/);\n let globalCharIndex = 0;\n let globalWordIndex = 0;\n const totalChars = text.replace(/\\s/g, '').length;\n\n const tempSpan = document.createElement('span');\n const compStyles = window.getComputedStyle(elementRoot);\n\n tempSpan.style.fontFamily = compStyles.fontFamily;\n tempSpan.style.fontSize = compStyles.fontSize;\n tempSpan.style.letterSpacing = compStyles.letterSpacing;\n tempSpan.style.lineHeight = compStyles.lineHeight;\n tempSpan.style.fontWeight = compStyles.fontWeight;\n tempSpan.classList.add('-s-char');\n document.body.appendChild(tempSpan);\n\n let virtualLines: any[] = [];\n let virtualLine: any[] = [];\n let currentLineWidth = 0;\n words.forEach((word: any, wordIndex: any) => {\n tempSpan.textContent = word;\n if (word.length > 0) {\n tempSpan.textContent += '\\u00a0';\n }\n\n const wordWidth = tempSpan.offsetWidth;\n\n const virtualWordSpan = {\n text: word,\n width: wordWidth,\n chars: new Array<any>(),\n };\n const chars = Array.from(word);\n chars.forEach((char, charIndex) => {\n const virtualCharSpan = {\n text: char,\n };\n\n virtualWordSpan.chars.push(virtualCharSpan);\n });\n if (currentLineWidth + wordWidth > elementRoot.offsetWidth) {\n virtualLines.push(virtualLine);\n virtualLine = [];\n currentLineWidth = 0;\n globalCharIndex += virtualLine.length;\n }\n virtualLine.push(virtualWordSpan);\n currentLineWidth += wordWidth;\n });\n\n virtualLines.push(virtualLine);\n\n let hasLineOptions = false;\n if (options.line != null) {\n if (options.line.length > 0) {\n hasLineOptions = true;\n }\n }\n if (options.wordLine != null) {\n if (options.wordLine.length > 0) {\n hasLineOptions = true;\n }\n }\n if (options.charLine != null) {\n if (options.charLine.length > 0) {\n hasLineOptions = true;\n }\n }\n\n let addedWordsCount = 0;\n if (hasLineOptions) {\n // for (let i = 0; i < virtualLines.length; i++) {\n // addedWordsCount += virtualLines[i].length;\n // }\n for (let i = 0; i < virtualLines.length; i++) {\n this.appendVirtualLineToDOM(\n i,\n virtualLines.length,\n words.length,\n element,\n virtualLines[i],\n options,\n globalCharIndex,\n totalChars,\n addedWordsCount\n );\n addedWordsCount += virtualLines[i].length;\n }\n } else {\n for (let i = 0; i < virtualLines.length; i++) {\n virtualLines[i].forEach((virtualWordSpan: any, wordIndex: any) => {\n if (virtualWordSpan.chars.length > 0) {\n const wordSpan = document.createElement('span');\n wordSpan.classList.add('-s-word');\n if ((options.char!=null && options.char?.length > 0) || (options.charWord != null && options.charWord?.length > 0)) {\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\n const charSpan = document.createElement('span');\n charSpan.classList.add('-s-char');\n charSpan.textContent = virtualCharSpan.text;\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\n wordSpan.appendChild(charSpan);\n globalCharIndex++;\n });\n } else {\n wordSpan.textContent = virtualWordSpan.text;\n }\n \n\n this.applyOptions(wordSpan, options.word, globalWordIndex, 'word', wordIndex, words.length);\n if (virtualWordSpan.chars.length > 0) {\n wordSpan.innerHTML += '\\u00a0';\n }\n element.appendChild(wordSpan);\n globalWordIndex++;\n }\n });\n }\n }\n\n document.body.removeChild(tempSpan);\n return { html: element.innerHTML };\n }\n\n // TODO: remove line - char,word\n private appendVirtualLineToDOM(\n lineIndex: number,\n length: number,\n totalWords: number,\n element: HTMLSpanElement,\n virtualLine: any[],\n options: ISplitOptions,\n globalCharIndex: number,\n totalChars: number,\n addedWordsCount: number\n ) {\n const lineSpan = document.createElement('span');\n lineSpan.classList.add('-s-line');\n\n this.applyOptions(lineSpan, options.line, lineIndex, 'line', 0, length);\n\n let lineCharIndex = 0;\n let globalWordIndex = 0;\n let totalLineChars = 0;\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\n totalLineChars += virtualWordSpan.text.length;\n });\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\n if (virtualWordSpan.chars.length > 0) {\n const wordSpan = document.createElement('span');\n wordSpan.classList.add('-s-word');\n\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\n const charSpan = document.createElement('span');\n charSpan.classList.add('-s-char');\n charSpan.textContent = virtualCharSpan.text;\n\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\n this.applyOptions(charSpan, options.charLine, lineCharIndex, 'char-line', charIndex, totalLineChars);\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\n\n wordSpan.appendChild(charSpan);\n globalCharIndex++;\n lineCharIndex++;\n });\n\n this.applyOptions(\n wordSpan,\n options.word,\n addedWordsCount + globalWordIndex,\n 'word',\n addedWordsCount + globalWordIndex,\n totalWords - 1\n );\n this.applyOptions(wordSpan, options.wordLine, wordIndex, 'word-line', wordIndex, virtualLine.length);\n\n if (wordIndex < virtualLine.length - 1) {\n wordSpan.innerHTML += '\\u00a0';\n }\n // +'\\u00a0';\n\n lineSpan.appendChild(wordSpan);\n // if (wordIndex < virtualLine.length - 1) {\n // lineSpan.appendChild(this.createSpaceSpan());\n // }\n globalWordIndex++;\n }\n });\n\n element.appendChild(lineSpan);\n }\n\n private applyOptions(\n span: HTMLSpanElement,\n optionArray: any[] | undefined,\n globalIndex: number,\n type: string,\n localIndex: number,\n parentLength: number\n ) {\n if (optionArray) {\n optionArray.forEach((option, optionIndex) => {\n let index = this.calculateIndex(option, globalIndex, localIndex, parentLength);\n\n const variableName = this.generateVariableName(type, option, optionIndex);\n span.style.setProperty(variableName, String(index));\n });\n }\n }\n\n private createSpaceSpan(): HTMLSpanElement {\n const spaceSpan = document.createElement('span');\n spaceSpan.innerHTML = '\\u00a0';\n return spaceSpan;\n }\n\n private decodeHtmlEntity(str: string) {\n return str.replace(/&/g, '&');\n }\n\n private calculateIndex(\n options: { align: string; random?: { min: number; max: number }; abs?: boolean },\n globalIndex: number,\n localIndex: number,\n parentLength: number\n ): number {\n let index = globalIndex;\n if (options.align === 'random') {\n if (options.random === undefined) {\n options.random = { min: 0, max: parentLength };\n }\n const min = options.random.min || 0;\n const max = options.random.max || parentLength;\n index = Math.floor(Math.random() * (max - min + 1)) + min;\n }\n if (options.align === 'end') {\n index = parentLength - index - 1;\n } else if (options.align === 'center') {\n index = index - Math.floor(parentLength / 2);\n }\n\n if (options.abs) {\n index = Math.abs(index);\n }\n return index;\n }\n\n private generateVariableName(\n type: string,\n option: { align: string; random?: { min: number; max: number }; abs?: boolean },\n index: number\n ): string {\n let variableName = `--${type}`;\n if (option.align) {\n variableName += `-${option.align}`;\n }\n return variableName;\n }\n}\n","export class StringFPS {\r\n private isAnimationStarted: boolean = false;\r\n private fpsInterval: number = 0;\r\n private then: number = 0;\r\n private requestAnimationId: number = 0;\r\n private onFrameCallback: () => void = () => { };\r\n private animate: () => void = () => { };\r\n\r\n public start(fps: number) {\r\n if (this.isAnimationStarted) { return; }\r\n this.fpsInterval = 1000 / fps;\r\n this.then = performance.now();\r\n this.isAnimationStarted = true;\r\n\r\n\r\n if (fps == 0) {\r\n this.animate = () => {\r\n this.onFrameCallback();\r\n this.requestAnimationId = requestAnimationFrame(() => this.animate());\r\n };\r\n } else {\r\n this.animate = () => {\r\n this.requestAnimationId = requestAnimationFrame(() => this.animate());\r\n const now = performance.now();\r\n const elapsed = now - this.then;\r\n if (elapsed > this.fpsInterval) {\r\n this.then = now - (elapsed % this.fpsInterval);\r\n this.onFrameCallback();\r\n }\r\n };\r\n }\r\n this.animate()\r\n }\r\n\r\n public stop() {\r\n if (!this.isAnimationStarted) { return; }\r\n cancelAnimationFrame(this.requestAnimationId);\r\n this.requestAnimationId = 0;\r\n this.isAnimationStarted = false;\r\n }\r\n\r\n public setOnFrame(callback: () => void) {\r\n this.onFrameCallback = callback;\r\n }\r\n}","import { StringModule } from '../StringModule';\nimport { StringData } from '../Utils/StringData';\n\nexport class StringDelayLerpTracker extends StringModule {\n private canvas: any\n private context: any\n private positionHistory: any\n private maxHistory: any\n private currentPosition: any\n private targetPosition: any\n\n private canvasHeight = 0\n constructor(visitor: any) {\n super(visitor);\n this._type = 2;\n\n \n\n \n }\n\n onStart(): void {\n this.canvas = document.createElement('canvas');\n this.context = this.canvas.getContext('2d');\n this.canvas.width = window.innerWidth * .5;\n this.canvas.height = window.innerHeight / 15 - 20;\n this.canvasHeight = window.innerHeight / 15 - 20;\n this.canvas.style.position = 'fixed';\n this.canvas.style.bottom = `${window.innerHeight / 20 + 10}px`;\n this.canvas.style.left = '50%';\n this.canvas.style.transform = 'translateX(-50%)';\n this.canvas.style.backgroundColor = '#000000';\n this.canvas.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n this.canvas.style.zIndex = '1000';\n document.body.appendChild(this.canvas);\n\n this.positionHistory = [];\n this.maxHistory = this.canvas.width;\n this.currentPosition = 0;\n this.targetPosition = 0;\n }\n\n onScroll(data: StringData): void {\n this.currentPosition = Math.abs(this.data.dV);\n this.positionHistory.push(this.currentPosition);\n if (this.positionHistory.length > this.maxHistory) {\n this.positionHistory.shift();\n }\n this.drawGraph();\n }\n\n\n drawGraph() {\n const ctx = this.context;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n ctx.strokeStyle = '#e0e0e0';\n ctx.lineWidth = 1;\n ctx.strokeStyle = 'red';\n ctx.lineWidth = 2;\n ctx.beginPath();\n this.positionHistory.forEach((pos: any, index: any) => {\n const x = index;\n const y = this.canvas.height - pos * this.canvasHeight;\n if (index === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n });\n ctx.stroke();\n }\n\n setTargetPosition(position: number) {\n this.targetPosition = position;\n }\n}\n","import { StringModule } from '../StringModule';\r\nimport { StringData } from '../Utils/StringData';\r\n\r\nexport class StringFPSTracker extends StringModule {\r\n private callCount = 0;\r\n private rafId: number | null = null;\r\n private displayElement: any = null;\r\n private lastUpdateTime = 0;\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.style.color = '#ffffff';\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(data-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 private updateLoop = (timestamp: number) => {\r\n if (!this.lastUpdateTime) {\r\n this.lastUpdateTime = timestamp;\r\n }\r\n const delta = timestamp - this.lastUpdateTime;\r\n if (delta >= 1000) {\r\n this.displayElement.setAttribute('data-fps', this.callCount);\r\n // if (this.displayElement) {\r\n // this.displayElement.textContent = `FPS: ${this.callCount}`;\r\n // }\r\n this.callCount = 0;\r\n this.lastUpdateTime = timestamp;\r\n }\r\n this.rafId = requestAnimationFrame(this.updateLoop);\r\n };\r\n onStart() {\r\n this.createDisplayElement();\r\n this.lastUpdateTime = 0;\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n this.updateLoop(this.lastUpdateTime)\r\n }\r\n\r\n destructor() {\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}\r\n","import { StringModule } from '../StringModule';\nimport { StringData } from '../Utils/StringData';\n\nexport class StringLerpTracker extends StringModule {\n private canvas: any\n private context: any\n private positionHistory: any\n private maxHistory: any\n private currentPosition: any\n private targetPosition: any\n constructor(visitor: any) {\n super(visitor);\n this._type = 2;\n\n \n\n \n }\n\n onStart(): void {\n this.canvas = document.createElement('canvas');\n this.context = this.canvas.getContext('2d');\n this.canvas.width = window.innerWidth * .5;\n this.canvas.height = window.innerHeight / 15 - 20;\n this.canvas.style.position = 'fixed';\n this.canvas.style.bottom = '10px';\n this.canvas.style.left = '50%';\n this.canvas.style.transform = 'translateX(-50%)';\n this.canvas.style.backgroundColor = '#000000';\n this.canvas.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n this.canvas.style.zIndex = '1000';\n document.body.appendChild(this.canvas);\n\n this.positionHistory = [];\n this.maxHistory = this.canvas.width;\n this.currentPosition = 0;\n this.targetPosition = 0;\n }\n\n onScroll(data: StringData): void {\n this.currentPosition = Math.abs(this.data.v);\n this.positionHistory.push(this.currentPosition);\n if (this.positionHistory.length > this.maxHistory) {\n this.positionHistory.shift();\n }\n this.drawGraph();\n }\n\n\n drawGraph() {\n const ctx = this.context;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n ctx.strokeStyle = '#e0e0e0';\n ctx.lineWidth = 1;\n ctx.strokeStyle = '#007bff';\n ctx.lineWidth = 2;\n ctx.beginPath();\n this.positionHistory.forEach((pos: any, index: any) => {\n const x = index;\n const y = this.canvas.height - pos / 2;\n if (index === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n });\n ctx.stroke();\n }\n\n setTargetPosition(position: number) {\n this.targetPosition = position;\n }\n}\n","import { StringModule } from '../StringModule';\nimport { StringData } from '../Utils/StringData';\n\nexport class StringPositionTracker extends StringModule {\n private callCount: number = 0;\n private intervalId: any;\n private displayElement: any;\n\n constructor(visitor: any) {\n super(visitor);\n this._type = 2;\n }\n private createDisplayElement() {\n this.displayElement = document.createElement('div');\n this.displayElement.style.position = 'fixed';\n this.displayElement.style.bottom = '10px';\n this.displayElement.style.left = '10px';\n this.displayElement.style.backgroundColor = '#000000';\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\n this.displayElement.style.zIndex = '9999';\n this.displayElement.setAttribute('data-position', '0');\n document.body.appendChild(this.displayElement);\n const style = document.createElement('style');\n style.innerHTML = `\n [data-position]::after {\n content: attr(direction) 'Top: ' attr(value) 'px';\n position: relative;\n display: block;\n color: #ffffff;\n padding: 5px 8px;\n font-family: Arial, sans-serif;\n font-size: 12px;\n }\n `;\n document.head.appendChild(style);\n }\n onStart() {\n this.createDisplayElement();\n }\n\n onScroll(data: StringData): void {\n let dirSymbol = ``;\n if (data.c < data.t) {\n dirSymbol = `↓`;\n }\n if (data.c > data.t) {\n dirSymbol = `↑`;\n }\n this.displayElement.setAttribute('direction', dirSymbol);\n this.displayElement.setAttribute('value', `${this.data.c}`);\n }\n\n onUpdate(data: StringData): void {\n this.callCount++;\n }\n\n destructor() {\n document.body.removeChild(this.displayElement);\n }\n}\n","export class StringAttribute{\n process(e: any, n: string, d: any = null) {\n return e.getAttribute(n) == null ? d : e.getAttribute(n)\n }\n}","export class StringBoundingClientRect {\n process(e: any) {\n return e.getBoundingClientRect();\n }\n}\n","export class StringData {\n three: any = null;\n\n t: number = 0;\n c: number = 0;\n d: number = 0;\n v: number = 0;\n dV: number = 0;\n sDB: boolean = false;\n\n bS: number = 0;\n cF: number = 1;\n wS: number = 0;\n hnwS: number = 0;\n\n psW: number = 0;\n psH: number = 0;\n\n cL: any = {x:0,y:0}\n\n scsW: number = 1;\n scsH: number = 1;\n sD: 'vertical' | 'horizontal' = 'vertical';\n sC: any;\n sM: 'smooth' | 'disable' | 'default' = 'smooth';\n}\n","export class StringEvent{\n\n private eventsByKey: Map<string, Array<Function>> = new Map<string, Array<Function>>()\n private events: Array<Function> = new Array<Function>()\n on(id: string, event: Function){\n if ( this.eventsByKey.has(id) == false) { \n this.eventsByKey.set(id, [])\n }\n this.eventsByKey.get(id)?.push(event)\n this.updateAllEvents()\n }\n public has(id: string) {\n return this.eventsByKey.has(id)\n }\n public emit(id: string, value: any) {\n if (this.eventsByKey.has(id)) {\n this.eventsByKey.get(id)?.forEach((event: any) => {\n event(value)\n });\n }\n }\n public off(id: string, event: Function) {\n let ea = this.eventsByKey.get(id)\n if (ea!=null) {\n this.eventsByKey.set(id, ea.filter((h: any) => h !== event))\n }\n this.updateAllEvents()\n }\n public all(value: any) {\n this.events.forEach(event => {\n event(value)\n });\n }\n private updateAllEvents() {\n Array.from(this.eventsByKey.values()).forEach(listOfEvents => {\n listOfEvents.forEach(event => {\n this.events.push(event)\n });\n });\n }\n}","export class StringParser{\n public parseSingle(v: string, element: any, wH: any, baseRem: number): number {\n let isNegative = v.startsWith('-');\n if (isNegative) {\n v = v.slice(1);\n }\n let pV;\n if (v === 'selfHeight') {\n pV = element.offsetHeight;\n } else if (v.endsWith('px')) {\n pV = parseFloat(v);\n } else if (v.endsWith('%')) {\n pV = parseFloat(v) * wH / 100;\n } else if (v.endsWith('rem')) {\n pV = parseFloat(v) * baseRem;\n }\n return isNegative ? -pV : pV;\n }\n}","function nullifyTransforms(el: any) {\n let { top, left, width, height } = el.getBoundingClientRect();\n let transformArr = parseTransform(el);\n if (transformArr.length == 6) {\n var t = transformArr;\n let det = t[0] * t[3] - t[1] * t[2];\n return {\n width: width / t[0] == 0 ? 1 : t[0],\n height: height / t[3] == 0 ? 1 : t[3],\n left: (left * t[3] - top * t[2] + t[2] * t[5] - t[4] * t[3]) / det,\n top: (-left * t[1] + top * t[0] + t[4] * t[1] - t[0] * t[5]) / det,\n };\n } else {\n return { top, left, width, height };\n }\n function parseTransform(el: any) {\n let transform = window.getComputedStyle(el).transform;\n return transform\n .split(/\\(|,|\\)/)\n .slice(1, -1)\n .map(function (v) {\n return parseFloat(v);\n });\n }\n}\n\nexport class StringPosition {\n process(e: any, container: any = document.body) {\n let br;\n try {\n br = container.getBoundingClientRect();\n } catch (error) {\n br = document.body.getBoundingClientRect();\n }\n let er = nullifyTransforms(e);\n let o = er.top - br.top;\n let oL = er.left - br.left;\n return { top: o, left: oL };\n }\n}\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.setOnFrame(() => {\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 this.modules = new Array<IStringModule>();\r\n this.modulesUI = new Array<IStringModule>();\r\n\r\n \r\n this.events = new StringEvent();\r\n }\r\n\r\n private eventMap: { [key in 'scroll' | 'progress' | 'lerp' | 'inview' | 'cursor' | 'lazy-loaded' | 'update' | 'start' | 'mousemove-pixel' | 'mousemove-start' | 'mousemove-end']: string } = {\r\n 'scroll': 'scroll',\r\n 'progress': 'progress_',\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 const attributes = this.getAllAttributes(el);\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 = attributes[\"string-enter-el\"] ?? this.defaultSettings.stringEnterEl;\r\n let startSourcePosition = attributes[\"string-enter-vp\"] ?? this.defaultSettings.stringEnterVp;\r\n let endElementPosition = attributes[\"string-exit-el\"] ?? this.defaultSettings.stringExitEl;\r\n let endSourcePosition = attributes[\"string-exit-vp\"] ?? this.defaultSettings.stringExitVp;\r\n\r\n object.inviewTop = this._parser.parseSingle(\r\n attributes[\"string-inview-top\"] ?? attributes[\"string-inview-left\"] ?? this.defaultSettings.stringInviewTop,\r\n el, this.data.sD == 'vertical' ? rH : rW, 16\r\n ) * -1;\r\n \r\n object.inviewBottom = this._parser.parseSingle(\r\n attributes[\"string-inview\"] ?? attributes[\"string-inview-bottom\"] ?? attributes[\"string-inview-right\"] ?? this.defaultSettings.stringInviewBottom,\r\n el, this.data.sD == 'vertical' ? rH : rW, 16\r\n ) * -1;\r\n\r\n object.selfDisable = attributes[\"string-self-disable\"] !== undefined;\r\n object.abs = attributes[\"string-abs\"] !== undefined;\r\n object.cursorTargetDisabled = attributes[\"string-cursor-target-disable\"] !== undefined;\r\n object.cursorTargetStyleDisabled = attributes[\"string-cursor-target-style-disable\"] !== undefined;\r\n\r\n let targetQuery = attributes[\"string-cursor-class\"];\r\n if (targetQuery) {\r\n object.cursorTargetClass = targetQuery;\r\n }\r\n\r\n object.id = attributes[\"string-id\"] ?? `string-${this.globalId}`;\r\n object.key = attributes[\"string-key\"] ?? this.defaultSettings.stringKey;\r\n object.keys = (attributes[\"string\"] ?? \"\").split('|');\r\n\r\n object.strength = attributes[\"string-strength\"] ?? this.defaultSettings.stringStrength;\r\n object.radius = attributes[\"string-radius\"] ?? this.defaultSettings.stringRadius;\r\n object.lerp = attributes[\"string-lerp\"] ?? this.defaultSettings.stringLerp;\r\n object.weight = parseFloat(attributes[\"string-weight\"] ?? \"0.0\");\r\n object.glide = parseFloat(attributes[\"string-glide\"] ?? \"1\");\r\n\r\n let parallaxPosition = parseFloat(attributes[\"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 = attributes[\"string-alignment\"] ?? 'center';\r\n\r\n el.setAttribute(`string-id`, object.id);\r\n object.size = this.data.sD == 'vertical' ? rH : rW;\r\n\r\n object.oStart = this._parser.parseSingle(\r\n attributes[\"string-offset-top\"] ?? attributes[\"string-offset-left\"] ?? this.defaultSettings.stringOffsetStart,\r\n el, this.data.wS, 16\r\n );\r\n object.oEnd = this._parser.parseSingle(\r\n attributes[\"string-offset-bottom\"] ?? attributes[\"string-offset-right\"] ?? this.defaultSettings.stringOffsetEnd,\r\n el, this.data.wS, 16\r\n );\r\n\r\n let observerStart = object.oStart;\r\n let observerEnd = object.oEnd;\r\n\r\n let stringModuleKeys = (attributes[\"string\"] ?? \"\").split('|');\r\n object.factor = 0;\r\n if (stringModuleKeys.includes('parallax')) {\r\n observerStart = observerEnd = object.oStart = object.oEnd = 0;\r\n object.factor = parseFloat(attributes[\"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 = attributes[\"string-repeat\"] !== undefined;\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 let startPos = this.data.sD == 'vertical'\r\n ? this._position.process(el, this.data.sC).top / this.data.scsH\r\n : this._position.process(el, this.data.sC).left / this.data.scsW;\r\n\r\n object.start = startPos;\r\n object.end = startPos + (this.data.sD == 'vertical' ? rH : rW);\r\n\r\n object.calculatePositions(windowSize);\r\n\r\n let connectItems = this.connectQueue.filter(item => item.id == object.id);\r\n this.connectQueue = this.connectQueue.filter(item => item.id != object.id);\r\n connectItems.forEach(connectItem => object.connects.push(connectItem.element));\r\n\r\n let callbackProgress = (entries: any) => {\r\n entries.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n if (!object.active) {\r\n this.events.emit(`activate_object_${object.id}`, true);\r\n object.enter();\r\n }\r\n } else {\r\n if (object.active) {\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 = (entries: any) => {\r\n entries.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\r\n let optionsProgress = {\r\n root: null,\r\n rootMargin: `${observerStart + this.data.wS * .3}px 0px ${observerEnd + this.data.wS * .3}px 0px`,\r\n threshold: 0.001,\r\n };\r\n \r\n let optionsInview = {\r\n root: null,\r\n rootMargin: `${observerStart + object.inviewTop}px 0px ${observerEnd + object.inviewBottom}px 0px`,\r\n threshold: 0.001,\r\n };\r\n\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n\r\n obProgress.observe(el);\r\n obInview.observe(el);\r\n\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\nprivate getAllAttributes(el: HTMLElement): Record<string, any> {\r\n let attributes: Record<string, any> = {};\r\n Array.from(el.attributes).forEach(attr => {\r\n attributes[attr.name] = attr.value;\r\n });\r\n return attributes;\r\n}\r\n\r\n\r\n addObject(el: HTMLElement) {\r\n \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 if (this._attribute.process(element, `string-fixed`) == null ? false : true) {\r\n return\r\n }\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 if (this._attribute.process(element, `string-fixed`) == null ? false : true) {\r\n return\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 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 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 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 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 this.data.hnwS = this.data.wS * -0.5;\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","keys","includes","connect","onConnect","addObject","id","has","set","push","removeObject","delete","index","indexOf","splice","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","process","started","tagName","toLowerCase","setAttribute","muted","tryPlay","once","console","warn","play","catch","err","then","remapLerp","inMin","inMax","outMin","outMax","StringCursor","oldX","oldY","enterObjectsMap","enterObjects","overCount","cursor","querySelector","cursorContent","mouseLerp","rawLerpValue","requestAnimationFrame","isMouseOver","cursorTargetDisabled","rect","getBoundingClientRect","elementX","x","left","elementY","y","top","dx","mousePixelFloatX","dy","mousePixelFloatY","isMouseMove","lerpX","lerpY","offsetX","calculateOffset","alignment","offsetY","mouseX","mouseY","setMouseCoordinates","halfWidth","halfHeight","Math","abs","cursorData","smoothX","smoothY","setProperty","timeoutId","onMouseEnterEventBind","onMouseLeaveEventBind","cursorTargetClass","length","remove","clearTimeout","removeEventListener","onEnter","onLeave","cursorTargetStyleDisabled","selfDisable","toFixed","connects","mousePos","size","StringMagnetic","strength","radius","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","sqrt","magneticTargetX","magneticTargetY","isMagneting","magneticX","magneticY","toString","StringLerpCalc","current","target","amt","StringVirtualCursor","targetX","targetY","_x","_y","_lerpX","_lerpY","_lF","pow","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","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","StringAnchor","oldLerp","p","split","parseOrig","transformOrigin","part","trim","startsWith","slice","map","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","name","vT","onCalcUpdate","scrollContainer","_scrollDirection","d","scrollDirection","StringScrollDefault","delta","speedAccelerate","scrollTop","plusDelta","StringScrollDisable","preventDefault","CLASS_NAMES","StringScrollSmooth","isScrollbarManipulation","isBottomScrollDirection","velocityThreshold","previousCurrent","updateScrollDirection","newDirection","isForward","toggle","stopScroll","speed","absVelocity","sign","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","from","charIndex","virtualCharSpan","hasLineOptions","addedWordsCount","appendVirtualLineToDOM","wordSpan","charSpan","applyOptions","removeChild","lineIndex","totalWords","lineSpan","lineCharIndex","totalLineChars","span","optionArray","globalIndex","localIndex","parentLength","optionIndex","calculateIndex","variableName","generateVariableName","String","createSpaceSpan","spaceSpan","str","StringFPS","isAnimationStarted","fpsInterval","requestAnimationId","onFrameCallback","animate","fps","performance","now","elapsed","stop","cancelAnimationFrame","setOnFrame","callback","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","rafId","displayElement","lastUpdateTime","updateLoop","timestamp","createDisplayElement","right","color","StringLerpTracker","StringPositionTracker","dirSymbol","StringAttribute","n","StringBoundingClientRect","StringData","three","cF","hnwS","cL","scsW","scsH","StringEvent","eventsByKey","on","event","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","initMutationObserver","connectTargetId","connectTargetObject","destroy","eventName","setupSettings","setupObject","disconnect","attributes","getAllAttributes","r","rW","rH","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","targetQuery","observerStart","observerEnd","stringModuleKeys","connectItems","item","connectItem","optionsProgress","rootMargin","threshold","optionsInview","obProgress","IntersectionObserver","entries","isIntersecting","obInview","attr","removedObject","removeAttribute","newWW","newWH","handleRemovedElement","removeId","connectQueueItem","handleAddedElement","MutationObserver","mutations","mutation","removedNodes","removedNode","nodeType","Node","ELEMENT_NODE","childElement","addedNodes","addedNode","childList","subtree","transformContainer","b","scrollWidth","scrollHeight","clientWidth","clientHeight"],"sourceRoot":""}
|