@fiddle-digital/string-tune 0.0.55 → 0.0.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack://StringTune/webpack/universalModuleDefinition","webpack://StringTune/webpack/bootstrap","webpack://StringTune/webpack/runtime/define property getters","webpack://StringTune/webpack/runtime/hasOwnProperty shorthand","webpack://StringTune/webpack/runtime/make namespace object","webpack://StringTune/./src/Utils/StringDefaultSettings.ts","webpack://StringTune/./src/Utils/StringParser.ts","webpack://StringTune/./src/StringModule.ts","webpack://StringTune/./src/Objects/StringBase.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/Scroll/Modules/StringProgress.ts","webpack://StringTune/./src/Media/Modules/StringSVG.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/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/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};","export class StringDefaultSettings {\r\n stringOffsetStart: string = '0%'\r\n stringOffsetEnd: string = '0%'\r\n\r\n stringEnterEl: string = 'top'\r\n stringExitEl: string = 'bottom'\r\n stringEnterVp: string = 'bottom'\r\n stringExitVp: string = 'top'\r\n\r\n stringInviewTop: string = '0%'\r\n stringInviewBottom: string = '0%'\r\n\r\n stringKey: string = '--progress'\r\n\r\n stringStrength: number = 0.3\r\n stringRadius: number = 150\r\n stringLerp: number = 0.2\r\n stringParallaxBias: number = 0.0\r\n stringParallax: number = 0.2\r\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}","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 { StringDefaultSettings } from './Utils/StringDefaultSettings';\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\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 parser = new StringParser();\r\n protected defaultSettings: StringDefaultSettings = new StringDefaultSettings()\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 this.defaultSettings = visitor.defaultSettings;\r\n this.parser = visitor.parser;\r\n }\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>): void {\r\n \r\n }\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 enterObject(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 leaveObject(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 { StringModule } from \"../StringModule\";\r\nimport { StringObject } from \"./StringObject\";\r\n\r\n\r\nexport class StringBase extends StringModule {\r\n private oldLerp = 0\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor, settings);\r\n }\r\n\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\r\n \r\n }\r\n \r\n\r\n}\r\n","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\nexport class StringLazy extends StringBase {\r\n private isStartLoaded: boolean = false;\r\n private imageLoadingCount: number = 0;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'lazy';\r\n }\r\n onStart(): void {\r\n const imagesEls = document.querySelectorAll('img[string-lazy]');\r\n imagesEls.forEach((element: any) => {\r\n this.load(element);\r\n });\r\n this.isStartLoaded = true;\r\n }\r\n onConnect(object: StringObject) {\r\n this.imageLoadingCount++;\r\n if (this.isStartLoaded) {\r\n let element: any = object.el;\r\n this.load(element);\r\n }\r\n }\r\n private load(element: any) {\r\n this.getImageSize(element, element.getAttribute('string-lazy'));\r\n element.classList.add(`lazyLoad`);\r\n element.src = element.getAttribute('string-lazy') as any;\r\n const onLoad = () => {\r\n element.classList.add(`-loaded`);\r\n element.removeEventListener('load', onLoad);\r\n };\r\n element.addEventListener('load', onLoad);\r\n }\r\n private getImageSize(element: HTMLElement, url: string) {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = () => {\r\n if (xhr.status === 206 || xhr.status === 200) {\r\n const buffer = xhr.response;\r\n const blob = new Blob([buffer]);\r\n const img = new Image();\r\n img.onload = () => {\r\n element.style.aspectRatio = `${img.width} / ${img.height}`;\r\n resolve({ width: img.width, height: img.height });\r\n\r\n URL.revokeObjectURL(img.src);\r\n this.imageLoadingCount--;\r\n if (this.imageLoadingCount <= 0) {\r\n this.events.emit('all-image-loaded', null);\r\n this.imageLoadingCount = 0;\r\n }\r\n };\r\n img.onerror = () => {\r\n URL.revokeObjectURL(img.src); \r\n this.imageLoadingCount--; \r\n reject(new Error('Failed to load image'));\r\n };\r\n img.src = URL.createObjectURL(blob);\r\n } else {\r\n reject(new Error('Failed to load image'));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('Network error'));\r\n };\r\n xhr.setRequestHeader('Range', 'bytes=0-');\r\n xhr.send();\r\n });\r\n }\r\n}\r\n","import { StringModule } from \"../../StringModule\";\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 }).then(() => {\n element.setAttribute(`string-started`, '')\n });\n }\n}","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nconst tS = 'top';\r\nconst bS = 'bottom';\r\nconst lS = 'left';\r\nconst rS = 'right';\r\n\r\nexport class StringProgress extends StringBase {\r\n \r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'progress';\r\n }\r\n\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\r\n super.initObject(globalId, object, el, attributes)\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.setProperty('start-element', startElementPosition);\r\n object.setProperty('start-source', startSourcePosition);\r\n object.setProperty('end-element', endElementPosition);\r\n object.setProperty('end-source', endSourcePosition);\r\n\r\n this.calculatePositions(object, this.data.wS)\r\n \r\n \r\n }\r\n\r\n onScroll(data: StringData): void {\r\n super.onScroll(data)\r\n this.objects.forEach((object) => {\r\n this.setUpObject(object);\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n super.onConnect(object)\r\n object.onEnter = () => {\r\n this.setUpObject(object);\r\n };\r\n }\r\n\r\n private setUpObject(object: StringObject) {\r\n const progress = Math.min(1, Math.max(0, (this.data.c - object.getProperty<number>('start-position')) / object.getProperty<number>('difference-position')));\r\n \r\n if (object.getProperty<number>('progress') !== progress) {\r\n object.setProperty<number>('progress', progress);\r\n this.applyProgress(object, progress);\r\n }\r\n }\r\n\r\n private applyProgress(object: StringObject, progress: number) {\r\n const progressStr = progress.toString();\r\n this.events.emit(`progress_${object.id}`, progress);\r\n object.el.style.setProperty(object.key, progressStr);\r\n if (object.connects.length > 0) {\r\n object.connects.forEach((element) => {\r\n element.style.setProperty(object.key, progressStr);\r\n });\r\n }\r\n }\r\n\r\n private calculatePositions(object: StringObject, windowSize: number) {\r\n if ((object.getProperty('start-element') === tS && object.getProperty('start-source') === tS) || (object.getProperty('start-element') === lS && object.getProperty('start-source') === lS)) {\r\n object.setProperty<number>('start-position', object.getProperty<number>('start') - object.getProperty<number>('offset-end'));\r\n } else if ((object.getProperty('start-element') === tS && object.getProperty('start-source') === bS) || (object.getProperty('start-element') === lS && object.getProperty('start-source') === rS)) {\r\n object.setProperty<number>('start-position', object.getProperty<number>('start') - windowSize - object.getProperty<number>('offset-end'));\r\n } else if ((object.getProperty('start-element') === bS && object.getProperty('start-source') === tS) || (object.getProperty('start-element') === rS && object.getProperty('start-source') === lS)) {\r\n object.setProperty<number>('start-position', object.getProperty<number>('start') + object.getProperty<number>('size') - object.getProperty<number>('offset-end'));\r\n } else if ((object.getProperty('start-element') === bS && object.getProperty('start-source') === bS) || (object.getProperty('start-element') === rS && object.getProperty('start-source') === rS)) {\r\n object.setProperty<number>('start-position', object.getProperty<number>('start') - windowSize - object.getProperty<number>('offset-end') + object.getProperty<number>('size'));\r\n }\r\n\r\n if ((object.getProperty('end-element') === tS && object.getProperty('end-source') === tS) || (object.getProperty('end-element') === lS && object.getProperty('end-source') === lS)) {\r\n object.setProperty<number>('end-position',object.getProperty<number>('start') + object.getProperty<number>('offset-start'));\r\n } else if ((object.getProperty('end-element') === tS && object.getProperty('end-source') === bS) || (object.getProperty('end-element') === lS && object.getProperty('end-source') === rS)) {\r\n object.setProperty<number>('end-position',object.getProperty<number>('start') - windowSize + object.getProperty<number>('offset-start'));\r\n } else if ((object.getProperty('end-element') === bS && object.getProperty('end-source') === tS) || (object.getProperty('end-element') === rS && object.getProperty('end-source') === lS)) {\r\n object.setProperty<number>('end-position',object.getProperty<number>('start') + object.getProperty<number>('size') + object.getProperty<number>('offset-start'));\r\n } else if ((object.getProperty('end-element') === bS && object.getProperty('end-source') === bS) || (object.getProperty('end-element') === rS && object.getProperty('end-source') === rS)) {\r\n object.setProperty<number>('end-position',object.getProperty<number>('start') - windowSize + object.getProperty<number>('size') + object.getProperty<number>('offset-start'));\r\n }\r\n object.setProperty<number>('difference-position', object.getProperty<number>('end-position') - object.getProperty<number>('start-position'))\r\n\r\n }\r\n\r\n}\r\n","\nimport { StringObject } from '../../Objects/StringObject';\nimport { StringProgress } from '../../Scroll/Modules/StringProgress';\nimport { StringData } from '../../Utils/StringData';\n\nexport class StringSVG extends StringProgress {\n \n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'svg-morph';\n }\n\n async initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\n const startSrc = attributes[\"string-svg-start\"];\n const endSrc = attributes[\"string-svg-end\"];\n\n const [startSVG, endSVG]: any = await Promise.all([\n this.loadSVG(startSrc),\n this.loadSVG(endSrc),\n ]);\n\n let svgStart = startSVG.querySelector(\"path\");\n let svgEnd = endSVG.querySelector(\"path\");\n\n let pointsStart = svgStart.getAttribute(\"d\") || \"\";\n let pointsEnd = svgEnd.getAttribute(\"d\") || \"\";\n\n object.setProperty<any>(\"points-start\", pointsStart)\n object.setProperty<any>(\"points-end\", pointsEnd)\n\n let pathElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n pathElement.setAttribute(\"d\", pointsStart);\n pathElement.setAttribute(\"fill\", attributes[\"string-fill\"] ?? \"black\");\n\n const svgContainer = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svgContainer.setAttribute(\"viewBox\", startSVG.getAttribute(\"viewBox\") || \"0 0 100 100\");\n svgContainer.appendChild(pathElement);\n el.innerHTML = \"\"\n el.appendChild(svgContainer);\n\n object.setProperty(\"svg-path\", pathElement);\n super.initObject(globalId, object, el, attributes);\n }\n\n onScroll(data: StringData): void {\n super.onScroll(data)\n this.objects.forEach((object) => {\n this.morphPath(object, object.getProperty<number>('progress'));\n });\n }\n\n private async loadSVG(url: string): Promise<SVGElement | null> {\n try {\n const response = await fetch(url);\n const text = await response.text();\n const parser = new DOMParser();\n const doc = parser.parseFromString(text, \"image/svg+xml\");\n return doc.querySelector(\"svg\");\n } catch (error) {\n console.error(`StringSVG: помилка завантаження ${url}`, error);\n return null;\n }\n }\n\n private morphPath(object: StringObject, progress: number) {\n const interpolatedPath = this.interpolatePaths(object.getProperty<any>(\"points-start\"), object.getProperty<any>(\"points-end\"), progress);\n object.getProperty<any>(\"svg-path\").setAttribute(\"d\", interpolatedPath);\n }\n\n private interpolatePaths(startD: string, endD: string, progress: number): string {\n const startCommands = this.parsePathCommands(startD);\n const endCommands = this.parsePathCommands(endD);\n\n if (startCommands.length !== endCommands.length) {\n console.warn(\"StringSVG: Кількість команд в шляхах різна, відображається один із шляхів без інтерполяції.\");\n return progress < 0.5 ? startD : endD; \n }\n\n let interpolatedD = \"\";\n\n for (let i = 0; i < startCommands.length; i++) {\n const startParts = startCommands[i].match(/([a-zA-Z])|(-?\\d*\\.?\\d+)/g) || [];\n const endParts = endCommands[i].match(/([a-zA-Z])|(-?\\d*\\.?\\d+)/g) || [];\n\n if (startParts.length !== endParts.length) {\n console.warn(`StringSVG: Різна кількість аргументів у команді ${startParts[0]}, пропускаємо.`);\n interpolatedD += (progress < 0.5 ? startCommands[i] : endCommands[i]) + \" \";\n continue;\n }\n\n interpolatedD += startParts[0]; // Додаємо буквену команду (M, L, C і т.д.)\n\n for (let j = 1; j < startParts.length; j++) {\n const startVal = parseFloat(startParts[j]);\n const endVal = parseFloat(endParts[j]);\n\n if (isNaN(startVal) || isNaN(endVal)) {\n interpolatedD += ` ${startParts[j]}`; // Наприклад, якщо це `Z`, просто додаємо без змін\n } else {\n const interpolatedVal = startVal + (endVal - startVal) * progress;\n interpolatedD += ` ${interpolatedVal.toFixed(3)}`; // Округлення до 3 знаків після коми\n }\n }\n }\n\n return interpolatedD;\n }\n\n private parsePathCommands(d: string): string[] {\n return d.match(/[a-df-z][^a-df-z]*/gi) || [];\n }\n\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","import { StringBase } from '../../Objects/StringBase';\r\nimport { 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 StringBase {\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(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>): void {\r\n super.initObject(globalId, object, el, attributes)\r\n\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\r\n object.setProperty('alignment', attributes[\"string-alignment\"] ?? 'center');\r\n\r\n object.setProperty('mouse-x', 0);\r\n object.setProperty('mouse-y', 0);\r\n object.setProperty('mouse-pixel-x', 0);\r\n object.setProperty('mouse-pixel-y', 0);\r\n\r\n\r\n object.setProperty('is-mouse-over', false);\r\n object.setProperty('is-mouse-move', false);\r\n object.setProperty('lerp', remapLerp(rawLerpValue));\r\n object.setProperty('cursor-target-disable', attributes[\"string-cursor-target-disable\"] !== undefined);\r\n object.setProperty('cursor-target-style-disable', attributes[\"string-cursor-target-style-disable\"] !== undefined);\r\n\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 object.setProperty('cursor-target-class', \"\")\r\n if (targetQuery) {\r\n object.setProperty('cursor-target-class', targetQuery);\r\n }\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.getProperty('is-mouse-over') && !object.getProperty('cursor-target-disable')) {\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.getProperty<number>('mouse-pixel-x') - elementX;\r\n const dy = object.getProperty<number>('mouse-pixel-y') - elementY;\r\n const distanceSquared = dx * dx + dy * dy;\r\n if (distanceSquared > 0.0001) {\r\n if (object.getProperty('is-mouse-move') == false) {\r\n object.setProperty('is-mouse-move', true);\r\n object.setProperty('mouse-pixel-x', elementX);\r\n object.setProperty('mouse-pixel-y', elementY);\r\n this.events.emit(`mousemove_start_${object.id}`, null)\r\n }\r\n let lerpX = this.lerp.process(object.getProperty<number>('mouse-pixel-x'), elementX, object.getProperty('lerp'));\r\n let lerpY = this.lerp.process(object.getProperty<number>('mouse-pixel-y'), elementY, object.getProperty('lerp'));\r\n object.setProperty('mouse-pixel-x', object.getProperty<number>('mouse-pixel-x') + lerpX)\r\n object.setProperty('mouse-pixel-y', object.getProperty<number>('mouse-pixel-y') + lerpY)\r\n const offsetX = this.calculateOffset(object.getProperty('alignment'), object.getProperty<number>('mouse-pixel-x'), rect.width);\r\n const offsetY = this.calculateOffset(object.getProperty('alignment'), object.getProperty<number>('mouse-pixel-y'), rect.height);\r\n object.setProperty('mouse-x', offsetX);\r\n object.setProperty('mouse-y', offsetY);\r\n this.setMouseCoordinates(object, object.getProperty<number>('mouse-x'), object.getProperty<number>('mouse-y'));\r\n this.events.emit(`mousemove_${object.id}`, {\r\n x: object.getProperty<number>('mouse-x'),\r\n y: object.getProperty<number>('mouse-y'),\r\n })\r\n this.events.emit(`mousemove_pixel_${object.id}`, {\r\n x: object.getProperty<number>('mouse-pixel-x'),\r\n y: object.getProperty<number>('mouse-pixel-y'),\r\n })\r\n } else {\r\n object.setProperty('mouse-pixel-x', elementX);\r\n object.setProperty('mouse-pixel-y', elementY);\r\n this.events.emit(`mousemove_end_${object.id}`, null);\r\n }\r\n } else {\r\n if (object.getProperty<number>('mouse-x') != 0 || object.getProperty<number>('mouse-y') != 0) {\r\n \r\n object.setProperty('is-mouse-move', false);\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', object.getProperty('half-width'), rect.width);\r\n const offsetY = this.calculateOffset('center', object.getProperty('half-height'), rect.height);\r\n\r\n object.setProperty('mouse-x', object.getProperty<number>('mouse-x') + this.lerp.process(object.getProperty<number>('mouse-x'), offsetX, object.getProperty('lerp')));\r\n object.setProperty('mouse-y', object.getProperty<number>('mouse-y') + this.lerp.process(object.getProperty<number>('mouse-y'), offsetY, object.getProperty('lerp')));\r\n \r\n\r\n if (Math.abs(object.getProperty<number>('mouse-x')) < .001 && Math.abs(object.getProperty<number>('mouse-y')) < .001) {\r\n object.setProperty('mouse-x', 0);\r\n object.setProperty('mouse-y', 0);\r\n object.setProperty('mouse-pixel-x', 0);\r\n object.setProperty('mouse-pixel-y', 0);\r\n }\r\n this.setMouseCoordinates(object, object.getProperty<number>('mouse-x'), object.getProperty<number>('mouse-y'));\r\n }\r\n }\r\n });\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.setProperty('is-mouse-over', true);\r\n if (object.getProperty<string>('cursor-target-class')!= null && object.getProperty<string>('cursor-target-class').length > 0) {\r\n this.cursor.classList.add(object.getProperty<string>('cursor-target-class'))\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.setProperty('is-mouse-over', false);\r\n if (object.getProperty<string>('cursor-target-class') != null && object.getProperty<string>('cursor-target-class').length > 0) {\r\n this.cursor.classList.remove(object.getProperty<string>('cursor-target-class'))\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.getProperty('cursor-target-style-disable')) {\r\n if (object.getProperty<boolean>('self-disable') == 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 { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringMagnetic extends StringBase {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'magnetic';\r\n }\r\n\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\r\n super.initObject(globalId, object, el, attributes)\r\n object.setProperty('is-magneting', false);\r\n object.setProperty('magnetic-target-x', 0);\r\n object.setProperty('magnetic-target-y', 0);\r\n object.setProperty('magnetic-x', 0);\r\n object.setProperty('magnetic-y', 0);\r\n object.setProperty('strength', attributes[\"string-strength\"] ?? this.defaultSettings.stringStrength);\r\n object.setProperty('radius', attributes[\"string-radius\"] ?? this.defaultSettings.stringRadius);\r\n object.setProperty('lerp', .1);\r\n\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLElement;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-strength'] != null) {\r\n object.setProperty(\"strength\", this.settings['string-strength']);\r\n }\r\n if (this.settings['string-radius'] != null) {\r\n object.setProperty(\"radius\", this.settings['string-radius']);\r\n }\r\n if (this.settings['string-lerp'] != null) {\r\n object.setProperty(\"lerp\", this.settings['string-lerp']);\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.objects.forEach((object) => {\r\n const element = object.el as HTMLElement;\r\n const rect = element.getBoundingClientRect();\r\n const elementCenterX = rect.left + object.getProperty<number>('half-width');\r\n const elementCenterY = rect.top + object.getProperty<number>('half-height');\r\n const distX = e.clientX - elementCenterX;\r\n const distY = e.clientY - elementCenterY;\r\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\r\n let radius = object.getProperty<number>('radius');\r\n let strength = object.getProperty<number>('strength');\r\n\r\n if (distance < radius) {\r\n object.setProperty('magnetic-target-x', distX * strength * ((radius - distance) / radius));\r\n object.setProperty('magnetic-target-y', distY * strength * ((radius - distance) / radius));\r\n object.setProperty('is-magneting', true);\r\n } else {\r\n object.setProperty('magnetic-target-x', 0);\r\n object.setProperty('magnetic-target-y', 0);\r\n }\r\n });\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n if (object.getProperty('is-magneting')) {\r\n let magneticX = object.getProperty<number>('magnetic-x')\r\n let magneticY = object.getProperty<number>('magnetic-y')\r\n let lerpX = this.lerp.process(magneticX, object.getProperty('magnetic-target-x'), object.getProperty('lerp'));\r\n let lerpY = this.lerp.process(magneticY, object.getProperty('magnetic-target-y'), object.getProperty('lerp'));\r\n if (lerpX > -0.01 && lerpX < 0.01) {\r\n lerpX = 0;\r\n object.setProperty('magnetic-x', object.getProperty('magnetic-target-x'));\r\n }\r\n if (lerpY > -0.01 && lerpY < 0.01) {\r\n lerpY = 0;\r\n object.setProperty('magnetic-y', object.getProperty('magnetic-target-y'));\r\n }\r\n magneticX += lerpX;\r\n magneticY += lerpY;\r\n object.setProperty<number>('magnetic-x', magneticX)\r\n object.setProperty<number>('magnetic-y', magneticY)\r\n object.el.style.setProperty('--magnetic-x', magneticX.toString());\r\n object.el.style.setProperty('--magnetic-y', magneticY.toString());\r\n if (object.getProperty('magnetic-target-x') == magneticX || object.getProperty('magnetic-target-y') == magneticY) {\r\n object.setProperty('is-magneting', false);\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export class StringLerpCalc {\r\n process(current: number, target: number, amt: number) {\r\n const difference = target - current;\r\n 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\n\r\nexport class StringObject {\r\n public el: HTMLElement;\r\n public id: string = '';\r\n public key: string = '--progress';\r\n public keys: string = '';\r\n\r\n public connects: Array<HTMLElement> = new Array<HTMLElement>();\r\n private properties: Map<string, any> = new Map();\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n\r\n public onEnter = () => {};\r\n public onLeave = () => {};\r\n\r\n\r\n // \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 \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 \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 // 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\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 public setProperty<T>(key: string, value: T): void {\r\n this.properties.set(key, value);\r\n }\r\n\r\n public getProperty<T>(key: string): T {\r\n return this.properties.get(key) ?? null;\r\n }\r\n\r\n constructor(element: HTMLElement) {\r\n this.el = element;\r\n \r\n }\r\n\r\n enter() {\r\n this.setProperty('active', true);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.enterObject(this.id, this);\r\n });\r\n this.onEnter();\r\n }\r\n leave() {\r\n this.setProperty('active', false);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.leaveObject(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.getProperty<boolean>('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 \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 { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringAnchor extends StringBase {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'anchor';\r\n }\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>): void {\r\n super.initObject(globalId, object, el, attributes)\r\n object.setProperty('anchor', this.attribute.process(el, `string-anchor`, \"center center\"));\r\n\r\n }\r\n onConnect(object: StringObject) {\r\n super.onConnect(object)\r\n if (object.getProperty('anchor') == null || object.getProperty('anchor') == \"\") {\r\n object.setProperty('anchor', \"center center\")\r\n }\r\n const p = object.getProperty<string>('anchor').split(' ');\r\n const x = this.parseOrig(p[0]);\r\n const y = this.parseOrig(p[1] || p[0]);\r\n object.el.style.transformOrigin = `${x} ${y}`;\r\n }\r\n\r\n private parseOrig(part: string) {\r\n part = part.trim();\r\n if (part.startsWith('random')) {\r\n const o = part.slice(7, -1).split(',').map(s => s.trim());\r\n const c = Math.floor(Math.random() * o.length);\r\n return o[c];\r\n } else {\r\n return part;\r\n }\r\n }\r\n}\r\n\r\n","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringGlide extends StringBase {\r\n private previousLerp: number = 0;\r\n private displacement: number = 0;\r\n private acceleration: number = 0;\r\n private velocityMultiplier: number = 0.00125;\r\n private isInitialScroll: boolean = true;\r\n\r\n private baseVelocityMultiplier: number = 0.00125;\r\n private reducedVelocityMultiplier: number = this.baseVelocityMultiplier / 20;\r\n private negativeVelocityMultiplier: number = -0.0001;\r\n\r\n private readonly ACCELERATION_STEP: number = 0.05;\r\n private readonly MIN_DISPLACEMENT: number = 0.01;\r\n private readonly MAX_DISPLACEMENT: number = 1;\r\n private readonly MIN_VELOCITY: number = -1;\r\n private readonly MAX_VELOCITY: number = 1;\r\n\r\n private maxDisplacementValue: number = 0;\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor);\r\n this.htmlKey = 'glide';\r\n\r\n if (settings) {\r\n const { baseVelocityMultiplier, reducedVelocityMultiplier, negativeVelocityMultiplier } = settings;\r\n this.baseVelocityMultiplier = baseVelocityMultiplier ?? this.baseVelocityMultiplier;\r\n this.reducedVelocityMultiplier = reducedVelocityMultiplier ?? this.reducedVelocityMultiplier;\r\n this.negativeVelocityMultiplier = negativeVelocityMultiplier ?? this.negativeVelocityMultiplier;\r\n }\r\n \r\n }\r\n\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\r\n super.initObject(globalId, object, el, attributes)\r\n //object.glide = parseFloat(attributes[\"string-glide\"] ?? \"1\");\r\n object.setProperty('glide', parseFloat(attributes[\"string-glide\"] ?? \"1\"))\r\n }\r\n\r\n private setupItem = (object: StringObject) => {\r\n const transformCompute = `translate3d(0, ${-this.data.dV * this.maxDisplacementValue * object.getProperty<number>('glide')}px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n }\r\n\r\n private onUpdateDesktopEvent = ()=>{\r\n for (let i = 0; i < this.objects.length; i++) {\r\n let object = this.objects[i]\r\n this.setupItem(object)\r\n }\r\n }\r\n private onUpdateMobileEvent = ()=>{}\r\n private onUpdateEvent = this.onUpdateDesktopEvent\r\n\r\n \r\n\r\n private calcExpanderFactor(isDirectionUp: boolean): void {\r\n const isConditionMet = isDirectionUp\r\n ? this.data.v < this.previousLerp\r\n : this.data.v > this.previousLerp;\r\n\r\n this.velocityMultiplier = isConditionMet\r\n ? (this.isInitialScroll ? this.baseVelocityMultiplier : this.reducedVelocityMultiplier)\r\n : this.negativeVelocityMultiplier;\r\n\r\n if (!isConditionMet) {\r\n this.isInitialScroll = false;\r\n }\r\n }\r\n onStart(): void {\r\n this.maxDisplacementValue = this.data.wS * 0.1\r\n }\r\n\r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.maxDisplacementValue = this.data.wS * 0.1\r\n this.onUpdateEvent = this.onUpdateDesktopEvent\r\n } else {\r\n this.onUpdateEvent = this.onUpdateMobileEvent \r\n this.resetState();\r\n this.objects.forEach((object) => {\r\n this.setupItem(object);\r\n })\r\n }\r\n }\r\n\r\n private resetState(): void {\r\n this.displacement = 0;\r\n this.acceleration = 0;\r\n this.isInitialScroll = true;\r\n this.velocityMultiplier = this.baseVelocityMultiplier;\r\n }\r\n\r\n onScrollStart(): void {\r\n this.resetState();\r\n }\r\n\r\n onScrollStop(): void {\r\n this.resetState();\r\n this.previousLerp = 0;\r\n //document.documentElement.style.setProperty('--glide', '0');\r\n for (let i = 0; i < this.objects.length; i++) {\r\n let object = this.objects[i]\r\n const transformCompute = `translate3d(0, 0px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.el.style.setProperty('--glide', this.data.dV.toString());\r\n }\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.calcExpanderFactor(this.data.sDB === false);\r\n this.acceleration = Math.min(this.MAX_DISPLACEMENT, this.acceleration + this.ACCELERATION_STEP);\r\n this.displacement = Math.max(this.MIN_DISPLACEMENT, Math.min(this.MAX_DISPLACEMENT, this.displacement + this.velocityMultiplier));\r\n this.data.dV = Math.min(this.MAX_VELOCITY, Math.max(this.MIN_VELOCITY, this.data.v * this.displacement * this.acceleration));\r\n this.objects.forEach((object) => {\r\n object.el.style.setProperty('--glide', this.data.dV.toString());\r\n })\r\n this.previousLerp = this.data.v;\r\n this.onUpdateEvent()\r\n }\r\n}","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringLerp extends StringBase {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'lerp';\r\n }\r\n onScrollStop(): void {\r\n this.objects.forEach((object) => {\r\n object.el.style.setProperty('--lerp', \"0\");\r\n })\r\n }\r\n onScroll(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n object.el.style.setProperty('--lerp', this.data.v.toString());\r\n })\r\n }\r\n}\r\n","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringData } from '../../Utils/StringData';\r\nimport { StringProgress } from './StringProgress';\r\n\r\nexport class StringParallax extends StringProgress {\r\n \r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'parallax';\r\n }\r\n\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\r\n let parallaxPosition = parseFloat(attributes[\"string-parallax-bias\"] ?? this.defaultSettings.stringParallaxBias);\r\n object.setProperty('parallax-position-start', -0.5 + 0.5 * parallaxPosition);\r\n object.setProperty('parallax-position-end', 0.5 + 0.5 * (1 - parallaxPosition));\r\n object.setProperty('parallax-factor', parseFloat(attributes[\"string-parallax\"] ?? this.defaultSettings.stringParallax));\r\n object.setProperty<number>('offset-start', object.getProperty<number>('parallax-factor') * this.data.wS)\r\n object.setProperty<number>('offset-end', object.getProperty<number>('parallax-factor') * this.data.wS)\r\n super.initObject(globalId, object, el, attributes)\r\n }\r\n \r\n private setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.getProperty<number>('parallax-factor') * this.data.wS * object.getProperty<number>('parallax-position-start') + progress * object.getProperty<number>('parallax-factor') * this.data.wS * object.getProperty<number>('parallax-position-end')\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n\r\n private onScrollDesktopEvent = () => {\r\n this.objects.forEach((object) => {\r\n this.setupParallax(object, object.getProperty<number>('progress'))\r\n });\r\n }\r\n private onScrollMobileEvent = () => {}\r\n private onScrollEvent = this.onScrollDesktopEvent\r\n\r\n \r\n onScroll(data: StringData): void {\r\n super.onScroll(data)\r\n this.onScrollEvent()\r\n }\r\n \r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.onScrollEvent = this.onScrollDesktopEvent\r\n } else {\r\n this.onScrollEvent = this.onScrollMobileEvent \r\n this.objects.forEach((object) => {\r\n this.setupParallax(object, .5);\r\n })\r\n }\r\n }\r\n}\r\n","import { 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","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDefault extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'mobile';\r\n }\r\n public onUpdate() {\r\n if (this.data.d!=0) {\r\n let delta = this.data.d * this.settings.speedAccelerate\r\n this.data.d -= delta\r\n this.data.v = delta \r\n\r\n if (Math.abs(this.data.v) < .1) {\r\n this.data.d = 0\r\n this.data.v = 0\r\n this.onScrollStop();\r\n } \r\n }\r\n }\r\n public onScroll(e: any) {\r\n this.data.c = this.d.documentElement.scrollTop;\r\n this.data.t = this.d.documentElement.scrollTop;\r\n }\r\n\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n if (this.data.d == 0) {\r\n this.onScrollStart()\r\n }\r\n let plusDelta = e.deltaY\r\n if (this.data.t == 0) {\r\n this.data.d += Math.max(0, e.deltaY);\r\n }\r\n this.data.d += plusDelta;\r\n }\r\n }\r\n}","\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\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: any = false;\r\n private readonly velocityThreshold = 0.1;\r\n private plusDelta: number = 0\r\n private previousCurrent: number = 0\r\n\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 === null) {\r\n this.isBottomScrollDirection = newDirection;\r\n return;\r\n }\r\n this.data.sDB = newDirection;\r\n this.onChangeDirection();\r\n \r\n document.documentElement.classList.toggle(CLASS_NAMES.SCROLL_FORWARD, newDirection);\r\n document.documentElement.classList.toggle(CLASS_NAMES.SCROLL_BACK, !newDirection);\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 this.isBottomScrollDirection = null\r\n }\r\n\r\n private delta: number = 0;\r\n public onUpdate(): void {\r\n \r\n if (this.isScrollbarManipulation) {\r\n this.isScrollbarManipulation = false;\r\n this.data.t = this.scrollContainer?.scrollTop ?? document.documentElement.scrollTop;\r\n this.data.c = this.data.t;\r\n return;\r\n }\r\n if (this.data.d != 0) {\r\n this.delta = this.data.d * this.settings.speedAccelerate\r\n this.data.t = Math.min(Math.max(0, this.data.t + this.delta), this.data.bS);\r\n this.data.d -= this.delta\r\n this.data.v = (this.data.t - this.data.c) * this.settings.speed\r\n\r\n const absVelocity = Math.abs(this.data.v);\r\n if (this.data.v > 0) {\r\n this.data.c = Math.ceil(this.data.c + this.data.v);\r\n } else {\r\n this.data.c = Math.floor(this.data.c + this.data.v);\r\n }\r\n this.updateScrollDirection(this.data.v > 0);\r\n if (absVelocity < this.velocityThreshold) {\r\n this.stopScroll();\r\n this.onScrollStop();\r\n \r\n } else {\r\n this.isProg = true;\r\n if (this.previousCurrent != this.data.c) {\r\n this.previousCurrent = this.data.c\r\n this.onCalcUpdate();\r\n }\r\n }\r\n }\r\n }\r\n\r\n \r\n\r\n public onWheel(e: WheelEvent) {\r\n e.preventDefault()\r\n this.plusDelta = e.deltaY;\r\n if (this.plusDelta === 0) return;\r\n if (this.data.d === 0) {\r\n this.onScrollStart();\r\n }\r\n let scrollDirection = Math.sign(this.plusDelta);\r\n if ((this.data.t === 0 && scrollDirection < 0) || (this.data.t === this.data.bS && scrollDirection > 0)) return;\r\n this.data.d += this.plusDelta;\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 = this.scrollContainer?.scrollTop ?? document.documentElement.scrollTop - this.data.c\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{\r\n private sC: number = 0.1\r\n private sA: number = 0.25\r\n\r\n public get speed() {\r\n return this.sC\r\n }\r\n public get speedAccelerate() {\r\n return this.sA\r\n }\r\n\r\n public set speedAccelerate(speed: number) {\r\n this.sA = speed\r\n }\r\n public set speed(speed: number) {\r\n this.sC = speed\r\n }\r\n\r\n \r\n}","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\ninterface ISplitOptions {\r\n line?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n word?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n char?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n charLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n charWord?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n wordLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n}\r\n\r\nexport class StringSplit extends StringBase {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'split';\r\n }\r\n\r\n onStart(): void {}\r\n onResize(): void {\r\n document.querySelectorAll(`[string=\"split\"].-splited`).forEach((element) => {\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n if (!element.classList.contains('-splited')) {\r\n element.classList.add('-splited');\r\n element.setAttribute('string-split-original', element.innerHTML);\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n \r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n }\r\n }\r\n\r\n private parseSplitOptions(attributeValue: string | null): ISplitOptions {\r\n const options: ISplitOptions = {\r\n line: [],\r\n word: [],\r\n char: [],\r\n charLine: [],\r\n charWord: [],\r\n wordLine: [],\r\n };\r\n\r\n if (attributeValue) {\r\n const parts = attributeValue.split('|');\r\n\r\n parts.forEach((part) => {\r\n const match = part.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\r\n\r\n if (match) {\r\n const prefix = match[1] || '';\r\n const option = match[2];\r\n const params = match[4] ? match[4].split(',') : [];\r\n switch (prefix + option) {\r\n case 'char-line':\r\n (options.charLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char-word':\r\n (options.charWord as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word-line':\r\n (options.wordLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'line':\r\n (options.line as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word':\r\n (options.word as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char':\r\n (options.char as any[]).push(this.parseParam(params));\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private parseParam(params: string[]): { align: string; random?: { min: number; max: number }; abs?: boolean } {\r\n const result: { align: string; random?: { min: number; max: number }; abs?: boolean } = { align: 'start' };\r\n\r\n params.forEach((param) => {\r\n if (param === 'abs') {\r\n result.abs = true;\r\n } else if (param.startsWith('random')) {\r\n const match = param.match(/random\\((\\d+),(\\d+)\\)/);\r\n if (match) {\r\n result.random = { min: parseInt(match[1]), max: parseInt(match[2]) };\r\n result.align = 'random';\r\n } else {\r\n result.align = 'random';\r\n }\r\n } else if (['start', 'center', 'end'].includes(param)) {\r\n result.align = param;\r\n } else {\r\n result.align = 'start';\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public split(options: ISplitOptions, elementRoot: any): any {\r\n //let text = elementRoot.innerHTML;\r\n let text = elementRoot.getAttribute('string-split-original');\r\n if (text.length === 0) return '';\r\n\r\n text = this.decodeHtmlEntity(text);\r\n \r\n const element = document.createElement('span');\r\n const words = text.split(/\\s+/);\r\n let globalCharIndex = 0;\r\n let globalWordIndex = 0;\r\n const totalChars = text.replace(/\\s/g, '').length;\r\n\r\n const tempSpan = document.createElement('span');\r\n const compStyles = window.getComputedStyle(elementRoot);\r\n\r\n tempSpan.style.fontFamily = compStyles.fontFamily;\r\n tempSpan.style.fontSize = compStyles.fontSize;\r\n tempSpan.style.letterSpacing = compStyles.letterSpacing;\r\n tempSpan.style.lineHeight = compStyles.lineHeight;\r\n tempSpan.style.fontWeight = compStyles.fontWeight;\r\n tempSpan.classList.add('-s-char');\r\n document.body.appendChild(tempSpan);\r\n\r\n let virtualLines: any[] = [];\r\n let virtualLine: any[] = [];\r\n let currentLineWidth = 0;\r\n words.forEach((word: any, wordIndex: any) => {\r\n tempSpan.textContent = word;\r\n if (word.length > 0) {\r\n tempSpan.textContent += '\\u00a0';\r\n }\r\n\r\n const wordWidth = tempSpan.offsetWidth;\r\n\r\n const virtualWordSpan = {\r\n text: word,\r\n width: wordWidth,\r\n chars: new Array<any>(),\r\n };\r\n const chars = Array.from(word);\r\n chars.forEach((char, charIndex) => {\r\n const virtualCharSpan = {\r\n text: char,\r\n };\r\n\r\n virtualWordSpan.chars.push(virtualCharSpan);\r\n });\r\n if (currentLineWidth + wordWidth > elementRoot.offsetWidth) {\r\n virtualLines.push(virtualLine);\r\n virtualLine = [];\r\n currentLineWidth = 0;\r\n globalCharIndex += virtualLine.length;\r\n }\r\n virtualLine.push(virtualWordSpan);\r\n currentLineWidth += wordWidth;\r\n });\r\n\r\n virtualLines.push(virtualLine);\r\n\r\n let hasLineOptions = false;\r\n if (options.line != null) {\r\n if (options.line.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.wordLine != null) {\r\n if (options.wordLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.charLine != null) {\r\n if (options.charLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n\r\n let addedWordsCount = 0;\r\n if (hasLineOptions) {\r\n // for (let i = 0; i < virtualLines.length; i++) {\r\n // addedWordsCount += virtualLines[i].length;\r\n // }\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n this.appendVirtualLineToDOM(\r\n i,\r\n virtualLines.length,\r\n words.length,\r\n element,\r\n virtualLines[i],\r\n options,\r\n globalCharIndex,\r\n totalChars,\r\n addedWordsCount\r\n );\r\n addedWordsCount += virtualLines[i].length;\r\n }\r\n } else {\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n virtualLines[i].forEach((virtualWordSpan: any, wordIndex: any) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n if ((options.char!=null && options.char?.length > 0) || (options.charWord != null && options.charWord?.length > 0)) {\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n });\r\n } else {\r\n wordSpan.textContent = virtualWordSpan.text;\r\n }\r\n \r\n\r\n this.applyOptions(wordSpan, options.word, globalWordIndex, 'word', wordIndex, words.length);\r\n if (virtualWordSpan.chars.length > 0) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n element.appendChild(wordSpan);\r\n globalWordIndex++;\r\n }\r\n });\r\n }\r\n }\r\n\r\n document.body.removeChild(tempSpan);\r\n return { html: element.innerHTML };\r\n }\r\n\r\n // TODO: remove line - char,word\r\n private appendVirtualLineToDOM(\r\n lineIndex: number,\r\n length: number,\r\n totalWords: number,\r\n element: HTMLSpanElement,\r\n virtualLine: any[],\r\n options: ISplitOptions,\r\n globalCharIndex: number,\r\n totalChars: number,\r\n addedWordsCount: number\r\n ) {\r\n const lineSpan = document.createElement('span');\r\n lineSpan.classList.add('-s-line');\r\n\r\n this.applyOptions(lineSpan, options.line, lineIndex, 'line', 0, length);\r\n\r\n let lineCharIndex = 0;\r\n let globalWordIndex = 0;\r\n let totalLineChars = 0;\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n totalLineChars += virtualWordSpan.text.length;\r\n });\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charLine, lineCharIndex, 'char-line', charIndex, totalLineChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n lineCharIndex++;\r\n });\r\n\r\n this.applyOptions(\r\n wordSpan,\r\n options.word,\r\n addedWordsCount + globalWordIndex,\r\n 'word',\r\n addedWordsCount + globalWordIndex,\r\n totalWords - 1\r\n );\r\n this.applyOptions(wordSpan, options.wordLine, wordIndex, 'word-line', wordIndex, virtualLine.length);\r\n\r\n if (wordIndex < virtualLine.length - 1) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n // +'\\u00a0';\r\n\r\n lineSpan.appendChild(wordSpan);\r\n // if (wordIndex < virtualLine.length - 1) {\r\n // lineSpan.appendChild(this.createSpaceSpan());\r\n // }\r\n globalWordIndex++;\r\n }\r\n });\r\n\r\n element.appendChild(lineSpan);\r\n }\r\n\r\n private applyOptions(\r\n span: HTMLSpanElement,\r\n optionArray: any[] | undefined,\r\n globalIndex: number,\r\n type: string,\r\n localIndex: number,\r\n parentLength: number\r\n ) {\r\n if (optionArray) {\r\n optionArray.forEach((option, optionIndex) => {\r\n let index = this.calculateIndex(option, globalIndex, localIndex, parentLength);\r\n\r\n const variableName = this.generateVariableName(type, option, optionIndex);\r\n span.style.setProperty(variableName, String(index));\r\n });\r\n }\r\n }\r\n\r\n private createSpaceSpan(): HTMLSpanElement {\r\n const spaceSpan = document.createElement('span');\r\n spaceSpan.innerHTML = '\\u00a0';\r\n return spaceSpan;\r\n }\r\n\r\n private decodeHtmlEntity(str: string) {\r\n return str.replace(/&amp;/g, '&');\r\n }\r\n\r\n private calculateIndex(\r\n options: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n globalIndex: number,\r\n localIndex: number,\r\n parentLength: number\r\n ): number {\r\n let index = globalIndex;\r\n if (options.align === 'random') {\r\n if (options.random === undefined) {\r\n options.random = { min: 0, max: parentLength };\r\n }\r\n const min = options.random.min || 0;\r\n const max = options.random.max || parentLength;\r\n index = Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n if (options.align === 'end') {\r\n index = parentLength - index - 1;\r\n } else if (options.align === 'center') {\r\n index = index - Math.floor(parentLength / 2);\r\n }\r\n\r\n if (options.abs) {\r\n index = Math.abs(index);\r\n }\r\n return index;\r\n }\r\n\r\n private generateVariableName(\r\n type: string,\r\n option: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n index: number\r\n ): string {\r\n let variableName = `--${type}`;\r\n if (option.align) {\r\n variableName += `-${option.align}`;\r\n }\r\n return variableName;\r\n }\r\n}\r\n","export class StringFPS {\r\n private isAnimationStarted: boolean = false;\r\n private fpsInterval: 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.requestAnimationId = requestAnimationFrame(() => this.animate());\r\n this.onFrameCallback();\r\n };\r\n } else {\r\n 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 this.requestAnimationId = requestAnimationFrame(() => this.animate());\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: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.right = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-fps', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-fps]::after {\r\n content: 'FPS: ' attr(fps);\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n this.intervalId = setInterval(() => {\r\n this.displayElement.setAttribute('fps', `${this.callCount}`);\r\n this.callCount = 0;\r\n }, 1000);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n clearInterval(this.intervalId);\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}","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 {\r\n three: any = null;\r\n\r\n t: number = 0;\r\n c: number = 0;\r\n d: number = 0;\r\n v: number = 0;\r\n dV: number = 0;\r\n sDB: boolean = false;\r\n\r\n bS: number = 0;\r\n cF: number = 1;\r\n wS: number = 0;\r\n hnwS: number = 0;\r\n\r\n psW: number = 0;\r\n psH: number = 0;\r\n\r\n cL: any = {x:0,y:0}\r\n\r\n scsW: number = 1;\r\n scsH: number = 1;\r\n sD: 'vertical' | 'horizontal' = 'vertical';\r\n sC: any;\r\n sM: 'smooth' | 'disable' | 'default' = 'smooth';\r\n}\r\n","export class StringEvent{\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}","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 { StringSVG } from './Media/Modules/StringSVG';\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 { StringDefaultSettings } from './Utils/StringDefaultSettings';\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 private _defaultSettings: StringDefaultSettings = new StringDefaultSettings()\r\n\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 private fps: number = 0\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 Array.from(this.objects.values()).forEach((object) => {\r\n this.setupObject(object.el, object);\r\n });\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 document.addEventListener(\"visibilitychange\", () => {\r\n if (document.hidden) {\r\n this.loop.stop()\r\n } else {\r\n this.loop.start(this.fps)\r\n }\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 \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 defaultSettings: this._defaultSettings,\r\n parser: this._parser,\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.fps = fps\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\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 const attributes = this.getAllAttributes(el);\r\n if (object?.getProperty<IntersectionObserver>('observer-progress') != null) {\r\n object?.getProperty<IntersectionObserver>('observer-progress').disconnect();\r\n }\r\n if (object?.getProperty<IntersectionObserver>('observer-inview') != null) {\r\n object?.getProperty<IntersectionObserver>('observer-inview').disconnect();\r\n }\r\n //object.lerp = attributes[\"string-lerp\"] ?? this._defaultSettings.stringLerp;\r\n //object.weight = parseFloat(attributes[\"string-weight\"] ?? \"0.0\");\r\n //object.calculatePositions(windowSize);\r\n\r\n object.id = attributes[\"string-id\"] ?? `string-${this.globalId}`;\r\n object.keys = (attributes[\"string\"] ?? \"\").split('|');\r\n object.key = attributes[\"string-key\"] ?? this._defaultSettings.stringKey;\r\n el.setAttribute(`string-id`, object.id);\r\n\r\n\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 object.setProperty<boolean>('active', true)\r\n object.setProperty<number>('offset-start', 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.setProperty<number>('offset-end', 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 object.setProperty<number>('inview-top', 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 object.setProperty<number>('inview-bottom', 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 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.setProperty<number>('start', startPos);\r\n object.setProperty<number>('end', startPos + (this.data.sD == 'vertical' ? rH : rW));\r\n object.setProperty<number>('size', this.data.sD == 'vertical' ? rH : rW)\r\n object.setProperty<boolean>('repeat', attributes[\"string-repeat\"] !== undefined);\r\n object.setProperty<boolean>('self-disable', attributes[\"string-self-disable\"] !== undefined);\r\n object.setProperty<boolean>('abs', attributes[\"string-abs\"] !== undefined);\r\n object.setProperty<number>('half-width', rW / 2);\r\n object.setProperty<number>('half-height', rH / 2);\r\n\r\n\r\n\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 this.modules.forEach((module: IStringModule) => {\r\n if (module.tryConnect(object)) {\r\n module.initObject(this.globalId, object, el, attributes);\r\n module.connect(object);\r\n }\r\n });\r\n\r\n let observerStart = object.getProperty<number>('offset-start');\r\n let observerEnd = object.getProperty<number>('offset-end');\r\n\r\n let callbackProgress = (entries: any) => {\r\n entries.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`activate_object_${object.id}`, true);\r\n object.enter();\r\n } else {\r\n this.events.emit(`activate_object_${object.id}`, false);\r\n object.leave();\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 \r\n let optionsInview = {\r\n root: null,\r\n rootMargin: `${observerStart + object.getProperty<number>('inview-top')}px 0px ${observerEnd + object.getProperty<number>('inview-bottom')}px 0px`,\r\n threshold: 0.001,\r\n };\r\n \r\n\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n obProgress.observe(el);\r\n obInview.observe(el);\r\n object.setProperty<IntersectionObserver>('observer-progress', obProgress);\r\n object.setProperty<IntersectionObserver>('observer-inview', obInview);\r\n }\r\n\r\n private 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 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?.getProperty<IntersectionObserver>('observer-progress') != null) {\r\n removedObject?.getProperty<IntersectionObserver>('observer-progress').disconnect();\r\n }\r\n if (removedObject?.getProperty<IntersectionObserver>('observer-inview') != null) {\r\n removedObject?.getProperty<IntersectionObserver>('observer-inview').disconnect();\r\n }\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, StringSVG, 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","StringDefaultSettings","stringOffsetStart","stringOffsetEnd","stringEnterEl","stringExitEl","stringEnterVp","stringExitVp","stringInviewTop","stringInviewBottom","stringKey","stringStrength","stringRadius","stringLerp","stringParallaxBias","stringParallax","StringParser","parseSingle","v","element","wH","baseRem","pV","isNegative","startsWith","slice","offsetHeight","endsWith","parseFloat","StringModule","type","_type","constructor","visitor","settings","parser","defaultSettings","objectsMap","Map","objects","Array","htmlKey","data","lerp","attribute","boundingClientRect","position","virtualCursor","events","loop","initObject","globalId","object","el","attributes","onScrollStart","onScrollStop","onChangeDirection","destructor","onChangeScrollParams","tryConnect","keys","includes","connect","onConnect","enterObject","id","has","set","push","leaveObject","delete","index","indexOf","splice","onStart","onUpdate","onResize","onRebuild","onScroll","onMouseMove","e","onWheel","onChangeDevice","onChangeScrollDirection","onMutationObserver","added","removed","StringBase","super","oldLerp","StringLazy","isStartLoaded","imageLoadingCount","document","querySelectorAll","forEach","load","getImageSize","getAttribute","classList","add","src","onLoad","removeEventListener","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","tS","bS","lS","rS","StringProgress","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","setProperty","calculatePositions","wS","setUpObject","onEnter","progress","Math","min","max","c","getProperty","applyProgress","progressStr","toString","connects","length","windowSize","StringSVG","startSrc","endSrc","startSVG","endSVG","all","loadSVG","svgStart","querySelector","svgEnd","pointsStart","pointsEnd","pathElement","createElementNS","svgContainer","appendChild","innerHTML","morphPath","fetch","text","DOMParser","parseFromString","error","interpolatedPath","interpolatePaths","startD","endD","startCommands","parsePathCommands","endCommands","interpolatedD","i","startParts","match","endParts","j","startVal","endVal","isNaN","toFixed","d","remapLerp","inMin","inMax","outMin","outMax","StringCursor","oldX","oldY","enterObjectsMap","enterObjects","overCount","cursor","cursorContent","mouseLerp","rawLerpValue","undefined","targetQuery","requestAnimationFrame","rect","getBoundingClientRect","elementX","x","left","elementY","y","top","dx","dy","lerpX","lerpY","offsetX","calculateOffset","offsetY","setMouseCoordinates","abs","cursorData","smoothX","smoothY","timeoutId","onMouseEnterEventBind","onMouseLeaveEventBind","remove","clearTimeout","onLeave","alignment","mousePos","size","StringMagnetic","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","sqrt","radius","strength","magneticX","magneticY","StringLerpCalc","current","target","amt","StringVirtualCursor","targetX","targetY","_x","_y","_lerpX","_lerpY","_lF","pow","StringObject","properties","modules","enter","leave","show","hide","DeviceType","StringResponsiveQueryDevice","config","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","thumbSize","updateThumb","contentHeight","visibleHeight","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","body","userSelect","scrollTimeout","StringAnchor","p","split","parseOrig","transformOrigin","part","trim","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","onUpdateMobileEvent","onUpdateEvent","calcExpanderFactor","isDirectionUp","isConditionMet","innerWidth","resetState","sDB","StringLerp","StringParallax","setupParallax","onScrollDesktopEvent","onScrollMobileEvent","onScrollEvent","parallaxPosition","StringScroll","isProg","isParallaxEnabled","name","vT","onCalcUpdate","scrollContainer","_scrollDirection","scrollDirection","StringScrollDefault","delta","speedAccelerate","scrollTop","plusDelta","StringScrollDisable","preventDefault","CLASS_NAMES","StringScrollSmooth","isScrollbarManipulation","isBottomScrollDirection","velocityThreshold","previousCurrent","updateScrollDirection","newDirection","toggle","stopScroll","speed","absVelocity","ceil","sign","StringTypeSettings","sC","sA","StringSplit","splitOptions","parseSplitOptions","html","contains","attributeValue","options","line","word","char","charLine","charWord","wordLine","prefix","option","params","parseParam","result","align","param","parseInt","elementRoot","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","start","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","createDisplayElement","displayElement","right","intervalId","setInterval","clearInterval","StringLerpTracker","StringPositionTracker","dirSymbol","StringAttribute","n","StringBoundingClientRect","StringData","three","cF","hnwS","cL","scsW","scsH","StringEvent","eventsByKey","on","event","updateAllEvents","off","ea","filter","h","values","listOfEvents","StringPosition","container","br","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","_defaultSettings","connectQueue","_parser","isStarted","eventMap","onWheelBind","onWheelEvent","onMouseMoveBind","onMouseMoveEvent","ResizeObserver","setupObject","observe","hidden","getInstance","reuse","find","use","objectClass","passive","initMutationObserver","addObject","connectTargetId","connectTargetObject","destroy","eventName","setupSettings","getAllAttributes","disconnect","r","rW","rH","startPos","connectItems","item","connectItem","observerStart","observerEnd","optionsProgress","rootMargin","threshold","optionsInview","obProgress","IntersectionObserver","entries","isIntersecting","obInview","attr","removeObject","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,kbCLvD,MAAMC,EAAb,cACI,KAAAC,kBAA4B,KAC5B,KAAAC,gBAA0B,KAE1B,KAAAC,cAAwB,MACxB,KAAAC,aAAuB,SACvB,KAAAC,cAAwB,SACxB,KAAAC,aAAuB,MAEvB,KAAAC,gBAA0B,KAC1B,KAAAC,mBAA6B,KAE7B,KAAAC,UAAoB,aAEpB,KAAAC,eAAyB,GACzB,KAAAC,aAAuB,IACvB,KAAAC,WAAqB,GACrB,KAAAC,mBAA6B,EAC7B,KAAAC,eAAyB,EAC3B,ECnBK,MAAMC,EACJ,WAAAC,CAAYC,EAAWC,EAAcC,EAASC,GACnD,IAIIC,EAJAC,EAAaL,EAAEM,WAAW,KAc9B,OAbID,IACFL,EAAIA,EAAEO,MAAM,IAGJ,eAANP,EACFI,EAAKH,EAAQO,aACJR,EAAES,SAAS,MACpBL,EAAKM,WAAWV,GACPA,EAAES,SAAS,KACpBL,EAAKM,WAAWV,GAAKE,EAAK,IACjBF,EAAES,SAAS,SACpBL,EAAKM,WAAWV,GAAKG,GAEhBE,GAAcD,EAAKA,CAC5B,ECJK,MAAMO,EAgBX,QAAWC,GACT,OAAO9C,KAAK+C,KACd,CACA,WAAAC,CAAYC,EAAcC,EAAgB,MAV1C,KAAAA,SAAgB,KAChB,KAAAC,OAAS,IAAInB,EACH,KAAAoB,gBAAyC,IAAInC,EAC7C,KAAAoC,WAAwC,IAAIC,IAC5C,KAAAC,QAA+B,IAAIC,MACnC,KAAAC,QAAkB,GAClB,KAAAV,MAAgB,EAKxB/C,KAAK0D,KAAOT,EAAQS,KACpB1D,KAAK2D,KAAOV,EAAQU,KACpB3D,KAAK4D,UAAYX,EAAQW,UACzB5D,KAAK6D,mBAAqBZ,EAAQY,mBAClC7D,KAAK8D,SAAWb,EAAQa,SACxB9D,KAAK+D,cAAgBd,EAAQc,cAC7B/D,KAAKgE,OAASf,EAAQe,OACtBhE,KAAKiE,KAAOhB,EAAQgB,KACpBjE,KAAKkD,SAAWA,EAChBlD,KAAKoD,gBAAkBH,EAAQG,gBAC/BpD,KAAKmD,OAASF,EAAQE,MACxB,CACA,UAAAe,CAAWC,EAAkBC,EAAsBC,EAAiBC,GAEpE,CACA,aAAAC,GAAwB,CACxB,YAAAC,GAAuB,CACvB,iBAAAC,GAA4B,CAE5B,UAAAC,GACE1E,KAAKuD,QAAU,IAAIC,MACnBxD,KAAKqD,WAAa,IAAIC,GACxB,CAEA,oBAAAqB,GAA8B,CAE9B,UAAAC,CAAWR,GACT,OAAOA,EAAOS,KAAKC,SAAS9E,KAAKyD,QACnC,CACA,OAAAsB,CAAQX,GACNA,EAAOW,QAAQ/E,MACfA,KAAKgF,UAAUZ,EACjB,CACA,WAAAa,CAAYC,EAAYd,GACjBpE,KAAKqD,WAAW8B,IAAID,KACrBlF,KAAKqD,WAAW+B,IAAIF,EAAId,GACxBpE,KAAKuD,QAAQ8B,KAAKjB,GAExB,CAEA,WAAAkB,CAAYJ,GACR,MAAMd,EAASpE,KAAKqD,WAAW7C,IAAI0E,GACnC,GAAId,EAAQ,CACRpE,KAAKqD,WAAWkC,OAAOL,GACvB,MAAMM,EAAQxF,KAAKuD,QAAQkC,QAAQrB,IACpB,IAAXoB,GACAxF,KAAKuD,QAAQmC,OAAOF,EAAO,E,CAGvC,CAGA,OAAAG,GAAiB,CACjB,QAAAC,CAAUlC,GAAyB,CACnC,QAAAmC,GAAkB,CAClB,SAAAb,CAAUZ,GAA6B,CACvC,SAAA0B,GAAmB,CACnB,QAAAC,CAASrC,GAAyB,CAClC,WAAAsC,CAAYC,GAAsB,CAClC,OAAAC,CAAQD,GAAsB,CAC9B,cAAAE,GAAwB,CACxB,uBAAAC,GAAiC,CACjC,kBAAAC,CAAmBC,EAAiBC,GAA0B,EC3FzD,MAAMC,UAAmB3D,EAE9B,WAAAG,CAAYC,EAAcC,EAAgB,MACxCuD,MAAMxD,EAASC,GAFT,KAAAwD,QAAU,CAGlB,CAEA,UAAAxC,CAAWC,EAAkBC,EAAsBC,EAAiBC,GAEpE,ECRK,MAAMqC,UAAmBH,EAI9B,WAAAxD,CAAYC,GACVwD,MAAMxD,GAJA,KAAA2D,eAAyB,EACzB,KAAAC,kBAA4B,EAIlC7G,KAAKyD,QAAU,MACjB,CACA,OAAAkC,GACoBmB,SAASC,iBAAiB,oBAClCC,SAAS7E,IACjBnC,KAAKiH,KAAK9E,EAAQ,IAEpBnC,KAAK4G,eAAgB,CACvB,CACA,SAAA5B,CAAUZ,GAER,GADApE,KAAK6G,oBACD7G,KAAK4G,cAAe,CACtB,IAAIzE,EAAeiC,EAAOC,GAC1BrE,KAAKiH,KAAK9E,E,CAEd,CACQ,IAAA8E,CAAK9E,GACXnC,KAAKkH,aAAa/E,EAASA,EAAQgF,aAAa,gBAChDhF,EAAQiF,UAAUC,IAAI,YACtBlF,EAAQmF,IAAMnF,EAAQgF,aAAa,eACnC,MAAMI,EAAS,KACbpF,EAAQiF,UAAUC,IAAI,WACtBlF,EAAQqF,oBAAoB,OAAQD,EAAO,EAE7CpF,EAAQsF,iBAAiB,OAAQF,EACnC,CACQ,YAAAL,CAAa/E,EAAsBuF,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,KACX/F,EAAQuG,MAAMC,YAAc,GAAGH,EAAII,WAAWJ,EAAIK,SAClDjB,EAAQ,CAAEgB,MAAOJ,EAAII,MAAOC,OAAQL,EAAIK,SAExCC,IAAIC,gBAAgBP,EAAIlB,KACxBtH,KAAK6G,oBACD7G,KAAK6G,mBAAqB,IAC5B7G,KAAKgE,OAAOgF,KAAK,mBAAoB,MACrChJ,KAAK6G,kBAAoB,E,EAG7B2B,EAAIS,QAAU,KACZH,IAAIC,gBAAgBP,EAAIlB,KACxBtH,KAAK6G,oBACLgB,EAAO,IAAIqB,MAAM,wBAAwB,EAE3CV,EAAIlB,IAAMwB,IAAIK,gBAAgBb,E,MAE9BT,EAAO,IAAIqB,MAAM,wB,EAGrBpB,EAAImB,QAAU,KACZpB,EAAO,IAAIqB,MAAM,iBAAiB,EAEpCpB,EAAIsB,iBAAiB,QAAS,YAC9BtB,EAAIuB,MAAM,GAEd,ECrEK,MAAMC,UAAsBzG,EAGjC,WAAAG,CAAYC,EAAcC,EAAgB,MACxCuD,MAAMxD,GAHR,KAAAsG,eAAyB,EAIvBvJ,KAAK+C,MAAQ,EAEG,MAAZG,GACsB,MAApBA,EAASsG,UACXxJ,KAAKuJ,eAAiBrG,EAASsG,QAGrC,CACA,OAAA7D,GACE8D,YAAW,KACW3C,SAAS4C,gBACjBtC,UAAUC,IAAI,UAAU,GACnCrH,KAAKuJ,eAEV,ECpBK,MAAMI,UAA4B9G,EACvC,WAAAG,CAAYC,GACVwD,MAAMxD,GACNjD,KAAKyD,QAAU,UACjB,CAEA,SAAAuB,CAAUZ,GACR,MAAMwF,EAAexF,EAAOC,GACtBwF,EAAW7J,KAAK4D,UAAUkG,QAAQF,EAAc,aAAc,IAC9DG,EAA0E,MAAhE/J,KAAK4D,UAAUkG,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,EAAatC,IAAMuC,EACnBD,EAAaO,OAAQ,EACrBP,EAAanC,iBAAiB,kBAAkB,KAE/B,IADiE,MAAhEzH,KAAK4D,UAAUkG,QAAQF,EAAc,iBAAkB,QAErE5J,KAAKoK,QAAQhG,EAAQwF,E,GAEtB,CAAES,MAAM,IACXT,EAAa3C,QAEbqD,QAAQC,KACN,8EACAnG,EAAOC,GAGb,CAEQ,OAAA+F,CAAQhG,EAAsBjC,GACpCA,EAAQqI,OAAOC,OAAOC,IACpBJ,QAAQC,KAAK,mBAAoBG,EAAI,IACpCC,MAAK,KACNxI,EAAQ+H,aAAa,iBAAkB,GAAG,GAE9C,ECpCF,MAAMU,EAAK,MACLC,EAAK,SACLC,EAAK,OACLC,EAAK,QAEJ,MAAMC,UAAuBxE,EAElC,WAAAxD,CAAYC,GACVwD,MAAMxD,GACNjD,KAAKyD,QAAU,UACjB,CAEA,UAAAS,CAAWC,EAAkBC,EAAsBC,EAAiBC,G,YAClEmC,MAAMvC,WAAWC,EAAUC,EAAQC,EAAIC,GAEvC,IAAI2G,EAAoD,QAA7B,EAAA3G,EAAW,0BAAkB,QAAItE,KAAKoD,gBAAgBhC,cAC7E8J,EAAmD,QAA7B,EAAA5G,EAAW,0BAAkB,QAAItE,KAAKoD,gBAAgB9B,cAC5E6J,EAAiD,QAA5B,EAAA7G,EAAW,yBAAiB,QAAItE,KAAKoD,gBAAgB/B,aAC1E+J,EAAgD,QAA5B,EAAA9G,EAAW,yBAAiB,QAAItE,KAAKoD,gBAAgB7B,aAE7E6C,EAAOiH,YAAY,gBAAiBJ,GACpC7G,EAAOiH,YAAY,eAAgBH,GACnC9G,EAAOiH,YAAY,cAAeF,GAClC/G,EAAOiH,YAAY,aAAcD,GAEjCpL,KAAKsL,mBAAmBlH,EAAQpE,KAAK0D,KAAK6H,GAG5C,CAEA,QAAAxF,CAASrC,GACP+C,MAAMV,SAASrC,GACf1D,KAAKuD,QAAQyD,SAAS5C,IACpBpE,KAAKwL,YAAYpH,EAAO,GAE5B,CAEA,SAAAY,CAAUZ,GACRqC,MAAMzB,UAAUZ,GAChBA,EAAOqH,QAAU,KACfzL,KAAKwL,YAAYpH,EAAO,CAE5B,CAEQ,WAAAoH,CAAYpH,GAClB,MAAMsH,EAAWC,KAAKC,IAAI,EAAGD,KAAKE,IAAI,GAAI7L,KAAK0D,KAAKoI,EAAI1H,EAAO2H,YAAoB,mBAAqB3H,EAAO2H,YAAoB,yBAE/H3H,EAAO2H,YAAoB,cAAgBL,IAC3CtH,EAAOiH,YAAoB,WAAYK,GACvC1L,KAAKgM,cAAc5H,EAAQsH,GAEjC,CAEQ,aAAAM,CAAc5H,EAAsBsH,GAC1C,MAAMO,EAAcP,EAASQ,WAC7BlM,KAAKgE,OAAOgF,KAAK,YAAY5E,EAAOc,KAAMwG,GAC1CtH,EAAOC,GAAGqE,MAAM2C,YAAYjH,EAAOjE,IAAK8L,GACpC7H,EAAO+H,SAASC,OAAS,GACzBhI,EAAO+H,SAASnF,SAAS7E,IACrBA,EAAQuG,MAAM2C,YAAYjH,EAAOjE,IAAK8L,EAAY,GAG5D,CAEQ,kBAAAX,CAAmBlH,EAAsBiI,GAC1CjI,EAAO2H,YAAY,mBAAqBnB,GAAMxG,EAAO2H,YAAY,kBAAoBnB,GAAQxG,EAAO2H,YAAY,mBAAqBjB,GAAM1G,EAAO2H,YAAY,kBAAoBjB,EACrL1G,EAAOiH,YAAoB,iBAAkBjH,EAAO2H,YAAoB,SAAW3H,EAAO2H,YAAoB,iBACpG3H,EAAO2H,YAAY,mBAAqBnB,GAAMxG,EAAO2H,YAAY,kBAAoBlB,GAAQzG,EAAO2H,YAAY,mBAAqBjB,GAAM1G,EAAO2H,YAAY,kBAAoBhB,EAC5L3G,EAAOiH,YAAoB,iBAAkBjH,EAAO2H,YAAoB,SAAWM,EAAajI,EAAO2H,YAAoB,iBACjH3H,EAAO2H,YAAY,mBAAqBlB,GAAMzG,EAAO2H,YAAY,kBAAoBnB,GAAQxG,EAAO2H,YAAY,mBAAqBhB,GAAM3G,EAAO2H,YAAY,kBAAoBjB,EAC5L1G,EAAOiH,YAAoB,iBAAkBjH,EAAO2H,YAAoB,SAAW3H,EAAO2H,YAAoB,QAAU3H,EAAO2H,YAAoB,kBACzI3H,EAAO2H,YAAY,mBAAqBlB,GAAMzG,EAAO2H,YAAY,kBAAoBlB,GAAQzG,EAAO2H,YAAY,mBAAqBhB,GAAM3G,EAAO2H,YAAY,kBAAoBhB,IAC5L3G,EAAOiH,YAAoB,iBAAkBjH,EAAO2H,YAAoB,SAAWM,EAAajI,EAAO2H,YAAoB,gBAAkB3H,EAAO2H,YAAoB,SAGrK3H,EAAO2H,YAAY,iBAAmBnB,GAAMxG,EAAO2H,YAAY,gBAAkBnB,GAAQxG,EAAO2H,YAAY,iBAAmBjB,GAAM1G,EAAO2H,YAAY,gBAAkBjB,EAC7K1G,EAAOiH,YAAoB,eAAejH,EAAO2H,YAAoB,SAAW3H,EAAO2H,YAAoB,eACjG3H,EAAO2H,YAAY,iBAAmBnB,GAAMxG,EAAO2H,YAAY,gBAAkBlB,GAAQzG,EAAO2H,YAAY,iBAAmBjB,GAAM1G,EAAO2H,YAAY,gBAAkBhB,EACpL3G,EAAOiH,YAAoB,eAAejH,EAAO2H,YAAoB,SAAWM,EAAajI,EAAO2H,YAAoB,eAC9G3H,EAAO2H,YAAY,iBAAmBlB,GAAMzG,EAAO2H,YAAY,gBAAkBnB,GAAQxG,EAAO2H,YAAY,iBAAmBhB,GAAM3G,EAAO2H,YAAY,gBAAkBjB,EACpL1G,EAAOiH,YAAoB,eAAejH,EAAO2H,YAAoB,SAAW3H,EAAO2H,YAAoB,QAAU3H,EAAO2H,YAAoB,gBACtI3H,EAAO2H,YAAY,iBAAmBlB,GAAMzG,EAAO2H,YAAY,gBAAkBlB,GAAQzG,EAAO2H,YAAY,iBAAmBhB,GAAM3G,EAAO2H,YAAY,gBAAkBhB,IACpL3G,EAAOiH,YAAoB,eAAejH,EAAO2H,YAAoB,SAAWM,EAAajI,EAAO2H,YAAoB,QAAU3H,EAAO2H,YAAoB,eAE/J3H,EAAOiH,YAAoB,sBAAuBjH,EAAO2H,YAAoB,gBAAkB3H,EAAO2H,YAAoB,kBAE5H,ECtFK,MAAMO,UAAkBtB,EAE7B,WAAAhI,CAAYC,GACVwD,MAAMxD,GACNjD,KAAKyD,QAAU,WACjB,CAEA,gBAAMS,CAAWC,EAAkBC,EAAsBC,EAAiBC,G,MACxE,MAAMiI,EAAWjI,EAAW,oBACtBkI,EAASlI,EAAW,mBAEnBmI,EAAUC,SAAqB/E,QAAQgF,IAAI,CAChD3M,KAAK4M,QAAQL,GACbvM,KAAK4M,QAAQJ,KAGf,IAAIK,EAAWJ,EAASK,cAAc,QAClCC,EAASL,EAAOI,cAAc,QAE9BE,EAAcH,EAAS1F,aAAa,MAAQ,GAC5C8F,EAAYF,EAAO5F,aAAa,MAAQ,GAE5C/C,EAAOiH,YAAiB,eAAgB2B,GACxC5I,EAAOiH,YAAiB,aAAc4B,GAEtC,IAAIC,EAAcpG,SAASqG,gBAAgB,6BAA8B,QACzED,EAAYhD,aAAa,IAAK8C,GAC9BE,EAAYhD,aAAa,OAAiC,QAAzB,EAAA5F,EAAW,sBAAc,QAAI,SAE9D,MAAM8I,EAAetG,SAASqG,gBAAgB,6BAA8B,OAC5EC,EAAalD,aAAa,UAAWuC,EAAStF,aAAa,YAAc,eACzEiG,EAAaC,YAAYH,GACzB7I,EAAGiJ,UAAY,GACfjJ,EAAGgJ,YAAYD,GAEfhJ,EAAOiH,YAAY,WAAY6B,GAC/BzG,MAAMvC,WAAWC,EAAUC,EAAQC,EAAIC,EACzC,CAEA,QAAAyB,CAASrC,GACP+C,MAAMV,SAASrC,GACf1D,KAAKuD,QAAQyD,SAAS5C,IACpBpE,KAAKuN,UAAUnJ,EAAQA,EAAO2H,YAAoB,YAAY,GAElE,CAEQ,aAAMa,CAAQlF,GACpB,IACE,MAAMW,QAAiBmF,MAAM9F,GACvB+F,QAAapF,EAASoF,OAG5B,OAFe,IAAIC,WACAC,gBAAgBF,EAAM,iBAC9BX,cAAc,M,CACzB,MAAOc,GAEP,OADAtD,QAAQsD,MAAM,mCAAmClG,IAAOkG,GACjD,I,CAEX,CAEQ,SAAAL,CAAUnJ,EAAsBsH,GACtC,MAAMmC,EAAmB7N,KAAK8N,iBAAiB1J,EAAO2H,YAAiB,gBAAiB3H,EAAO2H,YAAiB,cAAeL,GAC/HtH,EAAO2H,YAAiB,YAAY7B,aAAa,IAAK2D,EACxD,CAEQ,gBAAAC,CAAiBC,EAAgBC,EAActC,GACrD,MAAMuC,EAAgBjO,KAAKkO,kBAAkBH,GACvCI,EAAcnO,KAAKkO,kBAAkBF,GAE3C,GAAIC,EAAc7B,SAAW+B,EAAY/B,OAErC,OADA9B,QAAQC,KAAK,+FACNmB,EAAW,GAAMqC,EAASC,EAGrC,IAAII,EAAgB,GAEpB,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAc7B,OAAQiC,IAAK,CAC3C,MAAMC,EAAaL,EAAcI,GAAGE,MAAM,8BAAgC,GACpEC,EAAWL,EAAYE,GAAGE,MAAM,8BAAgC,GAEtE,GAAID,EAAWlC,SAAWoC,EAASpC,OAAnC,CAMAgC,GAAiBE,EAAW,GAE5B,IAAK,IAAIG,EAAI,EAAGA,EAAIH,EAAWlC,OAAQqC,IAAK,CACxC,MAAMC,EAAW9L,WAAW0L,EAAWG,IACjCE,EAAS/L,WAAW4L,EAASC,IAE/BG,MAAMF,IAAaE,MAAMD,GACzBP,GAAiB,IAAIE,EAAWG,KAGhCL,GAAiB,KADOM,GAAYC,EAASD,GAAYhD,GACpBmD,QAAQ,I,OAfjDvE,QAAQC,KAAK,mDAAmD+D,EAAW,oBAC3EF,IAAkB1C,EAAW,GAAMuC,EAAcI,GAAKF,EAAYE,IAAM,G,CAmBhF,OAAOD,CACT,CAEQ,iBAAAF,CAAkBY,GACxB,OAAOA,EAAEP,MAAM,yBAA2B,EAC5C,ECtGF,SAASQ,EACP/N,EACAgO,EAAgB,GAChBC,EAAgB,EAChBC,EAAiB,IACjBC,EAAiB,KAEjB,OAAInO,EAAQgO,EACH,GAELhO,EAAQ,IACVA,EAAQ,GAENA,GAASiO,EAEJE,GADInO,EAAQgO,IAAUC,EAAQD,IAChBG,EAASD,GAEzBA,EACT,CAGO,MAAME,UAAqB5I,EAUhC,WAAAxD,CAAYC,EAAcC,EAAgB,MACxCuD,MAAMxD,EAASC,GAVT,KAAAmM,KAAO,EACP,KAAAC,KAAO,EACL,KAAAC,gBAA6C,IAAIjM,IACjD,KAAAkM,aAAoC,IAAIhM,MAIlD,KAAAiM,UAAoB,EAIlBzP,KAAKyD,QAAU,SACfzD,KAAK0P,OAAS5I,SAASgG,cAAc,mBACrC9M,KAAK2P,cAAgB7I,SAASgG,cAAc,0BAG9C,CAEA,OAAAnH,GACuB,MAAjB3F,KAAKkD,SACoC,MAAvClD,KAAKkD,SAAS,wBAChBlD,KAAK+D,cAAc6L,UAAYb,EAAU/O,KAAKkD,SAAS,wBAIzDlD,KAAK+D,cAAc6L,UAAYb,EAAU,GAG7C,CACA,UAAA7K,CAAWC,EAAkBC,EAAsBC,EAAiBC,G,MAClEmC,MAAMvC,WAAWC,EAAUC,EAAQC,EAAIC,GAEvC,IAAIuL,EAAe7P,KAAK4D,UAAUkG,QAAQzF,EAAI,cAAe,IACxC,MAAjBrE,KAAKkD,UAA2D,MAAvClD,KAAKkD,SAAS,wBACzC2M,EAAe7P,KAAK4D,UAAUkG,QAAQzF,EAAI,cAAerE,KAAKkD,SAAS,wBAGzEkB,EAAOiH,YAAY,YAA2C,QAA9B,EAAA/G,EAAW,2BAAmB,QAAI,UAElEF,EAAOiH,YAAY,UAAW,GAC9BjH,EAAOiH,YAAY,UAAW,GAC9BjH,EAAOiH,YAAY,gBAAiB,GACpCjH,EAAOiH,YAAY,gBAAiB,GAGpCjH,EAAOiH,YAAY,iBAAiB,GACpCjH,EAAOiH,YAAY,iBAAiB,GACpCjH,EAAOiH,YAAY,OAAQ0D,EAAUc,IACrCzL,EAAOiH,YAAY,6BAAwEyE,IAA/CxL,EAAW,iCACvDF,EAAOiH,YAAY,mCAAoFyE,IAArDxL,EAAW,uCAK7D,IAAIyL,EAAczL,EAAW,uBAC7BF,EAAOiH,YAAY,sBAAuB,IACtC0E,GACF3L,EAAOiH,YAAY,sBAAuB0E,EAE9C,CAGA,QAAAnK,CAASlC,GAEPsM,uBAAsB,KA8DpB,GA7DAhQ,KAAKuD,QAAQyD,SAAS5C,IACpB,GAAIA,EAAO2H,YAAY,mBAAqB3H,EAAO2H,YAAY,yBAA0B,CACvF,IAAIkE,EAAO7L,EAAOC,GAAG6L,wBACrB,MAAMC,EAAWnQ,KAAK+D,cAAcqM,EAAIH,EAAKI,KACvCC,EAAWtQ,KAAK+D,cAAcwM,EAAIN,EAAKO,IAEvCC,EAAKrM,EAAO2H,YAAoB,iBAAmBoE,EACnDO,EAAKtM,EAAO2H,YAAoB,iBAAmBuE,EAEzD,GADwBG,EAAKA,EAAKC,EAAKA,EACjB,KAAQ,CACe,GAAvCtM,EAAO2H,YAAY,mBACrB3H,EAAOiH,YAAY,iBAAiB,GACpCjH,EAAOiH,YAAY,gBAAiB8E,GACpC/L,EAAOiH,YAAY,gBAAiBiF,GACpCtQ,KAAKgE,OAAOgF,KAAK,mBAAmB5E,EAAOc,KAAM,OAEnD,IAAIyL,EAAQ3Q,KAAK2D,KAAKmG,QAAQ1F,EAAO2H,YAAoB,iBAAkBoE,EAAU/L,EAAO2H,YAAY,SACpG6E,EAAQ5Q,KAAK2D,KAAKmG,QAAQ1F,EAAO2H,YAAoB,iBAAkBuE,EAAUlM,EAAO2H,YAAY,SACxG3H,EAAOiH,YAAY,gBAAiBjH,EAAO2H,YAAoB,iBAAmB4E,GAClFvM,EAAOiH,YAAY,gBAAiBjH,EAAO2H,YAAoB,iBAAmB6E,GAClF,MAAMC,EAAU7Q,KAAK8Q,gBAAgB1M,EAAO2H,YAAY,aAAc3H,EAAO2H,YAAoB,iBAAkBkE,EAAKrH,OAClHmI,EAAU/Q,KAAK8Q,gBAAgB1M,EAAO2H,YAAY,aAAc3H,EAAO2H,YAAoB,iBAAkBkE,EAAKpH,QACxHzE,EAAOiH,YAAY,UAAWwF,GAC9BzM,EAAOiH,YAAY,UAAW0F,GAC9B/Q,KAAKgR,oBAAoB5M,EAAQA,EAAO2H,YAAoB,WAAY3H,EAAO2H,YAAoB,YACnG/L,KAAKgE,OAAOgF,KAAK,aAAa5E,EAAOc,KAAM,CACzCkL,EAAGhM,EAAO2H,YAAoB,WAC9BwE,EAAGnM,EAAO2H,YAAoB,aAEhC/L,KAAKgE,OAAOgF,KAAK,mBAAmB5E,EAAOc,KAAM,CAC/CkL,EAAGhM,EAAO2H,YAAoB,iBAC9BwE,EAAGnM,EAAO2H,YAAoB,kB,MAGhC3H,EAAOiH,YAAY,gBAAiB8E,GACpC/L,EAAOiH,YAAY,gBAAiBiF,GACpCtQ,KAAKgE,OAAOgF,KAAK,iBAAiB5E,EAAOc,KAAM,K,MAGjD,GAA6C,GAAzCd,EAAO2H,YAAoB,YAA4D,GAAzC3H,EAAO2H,YAAoB,WAAiB,CAE5F3H,EAAOiH,YAAY,iBAAiB,GACpC,IAAI4E,EAAO7L,EAAOC,GAAG6L,wBACrB,MAAMW,EAAU7Q,KAAK8Q,gBAAgB,SAAU1M,EAAO2H,YAAY,cAAekE,EAAKrH,OAChFmI,EAAU/Q,KAAK8Q,gBAAgB,SAAU1M,EAAO2H,YAAY,eAAgBkE,EAAKpH,QAEvFzE,EAAOiH,YAAY,UAAWjH,EAAO2H,YAAoB,WAAa/L,KAAK2D,KAAKmG,QAAQ1F,EAAO2H,YAAoB,WAAY8E,EAASzM,EAAO2H,YAAY,UAC3J3H,EAAOiH,YAAY,UAAWjH,EAAO2H,YAAoB,WAAa/L,KAAK2D,KAAKmG,QAAQ1F,EAAO2H,YAAoB,WAAYgF,EAAS3M,EAAO2H,YAAY,UAGvJJ,KAAKsF,IAAI7M,EAAO2H,YAAoB,YAAc,MAAQJ,KAAKsF,IAAI7M,EAAO2H,YAAoB,YAAc,OAC9G3H,EAAOiH,YAAY,UAAW,GAC9BjH,EAAOiH,YAAY,UAAW,GAC9BjH,EAAOiH,YAAY,gBAAiB,GACpCjH,EAAOiH,YAAY,gBAAiB,IAEtCrL,KAAKgR,oBAAoB5M,EAAQA,EAAO2H,YAAoB,WAAY3H,EAAO2H,YAAoB,W,KAKxE,GAA5B/L,KAAK+D,cAAc4M,OAA0C,GAA5B3Q,KAAK+D,cAAc6M,MAAa,CACpE,IAAIM,EAAa,CACfP,MAAO3Q,KAAK+D,cAAc4M,MAC1BC,MAAO5Q,KAAK+D,cAAc6M,MAC1BR,EAAGpQ,KAAK+D,cAAcoN,QACtBZ,EAAGvQ,KAAK+D,cAAcqN,SAExBpR,KAAKgE,OAAOgF,KAAK,SAAUkI,GAC3BlR,KAAKqP,KAAOrP,KAAK+D,cAAcoN,QAC/BnR,KAAKsP,KAAOtP,KAAK+D,cAAcqN,QAC/BpR,KAAK0P,OAAOhH,MAAM2C,YAAY,MAAOrL,KAAK+D,cAAcoN,SACxDnR,KAAK0P,OAAOhH,MAAM2C,YAAY,MAAOrL,KAAK+D,cAAcqN,SACxDpR,KAAK0P,OAAOhH,MAAM2C,YAAY,WAAYrL,KAAK+D,cAAc4M,OAC7D3Q,KAAK0P,OAAOhH,MAAM2C,YAAY,WAAYrL,KAAK+D,cAAc6M,M,IAInE,CAEA,SAAA5L,CAAUZ,GACR,IAAIjC,EAAUiC,EAAOC,GACjBgN,EAAiB,KACjBC,EAAwB,KAC1BtR,KAAKyP,YACLtN,EAAQsF,iBAAiB,aAAc8J,GACvCnN,EAAOiH,YAAY,iBAAiB,GACoB,MAApDjH,EAAO2H,YAAoB,wBAAiC3H,EAAO2H,YAAoB,uBAAuBK,OAAS,GACzHpM,KAAK0P,OAAOtI,UAAUC,IAAIjD,EAAO2H,YAAoB,wBAEvD/L,KAAK0P,OAAOtI,UAAUC,IAAI,YAC1BgK,EAAY5H,YAAW,KACrBzJ,KAAK0P,OAAOtI,UAAUoK,OAAO,YAC7BxR,KAAK0P,OAAOtI,UAAUC,IAAI,QAAQ,GACjC,KAAK,EAENkK,EAAwB,KAC1BvR,KAAKyP,YACU,MAAX4B,GACFI,aAAaJ,GAEflP,EAAQqF,oBAAoB,aAAc+J,GAC1CnN,EAAOiH,YAAY,iBAAiB,GACqB,MAArDjH,EAAO2H,YAAoB,wBAAkC3H,EAAO2H,YAAoB,uBAAuBK,OAAS,GAC1HpM,KAAK0P,OAAOtI,UAAUoK,OAAOpN,EAAO2H,YAAoB,wBAE1D/L,KAAK0P,OAAOtI,UAAUoK,OAAO,YAC7BxR,KAAK0P,OAAOtI,UAAUoK,OAAO,QAAQ,EAEvCpN,EAAOqH,QAAU,KACftJ,EAAQsF,iBAAiB,aAAc6J,EAAsB,EAE/DlN,EAAOsN,QAAU,KACfvP,EAAQqF,oBAAoB,aAAc8J,GAC1CnP,EAAQqF,oBAAoB,aAAc+J,EAAsB,CAEpE,CAEQ,mBAAAP,CAAoB5M,EAAsBgM,EAAWG,GACtDnM,EAAO2H,YAAY,iCAC6B,GAA/C3H,EAAO2H,YAAqB,kBAC9B3H,EAAOC,GAAGqE,MAAM2C,YAAY,MAAO+E,EAAEvB,QAAQ,IAC7CzK,EAAOC,GAAGqE,MAAM2C,YAAY,MAAOkF,EAAE1B,QAAQ,KAE/CzK,EAAO+H,SAASnF,SAAS7E,IACvBA,EAAQuG,MAAM2C,YAAY,MAAO+E,EAAEvB,QAAQ,IAC3C1M,EAAQuG,MAAM2C,YAAY,MAAOkF,EAAE1B,QAAQ,GAAG,IAKpD,CAEQ,eAAAiC,CAAgBa,EAAmBC,EAAkBC,GAC3D,OAAQF,GACN,IAAK,QACH,OAAOC,EAAWC,EACpB,IAAK,MACH,OAAQD,EAAWC,GAAQA,EAE7B,QACE,OAAQD,EAAWC,EAAO,IAAMA,EAAO,GAE7C,ECzOK,MAAMC,UAAuBtL,EAClC,WAAAxD,CAAYC,GACVwD,MAAMxD,GACNjD,KAAKyD,QAAU,UACjB,CAEA,UAAAS,CAAWC,EAAkBC,EAAsBC,EAAiBC,G,QAClEmC,MAAMvC,WAAWC,EAAUC,EAAQC,EAAIC,GACvCF,EAAOiH,YAAY,gBAAgB,GACnCjH,EAAOiH,YAAY,oBAAqB,GACxCjH,EAAOiH,YAAY,oBAAqB,GACxCjH,EAAOiH,YAAY,aAAc,GACjCjH,EAAOiH,YAAY,aAAc,GACjCjH,EAAOiH,YAAY,WAAyC,QAA7B,EAAA/G,EAAW,0BAAkB,QAAItE,KAAKoD,gBAAgBzB,gBACrFyC,EAAOiH,YAAY,SAAqC,QAA3B,EAAA/G,EAAW,wBAAgB,QAAItE,KAAKoD,gBAAgBxB,cACjFwC,EAAOiH,YAAY,OAAQ,GAE7B,CAEA,SAAArG,CAAUZ,GACQA,EAAOC,GAEF,MAAjBrE,KAAKkD,WACiC,MAApClD,KAAKkD,SAAS,oBAChBkB,EAAOiH,YAAY,WAAYrL,KAAKkD,SAAS,oBAET,MAAlClD,KAAKkD,SAAS,kBAChBkB,EAAOiH,YAAY,SAAUrL,KAAKkD,SAAS,kBAET,MAAhClD,KAAKkD,SAAS,gBAChBkB,EAAOiH,YAAY,OAAQrL,KAAKkD,SAAS,gBAG/C,CAEA,WAAA8C,CAAYC,GACVjG,KAAKuD,QAAQyD,SAAS5C,IACpB,MACM6L,EADU7L,EAAOC,GACF6L,wBACf6B,EAAiB9B,EAAKI,KAAOjM,EAAO2H,YAAoB,cACxDiG,EAAiB/B,EAAKO,IAAMpM,EAAO2H,YAAoB,eACvDkG,EAAQhM,EAAEiM,QAAUH,EACpBI,EAAQlM,EAAEmM,QAAUJ,EACpBK,EAAW1G,KAAK2G,KAAKL,GAAS,EAAIE,GAAS,GACjD,IAAII,EAASnO,EAAO2H,YAAoB,UACpCyG,EAAWpO,EAAO2H,YAAoB,YAEtCsG,EAAWE,GACbnO,EAAOiH,YAAY,oBAAqB4G,EAAQO,IAAaD,EAASF,GAAYE,IAClFnO,EAAOiH,YAAY,oBAAqB8G,EAAQK,IAAaD,EAASF,GAAYE,IAClFnO,EAAOiH,YAAY,gBAAgB,KAEnCjH,EAAOiH,YAAY,oBAAqB,GACxCjH,EAAOiH,YAAY,oBAAqB,G,GAG9C,CAEA,QAAAzF,CAASlC,GACP1D,KAAKuD,QAAQyD,SAAS5C,IACpB,GAAIA,EAAO2H,YAAY,gBAAiB,CACtC,IAAI0G,EAAYrO,EAAO2H,YAAoB,cACvC2G,EAAYtO,EAAO2H,YAAoB,cACvC4E,EAAQ3Q,KAAK2D,KAAKmG,QAAQ2I,EAAWrO,EAAO2H,YAAY,qBAAsB3H,EAAO2H,YAAY,SACjG6E,EAAQ5Q,KAAK2D,KAAKmG,QAAQ4I,EAAWtO,EAAO2H,YAAY,qBAAsB3H,EAAO2H,YAAY,SACjG4E,GAAS,KAAQA,EAAQ,MAC3BA,EAAQ,EACRvM,EAAOiH,YAAY,aAAcjH,EAAO2H,YAAY,uBAElD6E,GAAS,KAAQA,EAAQ,MAC3BA,EAAQ,EACRxM,EAAOiH,YAAY,aAAcjH,EAAO2H,YAAY,uBAEtD0G,GAAa9B,EACb+B,GAAa9B,EACbxM,EAAOiH,YAAoB,aAAcoH,GACzCrO,EAAOiH,YAAoB,aAAcqH,GACzCtO,EAAOC,GAAGqE,MAAM2C,YAAY,eAAgBoH,EAAUvG,YACtD9H,EAAOC,GAAGqE,MAAM2C,YAAY,eAAgBqH,EAAUxG,YAClD9H,EAAO2H,YAAY,sBAAwB0G,GAAarO,EAAO2H,YAAY,sBAAwB2G,GACrGtO,EAAOiH,YAAY,gBAAgB,E,IAI3C,ECzFK,MAAMsH,EACX,OAAA7I,CAAQ8I,EAAiBC,EAAgBC,GAEvC,OADmBD,EAASD,GACRE,CACtB,ECDK,MAAMC,EAaX,KAAW3C,GACT,OAAOpQ,KAAKgT,OACd,CACA,KAAWzC,GACT,OAAOvQ,KAAKiT,OACd,CACA,WAAW9B,GACT,OAAOnR,KAAKkT,EACd,CACA,WAAW9B,GACT,OAAOpR,KAAKmT,EACd,CACA,SAAWxC,GACT,OAAO3Q,KAAKoT,MACd,CACA,SAAWxC,GACT,OAAO5Q,KAAKqT,MACd,CAGA,aAAWzD,CAAU5O,GACnBhB,KAAKsT,IAAMtS,CACb,CAEA,WAAAgC,CAAY4M,EAAoB,IApCxB,KAAA0D,IAAM,GACN,KAAA3P,KAAO,IAAIgP,EAEX,KAAAO,GAAa,EACb,KAAAC,GAAa,EACb,KAAAC,OAAiB,EACjB,KAAAC,OAAiB,EAEjB,KAAAL,QAAkB,EAClB,KAAAC,QAAkB,EA4BxBjT,KAAKsT,IAAM1D,CAEb,CAGA,WAAA5J,CAAYC,GACVjG,KAAKgT,QAAU/M,EAAEiM,QACjBlS,KAAKiT,QAAUhN,EAAEmM,OAEnB,CACA,QAAAxM,GACE5F,KAAKoT,OAASpT,KAAK2D,KAAKmG,QAAQ9J,KAAKkT,GAAIlT,KAAKgT,QAAShT,KAAKsT,KAC5DtT,KAAKqT,OAASrT,KAAK2D,KAAKmG,QAAQ9J,KAAKmT,GAAInT,KAAKiT,QAASjT,KAAKsT,KAC3C3H,KAAK2G,KAAK3G,KAAK4H,IAAIvT,KAAKoT,OAAQ,GAAKzH,KAAK4H,IAAIvT,KAAKqT,OAAQ,IAC7D,IACbrT,KAAKoT,OAAS,EACdpT,KAAKqT,OAAS,EACdrT,KAAKkT,GAAKlT,KAAKgT,QACfhT,KAAKmT,GAAKnT,KAAKiT,UAEfjT,KAAKkT,GAAKlT,KAAKkT,GAAKlT,KAAKoT,OACzBpT,KAAKmT,GAAKnT,KAAKmT,GAAKnT,KAAKqT,OAE7B,EC7DK,MAAMG,EAoGJ,WAAAnI,CAAelL,EAAaa,GACjChB,KAAKyT,WAAWrO,IAAIjF,EAAKa,EAC3B,CAEO,WAAA+K,CAAe5L,G,MACpB,OAA+B,QAAxB,EAAAH,KAAKyT,WAAWjT,IAAIL,UAAI,QAAI,IACrC,CAEA,WAAA6C,CAAYb,GA1GL,KAAA+C,GAAa,GACb,KAAA/E,IAAc,aACd,KAAA0E,KAAe,GAEf,KAAAsH,SAA+B,IAAI3I,MAClC,KAAAiQ,WAA+B,IAAInQ,IACnC,KAAAoQ,QAAgC,IAAIlQ,MAErC,KAAAiI,QAAU,OACV,KAAAiG,QAAU,OAkGf1R,KAAKqE,GAAKlC,CAEZ,CAEA,KAAAwR,GACE3T,KAAKqL,YAAY,UAAU,GAC3BrL,KAAK0T,QAAQ1M,SAASnH,IACpBA,EAAOoF,YAAYjF,KAAKkF,GAAIlF,KAAK,IAEnCA,KAAKyL,SACP,CACA,KAAAmI,GACE5T,KAAKqL,YAAY,UAAU,GAC3BrL,KAAK0T,QAAQ1M,SAASnH,IACpBA,EAAOyF,YAAYtF,KAAKkF,GAAG,IAE7BlF,KAAK0R,SACP,CACA,IAAAmC,GACE7T,KAAKqE,GAAG+C,UAAUC,IAAI,UACxB,CACA,IAAAyM,GACM9T,KAAK+L,YAAqB,WAC5B/L,KAAKqE,GAAG+C,UAAUoK,OAAO,UAE7B,CAEA,OAAAzM,CAAQlF,GACNG,KAAK0T,QAAQrO,KAAKxF,EACpB,EC3IF,IAAKkU,GAAL,SAAKA,GACH,uBACA,uBACA,uBACA,wBACD,CALD,CAAKA,IAAAA,EAAU,KAoBf,MAAMC,EAKJ,WAAAhR,CAAYiR,G,MAJL,KAAArI,SAAekE,EACf,KAAAjE,SAAeiE,EACf,KAAAoE,QAAkB,EAGvBlU,KAAK4L,IAAMqI,aAAM,EAANA,EAAQrI,IACnB5L,KAAK6L,IAAMoI,aAAM,EAANA,EAAQpI,IACnB7L,KAAKkU,OAAuB,QAAd,EAAAD,aAAM,EAANA,EAAQC,cAAM,QAC9B,CAEA,SAAAC,CAAUD,GAAkB,GAC1BlU,KAAKkU,OAASA,CAChB,CACA,QAAAE,CAASxI,EAAcC,GACrB7L,KAAK4L,IAAMA,QAAAA,OAAOkE,EAClB9P,KAAK6L,IAAMA,QAAAA,OAAOiE,CACpB,CAEA,cAAIuE,GACF,IAAIC,EAAQ,SAOZ,OANItU,KAAK4L,MACP0I,GAAS,oBAAoBtU,KAAK4L,UAEhC5L,KAAK6L,MACPyI,GAAS,oBAAoBtU,KAAK6L,UAE7ByI,CACT,EAGK,MAAMC,UAAyB1R,EAepC,WAAAG,CAAYC,EAAcC,GACxBuD,MAAMxD,EAASC,GAfT,KAAAsR,QAAgE,CACtE,CAACT,EAAWU,QAAS,IAAIT,EAA4B,CAAEnI,IAAK,MAC5D,CAACkI,EAAWW,QAAS,IAAIV,EAA4B,CAAEpI,IAAK,IAAKC,IAAK,OACtE,CAACkI,EAAWY,QAAS,IAAIX,EAA4B,CAAEpI,IAAK,KAAMC,IAAK,OACvE,CAACkI,EAAWa,SAAU,IAAIZ,EAA4B,CAAEpI,IAAK,QAGvD,KAAAiJ,YAAuD,CAC7D,CAACd,EAAWU,QAASK,OAAOC,WAAW/U,KAAKwU,QAAQT,EAAWU,QAAQJ,YACvE,CAACN,EAAWW,QAASI,OAAOC,WAAW/U,KAAKwU,QAAQT,EAAWW,QAAQL,YACvE,CAACN,EAAWY,QAASG,OAAOC,WAAW/U,KAAKwU,QAAQT,EAAWY,QAAQN,YACvE,CAACN,EAAWa,SAAUE,OAAOC,WAAW/U,KAAKwU,QAAQT,EAAWa,SAASP,aAKzErU,KAAK+C,MAAQ,CACf,CAEA,SAAAiC,GAAa,CAEb,OAAAW,G,YACE,GAAqB,MAAjB3F,KAAKkD,UAC0B,MAA7BlD,KAAKkD,SAAmB,SAAW,CACrC,IAAI+Q,EAASjU,KAAKkD,SAAmB,SACjC+Q,EAAOe,QACThV,KAAKwU,QAAQT,EAAWU,QAAQP,QAAS,EACzClU,KAAKwU,QAAQT,EAAWU,QAAQL,SAA8BtE,MAArBmE,EAAOe,OAAOpJ,IAAmB,KAAOqI,EAAOe,OAAOpJ,IAAsB,QAAjB,EAAAqI,EAAOe,OAAOnJ,WAAG,QAAI,MACzH7L,KAAK6U,YAAYd,EAAWU,QAAUK,OAAOC,WAAW/U,KAAKwU,QAAQT,EAAWU,QAAQJ,aAExFrU,KAAKwU,QAAQT,EAAWU,QAAQP,QAAS,EAGvCD,EAAOgB,QACTjV,KAAKwU,QAAQT,EAAWW,QAAQR,QAAS,EACzClU,KAAKwU,QAAQT,EAAWW,QAAQN,SAA8BtE,MAArBmE,EAAOe,OAAOpJ,IAAmB,KAAOqI,EAAOe,OAAOpJ,IAAsB,QAAjB,EAAAqI,EAAOe,OAAOnJ,WAAG,QAAI,MACzH7L,KAAK6U,YAAYd,EAAWW,QAAUI,OAAOC,WAAW/U,KAAKwU,QAAQT,EAAWU,QAAQJ,aAExFrU,KAAKwU,QAAQT,EAAWW,QAAQR,QAAS,EAGvCD,EAAOiB,QACTlV,KAAKwU,QAAQT,EAAWY,QAAQT,QAAS,EACzClU,KAAKwU,QAAQT,EAAWY,QAAQP,SAA8BtE,MAArBmE,EAAOe,OAAOpJ,IAAmB,KAAOqI,EAAOe,OAAOpJ,IAAsB,QAAjB,EAAAqI,EAAOe,OAAOnJ,WAAG,QAAI,MACzH7L,KAAK6U,YAAYd,EAAWY,QAAUG,OAAOC,WAAW/U,KAAKwU,QAAQT,EAAWU,QAAQJ,aAExFrU,KAAKwU,QAAQT,EAAWY,QAAQT,QAAS,EAGvCD,EAAOkB,SACTnV,KAAKwU,QAAQT,EAAWa,SAASV,QAAS,EAC1ClU,KAAKwU,QAAQT,EAAWa,SAASR,SAA8BtE,MAArBmE,EAAOe,OAAOpJ,IAAmB,KAAOqI,EAAOe,OAAOpJ,IAAsB,QAAjB,EAAAqI,EAAOe,OAAOnJ,WAAG,QAAI,MAC1H7L,KAAK6U,YAAYd,EAAWa,SAAWE,OAAOC,WAAW/U,KAAKwU,QAAQT,EAAWU,QAAQJ,aAEzFrU,KAAKwU,QAAQT,EAAWa,SAASV,QAAS,C,CAIhDlU,KAAKoV,gBACP,CAEA,QAAAvP,GACE7F,KAAKoV,gBACP,CAEQ,cAAAA,GACN,MAAMC,EAAgBrV,KAAK6U,YAAYd,EAAWU,QAAQa,SAAWtV,KAAKwU,QAAQT,EAAWU,QAAQP,OAC/FqB,EAAgBvV,KAAK6U,YAAYd,EAAWW,QAAQY,SAAWtV,KAAKwU,QAAQT,EAAWW,QAAQR,OAC/FsB,EAAgBxV,KAAK6U,YAAYd,EAAWY,QAAQW,SAAWtV,KAAKwU,QAAQT,EAAWY,QAAQT,OAC/FuB,EAAiBzV,KAAK6U,YAAYd,EAAWa,SAASU,SAAWtV,KAAKwU,QAAQT,EAAWa,SAASV,OAEvFpN,SAASC,iBAAiB,uEAElCC,SAAS7E,IAChB,IAAIuT,GAAc,EAEdvT,EAAQwT,aAAa,kBAAoBN,IAC3CK,GAAc,GAEZvT,EAAQwT,aAAa,kBAAoBJ,IAC3CG,GAAc,GAEZvT,EAAQwT,aAAa,kBAAoBH,IAC3CE,GAAc,GAEZvT,EAAQwT,aAAa,mBAAqBF,IAC5CC,GAAc,GAIdvT,EAAQuG,MAAMkN,QADZF,EACsB,KAEA,M,GAG9B,ECnJK,MAAMG,EAQX,WAAA7S,CAAYU,EAAkBoS,EAAgBC,GALtC,KAAAC,YAAa,EACb,KAAAC,OAAiB,EACjB,KAAAC,oBAA8B,EAIpClW,KAAK0D,KAAOA,EACZ1D,KAAK8V,UAAYA,EACjB9V,KAAK+V,MAAQA,CACf,CAEA,QAAAlQ,GACE,MAAMsQ,EAAcnW,KAAK0D,KAAK0S,IACxBC,EAAcrW,KAAK0D,KAAK6H,GAExB+K,EAAaD,EAAcF,EAAeE,EAChDrW,KAAK+V,MAAMrN,MAAM2C,YAAY,SAAUiL,EAAY,MAE/CH,GAAeE,EACjBrW,KAAK8V,UAAU1O,UAAUC,IAAI,SAE7BrH,KAAK8V,UAAU1O,UAAUoK,OAAO,QAEpC,CAEA,WAAA+E,GACE,MAAMC,EAAgBxW,KAAK0D,KAAK0S,IAC1BK,EAAgBzW,KAAK0D,KAAK6H,GAChCvL,KAAK+V,MAAMrN,MAAM2C,YAAY,aAAkBrL,KAAK0D,KAAKoI,EAAI0K,EAAiBC,EAAgB,KAChG,CAEA,cAAAC,CAAezQ,GACbjG,KAAKiW,OAAShQ,EAAEmM,QAChBpS,KAAKkW,oBAAsBlW,KAAK0D,KAAKoI,CACvC,CAEA,cAAA6K,CAAe1Q,GACb,MAAM2Q,EAAS3Q,EAAEmM,QAAUpS,KAAKiW,OAC1BY,EAAoB7W,KAAKkW,oBAAuBU,EAAS5W,KAAK0D,KAAK6H,GAAMvL,KAAK0D,KAAK0S,IACzFpW,KAAK0D,KAAKoI,EAAI+K,EACd7W,KAAK0D,KAAKoT,EAAID,EACd/B,OAAOiC,SAAS,EAAGF,GACnB7W,KAAKuW,aACP,EC9CK,MAAMS,EAQX,WAAAhU,CAAYU,EAAkBoS,EAAgBC,GALtC,KAAAC,YAAa,EACb,KAAAiB,gBAA0B,EAC1B,KAAAf,oBAA8B,EAIpClW,KAAK0D,KAAOA,EACZ1D,KAAK8V,UAAYA,EACjB9V,KAAK+V,MAAQA,CACf,CAEA,QAAAlQ,GACE,MAAMsQ,EAAcnW,KAAK0D,KAAKwT,IACxBb,EAAcrW,KAAK0D,KAAK6H,GACxB+K,EAAaD,EAAcF,EAAeE,EAChDrW,KAAK+V,MAAMrN,MAAM2C,YAAY,SAAUiL,EAAY,MAE/CH,GAAeE,EACjBrW,KAAK8V,UAAU1O,UAAUC,IAAI,SAE7BrH,KAAK8V,UAAU1O,UAAUoK,OAAO,QAEpC,CAEA,WAAA+E,GACE,MAAMY,EAAenX,KAAK0D,KAAKwT,IACzBE,EAAepX,KAAK0D,KAAK6H,GAC/BvL,KAAK+V,MAAMrN,MAAM2C,YAAY,aAAkBrL,KAAK0D,KAAKoI,EAAIqL,EAAgBC,EAAe,KAC9F,CAEA,cAAAV,CAAezQ,GACbjG,KAAKiX,gBAAkBhR,EAAEiM,QACzBlS,KAAKkW,oBAAsBlW,KAAK0D,KAAKoI,CACvC,CAEA,cAAA6K,CAAe1Q,GACb,MAAMoR,EAASpR,EAAEiM,QAAUlS,KAAKiX,gBAC1BJ,EAAoB7W,KAAKkW,oBAAuBmB,EAASrX,KAAK0D,KAAK6H,GAAMvL,KAAK0D,KAAKwT,IACzFlX,KAAK0D,KAAKoI,EAAI+K,EACd7W,KAAK0D,KAAKoT,EAAID,EACd/B,OAAOiC,SAAS,EAAGF,GACnB7W,KAAKuW,aACP,EC1CK,MAAMe,UAAwBzU,EAgBnC,WAAAG,CAAYC,GACVwD,MAAMxD,GAZA,KAAA+S,YAAa,EACb,KAAAuB,WAA+C,SAarDvX,KAAKwX,iBAAmBxX,KAAKyX,aAAaC,KAAK1X,MAC/CA,KAAK2X,mBAAqB3X,KAAK0W,eAAegB,KAAK1X,MACnDA,KAAK4X,mBAAqB5X,KAAK2W,eAAee,KAAK1X,KACrD,CACA,UAAA0E,GACEoC,SAASU,oBAAoB,UAAWxH,KAAKwX,kBAC7CxX,KAAK+V,MAAMvO,oBAAoB,YAAaxH,KAAK2X,oBACjD7Q,SAASU,oBAAoB,YAAaxH,KAAK4X,mBACjD,CAEA,OAAAjS,GACE3F,KAAK6X,kBACL7X,KAAKuW,cACLvW,KAAK8X,kBACLhR,SAASW,iBAAiB,UAAWzH,KAAKwX,kBAC1CxX,KAAK+V,MAAMtO,iBAAiB,YAAazH,KAAK2X,oBAC9C7Q,SAASW,iBAAiB,YAAazH,KAAK4X,oBAC5C9Q,SAAS4C,gBAAgBtC,UAAUC,IAAI,gBACzC,CAEA,QAAAtB,CAASrC,GACP1D,KAAKuW,cACLvW,KAAK+X,gBACL/X,KAAKgY,eACP,CAEA,QAAAnS,GACE7F,KAAKiY,eAAepS,UACtB,CAEA,oBAAAlB,GACsB,WAAhB3E,KAAK0D,KAAKwU,IAAsC,WAAnBlY,KAAKuX,YACpCvX,KAAK8V,UAAU1O,UAAUC,IAAI,UAEV,UAAhBrH,KAAK0D,KAAKwU,IAAqC,WAAnBlY,KAAKuX,YAA6C,WAAhBvX,KAAK0D,KAAKwU,IAAsC,WAAnBlY,KAAKuX,aACnGvX,KAAK8V,UAAU1O,UAAUoK,OAAO,SAElCxR,KAAKuX,WAAavX,KAAK0D,KAAKwU,EAC9B,CAEA,uBAAA9R,GACsB,cAAhBpG,KAAK0D,KAAKyU,GACZnY,KAAKiY,eAAiBjY,KAAKoY,uBAE3BpY,KAAKiY,eAAiBjY,KAAKqY,yBAE7BrY,KAAKiY,eAAepS,UACtB,CAEQ,eAAAiS,GACN,MAAMpP,EAAQ5B,SAASwR,cAAc,SACrC5P,EAAM6P,YAAc,ijBAmBpBzR,SAAS0R,KAAKnL,YAAY3E,EAC5B,CAEQ,eAAAmP,GACN7X,KAAK8V,UAAYhP,SAASwR,cAAc,OACxCtY,KAAK8V,UAAU1O,UAAUC,IAAI,aAC7BrH,KAAK+V,MAAQjP,SAASwR,cAAc,OACpCtY,KAAK+V,MAAM3O,UAAUC,IAAI,SACzBrH,KAAK8V,UAAUzI,YAAYrN,KAAK+V,OAChCjP,SAAS2R,KAAKpL,YAAYrN,KAAK8V,WAE/B9V,KAAKqY,yBAA2B,IAAIxC,EAA0B7V,KAAK0D,KAAM1D,KAAK8V,UAAW9V,KAAK+V,OAC9F/V,KAAKoY,uBAAyB,IAAIpB,EAAwBhX,KAAK0D,KAAM1D,KAAK8V,UAAW9V,KAAK+V,OAC1F/V,KAAKiY,eAAiBjY,KAAKqY,wBAC7B,CAEQ,WAAA9B,GACNvW,KAAKiY,eAAe1B,aACtB,CAEQ,cAAAG,CAAezQ,GACrBjG,KAAKgW,YAAa,EAClBhW,KAAKiY,eAAevB,eAAezQ,GACnCa,SAAS2R,KAAK/P,MAAMgQ,WAAa,OACjC1Y,KAAK8V,UAAU1O,UAAUC,IAAI,SAC/B,CAEQ,cAAAsP,CAAe1Q,GAChBjG,KAAKgW,YAEVhW,KAAKiY,eAAetB,eAAe1Q,EACrC,CAEQ,YAAAwR,GACNzX,KAAKgW,YAAa,EAClBlP,SAAS2R,KAAK/P,MAAMgQ,WAAa,GACjC1Y,KAAKgY,gBACLhY,KAAK8V,UAAU1O,UAAUoK,OAAO,SAClC,CAEQ,aAAAuG,GACN/X,KAAK8V,UAAU1O,UAAUC,IAAI,UAC/B,CAEQ,aAAA2Q,GACFhY,KAAK2Y,eACPlH,aAAazR,KAAK2Y,eAEpB3Y,KAAK2Y,cAAgBlP,YAAW,KAC9BzJ,KAAK8V,UAAU1O,UAAUoK,OAAO,UAAU,GACzC,IACL,EC5IK,MAAMoH,UAAqBpS,EAChC,WAAAxD,CAAYC,GACVwD,MAAMxD,GACNjD,KAAKyD,QAAU,QACjB,CACA,UAAAS,CAAWC,EAAkBC,EAAsBC,EAAiBC,GAClEmC,MAAMvC,WAAWC,EAAUC,EAAQC,EAAIC,GACvCF,EAAOiH,YAAY,SAAUrL,KAAK4D,UAAUkG,QAAQzF,EAAI,gBAAiB,iBAE3E,CACA,SAAAW,CAAUZ,GACRqC,MAAMzB,UAAUZ,GACoB,MAAhCA,EAAO2H,YAAY,WAAqD,IAAhC3H,EAAO2H,YAAY,WAC7D3H,EAAOiH,YAAY,SAAU,iBAE/B,MAAMwN,EAAIzU,EAAO2H,YAAoB,UAAU+M,MAAM,KAC/C1I,EAAIpQ,KAAK+Y,UAAUF,EAAE,IACrBtI,EAAIvQ,KAAK+Y,UAAUF,EAAE,IAAMA,EAAE,IACnCzU,EAAOC,GAAGqE,MAAMsQ,gBAAkB,GAAG5I,KAAKG,GAC5C,CAEQ,SAAAwI,CAAUE,GAEhB,IADAA,EAAOA,EAAKC,QACH1W,WAAW,UAAW,CAC7B,MAAMpC,EAAI6Y,EAAKxW,MAAM,GAAI,GAAGqW,MAAM,KAAKK,KAAIC,GAAKA,EAAEF,SAElD,OAAO9Y,EADGuL,KAAK0N,MAAM1N,KAAK2N,SAAWlZ,EAAEgM,Q,CAGvC,OAAO6M,CAEX,EC9BK,MAAMM,UAAoB/S,EAmB/B,WAAAxD,CAAYC,EAAcC,EAAgB,MAIxC,GAHAuD,MAAMxD,GAnBA,KAAAuW,aAAuB,EACvB,KAAAC,aAAuB,EACvB,KAAAC,aAAuB,EACvB,KAAAC,mBAA6B,OAC7B,KAAAC,iBAA2B,EAE3B,KAAAC,uBAAiC,OACjC,KAAAC,0BAAoC9Z,KAAK6Z,uBAAyB,GAClE,KAAAE,4BAAsC,KAE7B,KAAAC,kBAA4B,IAC5B,KAAAC,iBAA2B,IAC3B,KAAAC,iBAA2B,EAC3B,KAAAC,cAAwB,EACxB,KAAAC,aAAuB,EAEhC,KAAAC,qBAA+B,EAqB/B,KAAAC,UAAalW,IACnB,MAAMmW,EAAmB,mBAAmBva,KAAK0D,KAAK8W,GAAKxa,KAAKqa,qBAAuBjW,EAAO2H,YAAoB,iBAClH3H,EAAOC,GAAGqE,MAAM+R,UAAYF,CAAgB,EAGtC,KAAAG,qBAAuB,KAC7B,IAAK,IAAIrM,EAAI,EAAGA,EAAIrO,KAAKuD,QAAQ6I,OAAQiC,IAAK,CAC5C,IAAIjK,EAASpE,KAAKuD,QAAQ8K,GAC1BrO,KAAKsa,UAAUlW,E,GAGX,KAAAuW,oBAAsB,OACtB,KAAAC,cAAgB5a,KAAK0a,qBA7B3B1a,KAAKyD,QAAU,QAEXP,EAAU,CACZ,MAAM,uBAAE2W,EAAsB,0BAAEC,EAAyB,2BAAEC,GAA+B7W,EAC1FlD,KAAK6Z,uBAAyBA,QAAAA,EAA0B7Z,KAAK6Z,uBAC7D7Z,KAAK8Z,0BAA4BA,QAAAA,EAA6B9Z,KAAK8Z,0BACnE9Z,KAAK+Z,2BAA6BA,QAAAA,EAA8B/Z,KAAK+Z,0B,CAGzE,CAEA,UAAA7V,CAAWC,EAAkBC,EAAsBC,EAAiBC,G,MAClEmC,MAAMvC,WAAWC,EAAUC,EAAQC,EAAIC,GAEvCF,EAAOiH,YAAY,QAASzI,WAAqC,QAA1B,EAAA0B,EAAW,uBAAe,QAAI,KACvE,CAkBQ,kBAAAuW,CAAmBC,GACzB,MAAMC,EAAiBD,EACnB9a,KAAK0D,KAAKxB,EAAIlC,KAAKwZ,aACnBxZ,KAAK0D,KAAKxB,EAAIlC,KAAKwZ,aAEvBxZ,KAAK2Z,mBAAqBoB,EACrB/a,KAAK4Z,gBAAkB5Z,KAAK6Z,uBAAyB7Z,KAAK8Z,0BAC3D9Z,KAAK+Z,2BAEJgB,IACH/a,KAAK4Z,iBAAkB,EAE3B,CACA,OAAAjU,GACE3F,KAAKqa,qBAAsC,GAAfra,KAAK0D,KAAK6H,EACxC,CAEA,QAAA1F,GACMiP,OAAOkG,WAAa,MACtBhb,KAAKqa,qBAAsC,GAAfra,KAAK0D,KAAK6H,GACtCvL,KAAK4a,cAAgB5a,KAAK0a,uBAE1B1a,KAAK4a,cAAgB5a,KAAK2a,oBAC1B3a,KAAKib,aACLjb,KAAKuD,QAAQyD,SAAS5C,IACpBpE,KAAKsa,UAAUlW,EAAO,IAG5B,CAEQ,UAAA6W,GACNjb,KAAKyZ,aAAe,EACpBzZ,KAAK0Z,aAAe,EACpB1Z,KAAK4Z,iBAAkB,EACvB5Z,KAAK2Z,mBAAqB3Z,KAAK6Z,sBACjC,CAEA,aAAAtV,GACEvE,KAAKib,YACP,CAEA,YAAAzW,GACExE,KAAKib,aACLjb,KAAKwZ,aAAe,EAEpB,IAAK,IAAInL,EAAI,EAAGA,EAAIrO,KAAKuD,QAAQ6I,OAAQiC,IAAK,CAC5C,IAAIjK,EAASpE,KAAKuD,QAAQ8K,GAC1B,MAAMkM,EAAmB,yBACzBnW,EAAOC,GAAGqE,MAAM+R,UAAYF,EAC5BnW,EAAOC,GAAGqE,MAAM2C,YAAY,UAAWrL,KAAK0D,KAAK8W,GAAGtO,W,CAExD,CAEA,QAAAtG,CAASlC,GACP1D,KAAK6a,oBAAqC,IAAlB7a,KAAK0D,KAAKwX,KAClClb,KAAK0Z,aAAe/N,KAAKC,IAAI5L,KAAKka,iBAAkBla,KAAK0Z,aAAe1Z,KAAKga,mBAC7Eha,KAAKyZ,aAAe9N,KAAKE,IAAI7L,KAAKia,iBAAkBtO,KAAKC,IAAI5L,KAAKka,iBAAkBla,KAAKyZ,aAAezZ,KAAK2Z,qBAC7G3Z,KAAK0D,KAAK8W,GAAK7O,KAAKC,IAAI5L,KAAKoa,aAAczO,KAAKE,IAAI7L,KAAKma,aAAcna,KAAK0D,KAAKxB,EAAIlC,KAAKyZ,aAAezZ,KAAK0Z,eAC9G1Z,KAAKuD,QAAQyD,SAAS5C,IACpBA,EAAOC,GAAGqE,MAAM2C,YAAY,UAAWrL,KAAK0D,KAAK8W,GAAGtO,WAAW,IAEjElM,KAAKwZ,aAAexZ,KAAK0D,KAAKxB,EAC9BlC,KAAK4a,eACP,ECtHK,MAAMO,UAAmB3U,EAC9B,WAAAxD,CAAYC,GACVwD,MAAMxD,GACNjD,KAAKyD,QAAU,MACjB,CACA,YAAAe,GACExE,KAAKuD,QAAQyD,SAAS5C,IACpBA,EAAOC,GAAGqE,MAAM2C,YAAY,SAAU,IAAI,GAE9C,CACA,QAAAtF,CAASrC,GACP1D,KAAKuD,QAAQyD,SAAS5C,IACpBA,EAAOC,GAAGqE,MAAM2C,YAAY,SAAUrL,KAAK0D,KAAKxB,EAAEgK,WAAW,GAEjE,ECbK,MAAMkP,UAAuBpQ,EAElC,WAAAhI,CAAYC,GACVwD,MAAMxD,GAcA,KAAAoY,cAAgB,CAACjX,EAAsBsH,KAC7C,IAAI6O,EAAmB,kBACrBnW,EAAO2H,YAAoB,mBAAqB/L,KAAK0D,KAAK6H,GAAKnH,EAAO2H,YAAoB,2BAA6BL,EAAWtH,EAAO2H,YAAoB,mBAAqB/L,KAAK0D,KAAK6H,GAAKnH,EAAO2H,YAAoB,iCAE9N3H,EAAOC,GAAGqE,MAAM+R,UAAYF,EAC5BnW,EAAO+H,SAASnF,SAAS7E,IACvBA,EAAQuG,MAAM+R,UAAYF,CAAgB,GAC1C,EAGI,KAAAe,qBAAuB,KAC7Btb,KAAKuD,QAAQyD,SAAS5C,IACpBpE,KAAKqb,cAAcjX,EAAQA,EAAO2H,YAAoB,YAAY,GAClE,EAEI,KAAAwP,oBAAsB,OACtB,KAAAC,cAAgBxb,KAAKsb,qBA7B3Btb,KAAKyD,QAAU,UACjB,CAEA,UAAAS,CAAWC,EAAkBC,EAAsBC,EAAiBC,G,QAClE,IAAImX,EAAmB7Y,WAA6C,QAAlC,EAAA0B,EAAW,+BAAuB,QAAItE,KAAKoD,gBAAgBtB,oBAC7FsC,EAAOiH,YAAY,0BAAkC,GAAMoQ,EAAZ,IAC/CrX,EAAOiH,YAAY,wBAAyB,GAAM,IAAO,EAAIoQ,IAC7DrX,EAAOiH,YAAY,kBAAmBzI,WAAwC,QAA7B,EAAA0B,EAAW,0BAAkB,QAAItE,KAAKoD,gBAAgBrB,iBACvGqC,EAAOiH,YAAoB,eAAgBjH,EAAO2H,YAAoB,mBAAqB/L,KAAK0D,KAAK6H,IACrGnH,EAAOiH,YAAoB,aAAcjH,EAAO2H,YAAoB,mBAAqB/L,KAAK0D,KAAK6H,IACnG9E,MAAMvC,WAAWC,EAAUC,EAAQC,EAAIC,EACzC,CAqBA,QAAAyB,CAASrC,GACP+C,MAAMV,SAASrC,GACf1D,KAAKwb,eACP,CAEA,QAAA3V,GACMiP,OAAOkG,WAAa,KACtBhb,KAAKwb,cAAgBxb,KAAKsb,sBAE1Btb,KAAKwb,cAAgBxb,KAAKub,oBAC1Bvb,KAAKuD,QAAQyD,SAAS5C,IACpBpE,KAAKqb,cAAcjX,EAAQ,GAAG,IAGpC,ECpDK,MAAMsX,EAgBX,WAAA1Y,CAAY8D,EAAe5D,EAA8BQ,GAdlD,KAAAiY,QAAkB,EAClB,KAAAC,mBAA6B,EAC7B,KAAAC,KAAe,GAEf,KAAA3Z,EAAI,EACD,KAAA4Z,GAAa,EAGhB,KAAAvX,cAAgB,OAChB,KAAAC,aAAe,OACf,KAAAC,kBAAoB,OAW3B,KAAAsX,aAAoB,KAClB/b,KAAKgc,gBAAgBjF,SAAS,EAAG/W,KAAK0D,KAAKoI,EAAE,EAMrC,KAAAmQ,iBAA8C,WAbtDjc,KAAK8O,EAAIhI,EACT9G,KAAKkD,SAAWA,EAChBlD,KAAK0D,KAAOA,EACZ1D,KAAKgc,gBAAkBlH,MACzB,CAKA,QAAAlP,GAAkB,CAClB,OAAAM,CAAQD,GAAe,CACvB,QAAAF,CAASE,GAAe,CAGxB,mBAAIiW,CAAgBA,GAElBlc,KAAKic,iBAAmBC,EACK,YAAzBlc,KAAKic,iBACPjc,KAAK+b,aAAe,KAElB/b,KAAKgc,gBAAgBjF,SAAS,EAAG/W,KAAK0D,KAAKoI,EAAE,EAEb,cAAzB9L,KAAKic,mBACdjc,KAAK+b,aAAe,KAClB/b,KAAKgc,gBAAgBjF,SAAS/W,KAAK0D,KAAKoI,EAAG,EAAE,EAGnD,EC1CK,MAAMqQ,UAA4BT,EACvC,WAAA1Y,CAAY8D,EAAe5D,EAA8BQ,GACvD+C,MAAMK,EAAU5D,EAAUQ,GAC1B1D,KAAK6b,KAAO,QACd,CACO,QAAAjW,GACL,GAAiB,GAAb5F,KAAK0D,KAAKoL,EAAM,CAClB,IAAIsN,EAAQpc,KAAK0D,KAAKoL,EAAI9O,KAAKkD,SAASmZ,gBACxCrc,KAAK0D,KAAKoL,GAAKsN,EACfpc,KAAK0D,KAAKxB,EAAIka,EAEVzQ,KAAKsF,IAAIjR,KAAK0D,KAAKxB,GAAK,KAC1BlC,KAAK0D,KAAKoL,EAAI,EACd9O,KAAK0D,KAAKxB,EAAI,EACdlC,KAAKwE,e,CAGX,CACO,QAAAuB,CAASE,GACdjG,KAAK0D,KAAKoI,EAAI9L,KAAK8O,EAAEpF,gBAAgB4S,UACrCtc,KAAK0D,KAAKoT,EAAI9W,KAAK8O,EAAEpF,gBAAgB4S,SACvC,CAEO,OAAApW,CAAQD,GACb,GAAgB,GAAZA,EAAE2Q,OAAa,CACE,GAAf5W,KAAK0D,KAAKoL,GACZ9O,KAAKuE,gBAEP,IAAIgY,EAAYtW,EAAE2Q,OACC,GAAf5W,KAAK0D,KAAKoT,IACZ9W,KAAK0D,KAAKoL,GAAKnD,KAAKE,IAAI,EAAG5F,EAAE2Q,SAE/B5W,KAAK0D,KAAKoL,GAAKyN,C,CAEnB,EClCK,MAAMC,UAA4Bd,EACvC,WAAA1Y,CAAY8D,EAAe5D,EAA8BQ,GACvD+C,MAAMK,EAAU5D,EAAUQ,GAC1B1D,KAAK6b,KAAO,SACd,CAEO,QAAAjW,GAAY,CAEZ,OAAAM,CAAQD,GACbA,EAAEwW,gBACJ,CAEO,QAAA1W,CAASE,GACdA,EAAEwW,gBACJ,ECdF,MAAMC,EACY,kBADZA,EAES,eAGR,MAAMC,UAA2BjB,EAStC,WAAA1Y,CAAY8D,EAAe5D,EAA8BQ,GACvD+C,MAAMK,EAAU5D,EAAUQ,GATZ,KAAAmY,KAAe,UACvB,KAAAe,yBAA0B,EAC1B,KAAAC,yBAA+B,EACtB,KAAAC,kBAAoB,GAC7B,KAAAP,UAAoB,EACpB,KAAAQ,gBAA0B,EA6B1B,KAAAX,MAAgB,CAxBxB,CAEQ,qBAAAY,CAAsBC,GACS,OAAjCjd,KAAK6c,yBAIT7c,KAAK0D,KAAKwX,IAAM+B,EAChBjd,KAAKyE,oBAELqC,SAAS4C,gBAAgBtC,UAAU8V,OAAOR,EAA4BO,GACtEnW,SAAS4C,gBAAgBtC,UAAU8V,OAAOR,GAA0BO,IAPlEjd,KAAK6c,wBAA0BI,CAQnC,CAEO,UAAAE,GACLnd,KAAK0D,KAAKxB,EAAI,EACdlC,KAAK0D,KAAKoL,EAAI,EACd9O,KAAK0D,KAAKoT,EAAI9W,KAAK0D,KAAKoI,EACxB9L,KAAK2b,QAAS,EACd3b,KAAK+b,eACLjV,SAAS4C,gBAAgBtC,UAAUoK,OAAOkL,EAAyBA,GACnE1c,KAAK6c,wBAA0B,IACjC,CAGO,QAAAjX,G,QAEL,GAAI5F,KAAK4c,wBAIP,OAHA5c,KAAK4c,yBAA0B,EAC/B5c,KAAK0D,KAAKoT,EAAmC,QAA/B,EAAoB,QAApB,EAAA9W,KAAKgc,uBAAe,eAAEM,iBAAS,QAAIxV,SAAS4C,gBAAgB4S,eAC1Etc,KAAK0D,KAAKoI,EAAI9L,KAAK0D,KAAKoT,GAG1B,GAAmB,GAAf9W,KAAK0D,KAAKoL,EAAQ,CACpB9O,KAAKoc,MAAQpc,KAAK0D,KAAKoL,EAAI9O,KAAKkD,SAASmZ,gBACzCrc,KAAK0D,KAAKoT,EAAInL,KAAKC,IAAID,KAAKE,IAAI,EAAG7L,KAAK0D,KAAKoT,EAAI9W,KAAKoc,OAAQpc,KAAK0D,KAAKmH,IACxE7K,KAAK0D,KAAKoL,GAAK9O,KAAKoc,MACpBpc,KAAK0D,KAAKxB,GAAKlC,KAAK0D,KAAKoT,EAAI9W,KAAK0D,KAAKoI,GAAK9L,KAAKkD,SAASka,MAE1D,MAAMC,EAAc1R,KAAKsF,IAAIjR,KAAK0D,KAAKxB,GACnClC,KAAK0D,KAAKxB,EAAI,EAChBlC,KAAK0D,KAAKoI,EAAIH,KAAK2R,KAAKtd,KAAK0D,KAAKoI,EAAI9L,KAAK0D,KAAKxB,GAEhDlC,KAAK0D,KAAKoI,EAAIH,KAAK0N,MAAMrZ,KAAK0D,KAAKoI,EAAI9L,KAAK0D,KAAKxB,GAEnDlC,KAAKgd,sBAAsBhd,KAAK0D,KAAKxB,EAAI,GACrCmb,EAAcrd,KAAK8c,mBACrB9c,KAAKmd,aACLnd,KAAKwE,iBAGLxE,KAAK2b,QAAS,EACV3b,KAAK+c,iBAAmB/c,KAAK0D,KAAKoI,IACpC9L,KAAK+c,gBAAkB/c,KAAK0D,KAAKoI,EACjC9L,KAAK+b,gB,CAIb,CAIO,OAAA7V,CAAQD,GAGb,GAFAA,EAAEwW,iBACFzc,KAAKuc,UAAYtW,EAAE2Q,OACI,IAAnB5W,KAAKuc,UAAiB,OACN,IAAhBvc,KAAK0D,KAAKoL,GACV9O,KAAKuE,gBAET,IAAI2X,EAAkBvQ,KAAK4R,KAAKvd,KAAKuc,WAChB,IAAhBvc,KAAK0D,KAAKoT,GAAWoF,EAAkB,GAAOlc,KAAK0D,KAAKoT,IAAM9W,KAAK0D,KAAKmH,IAAMqR,EAAkB,IACrGlc,KAAK0D,KAAKoL,GAAK9O,KAAKuc,UACtB,CAGO,QAAAxW,CAASE,GAETjG,KAAK2b,SACR3b,KAAK4c,yBAA0B,EAMnC,ECzGK,MAAMY,EAAb,cACU,KAAAC,GAAa,GACb,KAAAC,GAAa,GAiBvB,CAfE,SAAWN,GACT,OAAOpd,KAAKyd,EACd,CACA,mBAAWpB,GACT,OAAOrc,KAAK0d,EACd,CAEA,mBAAWrB,CAAgBe,GACzBpd,KAAK0d,GAAKN,CACZ,CACA,SAAWA,CAAMA,GACfpd,KAAKyd,GAAKL,CACZ,ECKK,MAAMO,UAAoBnX,EAC/B,WAAAxD,CAAYC,GACVwD,MAAMxD,GACNjD,KAAKyD,QAAU,OACjB,CAEA,OAAAkC,GAAiB,CACjB,QAAAE,GACEiB,SAASC,iBAAiB,6BAA6BC,SAAS7E,IAC9D,MAAMyb,EAAe5d,KAAK6d,kBAAkB1b,EAAQgF,aAAa,iBAC7DhF,EAAQmL,WAAatN,KAAK8Y,MAAM8E,EAAczb,GAAS2b,OACzD3b,EAAQmL,UAAYtN,KAAK8Y,MAAM8E,EAAczb,GAAS2b,K,GAG5D,CAEA,SAAA9Y,CAAUZ,GACR,IAAIjC,EAAUiC,EAAOC,GACrB,IAAKlC,EAAQiF,UAAU2W,SAAS,YAAa,CAC3C5b,EAAQiF,UAAUC,IAAI,YACtBlF,EAAQ+H,aAAa,wBAAyB/H,EAAQmL,WACtD,MAAMsQ,EAAe5d,KAAK6d,kBAAkB1b,EAAQgF,aAAa,iBAE7DhF,EAAQmL,WAAatN,KAAK8Y,MAAM8E,EAAczb,GAAS2b,OACzD3b,EAAQmL,UAAYtN,KAAK8Y,MAAM8E,EAAczb,GAAS2b,K,CAG5D,CAEQ,iBAAAD,CAAkBG,GACxB,MAAMC,EAAyB,CAC7BC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,SAAU,GACVC,SAAU,GACVC,SAAU,IAqCZ,OAlCIP,GACYA,EAAelF,MAAM,KAE7B9R,SAASiS,IACb,MAAM1K,EAAQ0K,EAAK1K,MAAM,8BAEzB,GAAIA,EAAO,CACT,MAAMiQ,EAASjQ,EAAM,IAAM,GACrBkQ,EAASlQ,EAAM,GACfmQ,EAASnQ,EAAM,GAAKA,EAAM,GAAGuK,MAAM,KAAO,GAChD,OAAQ0F,EAASC,GACf,IAAK,YACFR,EAAQI,SAAmBhZ,KAAKrF,KAAK2e,WAAWD,IACjD,MACF,IAAK,YACFT,EAAQK,SAAmBjZ,KAAKrF,KAAK2e,WAAWD,IACjD,MACF,IAAK,YACFT,EAAQM,SAAmBlZ,KAAKrF,KAAK2e,WAAWD,IACjD,MACF,IAAK,OACFT,EAAQC,KAAe7Y,KAAKrF,KAAK2e,WAAWD,IAC7C,MACF,IAAK,OACFT,EAAQE,KAAe9Y,KAAKrF,KAAK2e,WAAWD,IAC7C,MACF,IAAK,OACFT,EAAQG,KAAe/Y,KAAKrF,KAAK2e,WAAWD,I,KAOhDT,CACT,CAEQ,UAAAU,CAAWD,GACjB,MAAME,EAAkF,CAAEC,MAAO,SAoBjG,OAlBAH,EAAO1X,SAAS8X,IACd,GAAc,QAAVA,EACFF,EAAO3N,KAAM,OACR,GAAI6N,EAAMtc,WAAW,UAAW,CACrC,MAAM+L,EAAQuQ,EAAMvQ,MAAM,yBACtBA,GACFqQ,EAAOtF,OAAS,CAAE1N,IAAKmT,SAASxQ,EAAM,IAAK1C,IAAKkT,SAASxQ,EAAM,KAC/DqQ,EAAOC,MAAQ,UAEfD,EAAOC,MAAQ,Q,KAER,CAAC,QAAS,SAAU,OAAO/Z,SAASga,GAC7CF,EAAOC,MAAQC,EAEfF,EAAOC,MAAQ,O,IAIZD,CACT,CAEO,KAAA9F,CAAMmF,EAAwBe,GAEnC,IAAIvR,EAAOuR,EAAY7X,aAAa,yBACpC,GAAoB,IAAhBsG,EAAKrB,OAAc,MAAO,GAE9BqB,EAAOzN,KAAKif,iBAAiBxR,GAE7B,MAAMtL,EAAU2E,SAASwR,cAAc,QACjC4G,EAAQzR,EAAKqL,MAAM,OACzB,IAAIqG,EAAkB,EAClBC,EAAkB,EACtB,MAAMC,EAAa5R,EAAK6R,QAAQ,MAAO,IAAIlT,OAErCmT,EAAWzY,SAASwR,cAAc,QAClCkH,EAAa1K,OAAO2K,iBAAiBT,GAE3CO,EAAS7W,MAAMgX,WAAaF,EAAWE,WACvCH,EAAS7W,MAAMiX,SAAWH,EAAWG,SACrCJ,EAAS7W,MAAMkX,cAAgBJ,EAAWI,cAC1CL,EAAS7W,MAAMmX,WAAaL,EAAWK,WACvCN,EAAS7W,MAAMoX,WAAaN,EAAWM,WACvCP,EAASnY,UAAUC,IAAI,WACvBP,SAAS2R,KAAKpL,YAAYkS,GAE1B,IAAIQ,EAAsB,GACtBC,EAAqB,GACrBC,EAAmB,EACvBf,EAAMlY,SAAQ,CAACmX,EAAW+B,KACxBX,EAAShH,YAAc4F,EACnBA,EAAK/R,OAAS,IAChBmT,EAAShH,aAAe,KAG1B,MAAM4H,EAAYZ,EAASa,YAErBC,EAAkB,CACtB5S,KAAM0Q,EACNvV,MAAOuX,EACPG,MAAO,IAAI9c,OAECA,MAAM+c,KAAKpC,GACnBnX,SAAQ,CAACoX,EAAMoC,KACnB,MAAMC,EAAkB,CACtBhT,KAAM2Q,GAGRiC,EAAgBC,MAAMjb,KAAKob,EAAgB,IAEzCR,EAAmBE,EAAYnB,EAAYoB,cAC7CL,EAAa1a,KAAK2a,GAClBA,EAAc,GACdC,EAAmB,EACnBd,GAAmBa,EAAY5T,QAEjC4T,EAAY3a,KAAKgb,GACjBJ,GAAoBE,CAAS,IAG/BJ,EAAa1a,KAAK2a,GAElB,IAAIU,GAAiB,EACD,MAAhBzC,EAAQC,MACND,EAAQC,KAAK9R,OAAS,IACxBsU,GAAiB,GAGG,MAApBzC,EAAQM,UACNN,EAAQM,SAASnS,OAAS,IAC5BsU,GAAiB,GAGG,MAApBzC,EAAQI,UACNJ,EAAQI,SAASjS,OAAS,IAC5BsU,GAAiB,GAIrB,IAAIC,EAAkB,EACtB,GAAID,EAIF,IAAK,IAAIrS,EAAI,EAAGA,EAAI0R,EAAa3T,OAAQiC,IACvCrO,KAAK4gB,uBACHvS,EACA0R,EAAa3T,OACb8S,EAAM9S,OACNjK,EACA4d,EAAa1R,GACb4P,EACAkB,EACAE,EACAsB,GAEFA,GAAmBZ,EAAa1R,GAAGjC,YAGrC,IAAK,IAAIiC,EAAI,EAAGA,EAAI0R,EAAa3T,OAAQiC,IACvC0R,EAAa1R,GAAGrH,SAAQ,CAACqZ,EAAsBH,K,QAC7C,GAAIG,EAAgBC,MAAMlU,OAAS,EAAG,CACpC,MAAMyU,EAAW/Z,SAASwR,cAAc,QACxCuI,EAASzZ,UAAUC,IAAI,WACJ,MAAd4W,EAAQG,OAA0B,QAAZ,EAAAH,EAAQG,YAAI,eAAEhS,QAAS,GAA2B,MAApB6R,EAAQK,WAAoC,QAAhB,EAAAL,EAAQK,gBAAQ,eAAElS,QAAS,EAC7GiU,EAAgBC,MAAMtZ,SAAQ,CAACyZ,EAAsBD,KACpD,MAAMM,EAAWha,SAASwR,cAAc,QACxCwI,EAAS1Z,UAAUC,IAAI,WACvByZ,EAASvI,YAAckI,EAAgBhT,KACvCzN,KAAK+gB,aAAaD,EAAU7C,EAAQG,KAAMe,EAAiB,OAAQqB,EAAWnB,GAC9Erf,KAAK+gB,aAAaD,EAAU7C,EAAQK,SAAUkC,EAAW,YAAaA,EAAWH,EAAgB5S,KAAKrB,QACtGyU,EAASxT,YAAYyT,GACrB3B,GAAiB,IAGnB0B,EAAStI,YAAc8H,EAAgB5S,KAIzCzN,KAAK+gB,aAAaF,EAAU5C,EAAQE,KAAMiB,EAAiB,OAAQc,EAAWhB,EAAM9S,QAChFiU,EAAgBC,MAAMlU,OAAS,IACjCyU,EAASvT,WAAa,KAExBnL,EAAQkL,YAAYwT,GACpBzB,G,KAOR,OADAtY,SAAS2R,KAAKuI,YAAYzB,GACnB,CAAEzB,KAAM3b,EAAQmL,UACzB,CAGQ,sBAAAsT,CACNK,EACA7U,EACA8U,EACA/e,EACA6d,EACA/B,EACAkB,EACAE,EACAsB,GAEA,MAAMQ,EAAWra,SAASwR,cAAc,QACxC6I,EAAS/Z,UAAUC,IAAI,WAEvBrH,KAAK+gB,aAAaI,EAAUlD,EAAQC,KAAM+C,EAAW,OAAQ,EAAG7U,GAEhE,IAAIgV,EAAgB,EAChBhC,EAAkB,EAClBiC,EAAiB,EACrBrB,EAAYhZ,SAAQ,CAACqZ,EAAiBH,KACpCmB,GAAkBhB,EAAgB5S,KAAKrB,MAAM,IAE/C4T,EAAYhZ,SAAQ,CAACqZ,EAAiBH,KACpC,GAAIG,EAAgBC,MAAMlU,OAAS,EAAG,CACpC,MAAMyU,EAAW/Z,SAASwR,cAAc,QACxCuI,EAASzZ,UAAUC,IAAI,WAEvBgZ,EAAgBC,MAAMtZ,SAAQ,CAACyZ,EAAsBD,KACnD,MAAMM,EAAWha,SAASwR,cAAc,QACxCwI,EAAS1Z,UAAUC,IAAI,WACvByZ,EAASvI,YAAckI,EAAgBhT,KAEvCzN,KAAK+gB,aAAaD,EAAU7C,EAAQG,KAAMe,EAAiB,OAAQqB,EAAWnB,GAC9Erf,KAAK+gB,aAAaD,EAAU7C,EAAQI,SAAU+C,EAAe,YAAaZ,EAAWa,GACrFrhB,KAAK+gB,aAAaD,EAAU7C,EAAQK,SAAUkC,EAAW,YAAaA,EAAWH,EAAgB5S,KAAKrB,QAEtGyU,EAASxT,YAAYyT,GACrB3B,IACAiC,GAAe,IAGjBphB,KAAK+gB,aACHF,EACA5C,EAAQE,KACRwC,EAAkBvB,EAClB,OACAuB,EAAkBvB,EAClB8B,EAAa,GAEflhB,KAAK+gB,aAAaF,EAAU5C,EAAQM,SAAU2B,EAAW,YAAaA,EAAWF,EAAY5T,QAEzF8T,EAAYF,EAAY5T,OAAS,IACnCyU,EAASvT,WAAa,KAIxB6T,EAAS9T,YAAYwT,GAIrBzB,G,KAIJjd,EAAQkL,YAAY8T,EACtB,CAEQ,YAAAJ,CACNO,EACAC,EACAC,EACA1e,EACA2e,EACAC,GAEIH,GACFA,EAAYva,SAAQ,CAACyX,EAAQkD,KAC3B,IAAInc,EAAQxF,KAAK4hB,eAAenD,EAAQ+C,EAAaC,EAAYC,GAEjE,MAAMG,EAAe7hB,KAAK8hB,qBAAqBhf,EAAM2b,EAAQkD,GAC7DL,EAAK5Y,MAAM2C,YAAYwW,EAAcE,OAAOvc,GAAO,GAGzD,CAEQ,eAAAwc,GACN,MAAMC,EAAYnb,SAASwR,cAAc,QAEzC,OADA2J,EAAU3U,UAAY,IACf2U,CACT,CAEQ,gBAAAhD,CAAiBiD,GACvB,OAAOA,EAAI5C,QAAQ,SAAU,IAC/B,CAEQ,cAAAsC,CACN3D,EACAuD,EACAC,EACAC,GAEA,IAAIlc,EAAQgc,EACZ,GAAsB,WAAlBvD,EAAQY,MAAoB,MACP/O,IAAnBmO,EAAQ3E,SACV2E,EAAQ3E,OAAS,CAAE1N,IAAK,EAAGC,IAAK6V,IAElC,MAAM9V,EAAMqS,EAAQ3E,OAAO1N,KAAO,EAC5BC,EAAMoS,EAAQ3E,OAAOzN,KAAO6V,EAClClc,EAAQmG,KAAK0N,MAAM1N,KAAK2N,UAAYzN,EAAMD,EAAM,IAAMA,C,CAWxD,MATsB,QAAlBqS,EAAQY,MACVrZ,EAAQkc,EAAelc,EAAQ,EACJ,WAAlByY,EAAQY,QACjBrZ,GAAgBmG,KAAK0N,MAAMqI,EAAe,IAGxCzD,EAAQhN,MACVzL,EAAQmG,KAAKsF,IAAIzL,IAEZA,CACT,CAEQ,oBAAAsc,CACNhf,EACA2b,EACAjZ,GAEA,IAAIqc,EAAe,KAAK/e,IAIxB,OAHI2b,EAAOI,QACTgD,GAAgB,IAAIpD,EAAOI,SAEtBgD,CACT,EClYK,MAAMM,EAAb,cACU,KAAAC,oBAA8B,EAC9B,KAAAC,YAAsB,EACtB,KAAA1X,KAAe,EACf,KAAA2X,mBAA6B,EAC7B,KAAAC,gBAA8B,OAC9B,KAAAC,QAAsB,MAsChC,CApCS,KAAAC,CAAMC,GACP1iB,KAAKoiB,qBACTpiB,KAAKqiB,YAAc,IAAOK,EAC1B1iB,KAAK2K,KAAOgY,YAAYC,MACxB5iB,KAAKoiB,oBAAqB,EAIxBpiB,KAAKwiB,QADI,GAAPE,EACa,KACb1iB,KAAKsiB,mBAAqBtS,uBAAsB,IAAMhQ,KAAKwiB,YAC3DxiB,KAAKuiB,iBAAiB,EAGT,KACb,MAAMK,EAAMD,YAAYC,MAClBC,EAAUD,EAAM5iB,KAAK2K,KACvBkY,EAAU7iB,KAAKqiB,cACjBriB,KAAK2K,KAAOiY,EAAOC,EAAU7iB,KAAKqiB,YAClCriB,KAAKuiB,mBAEPviB,KAAKsiB,mBAAqBtS,uBAAsB,IAAMhQ,KAAKwiB,WAAU,EAGzExiB,KAAKwiB,UACP,CAEO,IAAAM,GACA9iB,KAAKoiB,qBACVW,qBAAqB/iB,KAAKsiB,oBAC1BtiB,KAAKsiB,mBAAqB,EAC1BtiB,KAAKoiB,oBAAqB,EAC5B,CAEO,UAAAY,CAAWC,GAChBjjB,KAAKuiB,gBAAkBU,CACzB,ECxCK,MAAMC,UAA+BrgB,EAS1C,WAAAG,CAAYC,GACVwD,MAAMxD,GAFA,KAAAkgB,aAAe,EAGrBnjB,KAAK+C,MAAQ,CAKf,CAEA,OAAA4C,GACE3F,KAAKojB,OAAStc,SAASwR,cAAc,UACrCtY,KAAKqjB,QAAUrjB,KAAKojB,OAAOE,WAAW,MACtCtjB,KAAKojB,OAAOxa,MAA4B,GAApBkM,OAAOkG,WAC3Bhb,KAAKojB,OAAOva,OAASiM,OAAOyO,YAAc,GAAK,GAC/CvjB,KAAKmjB,aAAerO,OAAOyO,YAAc,GAAK,GAC9CvjB,KAAKojB,OAAO1a,MAAM5E,SAAW,QAC7B9D,KAAKojB,OAAO1a,MAAM8a,OAAY1O,OAAOyO,YAAc,GAAK,GAA7B,KAC3BvjB,KAAKojB,OAAO1a,MAAM2H,KAAO,MACzBrQ,KAAKojB,OAAO1a,MAAM+R,UAAY,mBAC9Bza,KAAKojB,OAAO1a,MAAM+a,gBAAkB,UACpCzjB,KAAKojB,OAAO1a,MAAMgb,OAAS,qCAC3B1jB,KAAKojB,OAAO1a,MAAMib,OAAS,OAC3B7c,SAAS2R,KAAKpL,YAAYrN,KAAKojB,QAE/BpjB,KAAK4jB,gBAAkB,GACvB5jB,KAAK6jB,WAAa7jB,KAAKojB,OAAOxa,MAC9B5I,KAAK8jB,gBAAkB,EACvB9jB,KAAK+jB,eAAiB,CACxB,CAEA,QAAAhe,CAASrC,GACP1D,KAAK8jB,gBAAkBnY,KAAKsF,IAAIjR,KAAK0D,KAAK8W,IAC1Cxa,KAAK4jB,gBAAgBve,KAAKrF,KAAK8jB,iBAC3B9jB,KAAK4jB,gBAAgBxX,OAASpM,KAAK6jB,YACrC7jB,KAAK4jB,gBAAgBI,QAEvBhkB,KAAKikB,WACP,CAGA,SAAAA,GACE,MAAMC,EAAMlkB,KAAKqjB,QACjBa,EAAIC,UAAU,EAAG,EAAGnkB,KAAKojB,OAAOxa,MAAO5I,KAAKojB,OAAOva,QACnDqb,EAAIE,YAAc,UAClBF,EAAIG,UAAY,EAChBH,EAAIE,YAAc,MAClBF,EAAIG,UAAY,EAChBH,EAAII,YACJtkB,KAAK4jB,gBAAgB5c,SAAQ,CAACud,EAAU/e,KACtC,MAAM4K,EAAI5K,EACJ+K,EAAIvQ,KAAKojB,OAAOva,OAAS0b,EAAMvkB,KAAKmjB,aAC5B,IAAV3d,EACF0e,EAAIM,OAAOpU,EAAGG,GAEd2T,EAAIO,OAAOrU,EAAGG,E,IAGlB2T,EAAIQ,QACN,CAEA,iBAAAC,CAAkB7gB,GAChB9D,KAAK+jB,eAAiBjgB,CACxB,ECvEK,MAAM8gB,UAAyB/hB,EAKpC,WAAAG,CAAYC,GACVwD,MAAMxD,GALA,KAAA4hB,UAAoB,EAM1B7kB,KAAK+C,MAAQ,CACf,CACQ,oBAAA+hB,GACN9kB,KAAK+kB,eAAiBje,SAASwR,cAAc,OAC7CtY,KAAK+kB,eAAerc,MAAM5E,SAAW,QACrC9D,KAAK+kB,eAAerc,MAAM8a,OAAS,OACnCxjB,KAAK+kB,eAAerc,MAAMsc,MAAQ,OAClChlB,KAAK+kB,eAAerc,MAAM+a,gBAAkB,UAC5CzjB,KAAK+kB,eAAerc,MAAMgb,OAAS,qCACnC1jB,KAAK+kB,eAAerc,MAAMib,OAAS,OACnC3jB,KAAK+kB,eAAe7a,aAAa,WAAY,KAC7CpD,SAAS2R,KAAKpL,YAAYrN,KAAK+kB,gBAC/B,MAAMrc,EAAQ5B,SAASwR,cAAc,SACrC5P,EAAM4E,UAAY,+PAWlBxG,SAAS0R,KAAKnL,YAAY3E,EAC5B,CACA,OAAA/C,GACE3F,KAAK8kB,uBACL9kB,KAAKilB,WAAaC,aAAY,KAC5BllB,KAAK+kB,eAAe7a,aAAa,MAAO,GAAGlK,KAAK6kB,aAChD7kB,KAAK6kB,UAAY,CAAC,GACjB,IACL,CAEA,QAAAjf,CAASlC,GACP1D,KAAK6kB,WACP,CAEA,UAAAngB,GACEygB,cAAcnlB,KAAKilB,YACnBne,SAAS2R,KAAKuI,YAAYhhB,KAAK+kB,eACjC,EChDK,MAAMK,UAA0BviB,EAOrC,WAAAG,CAAYC,GACVwD,MAAMxD,GACNjD,KAAK+C,MAAQ,CAKf,CAEA,OAAA4C,GACE3F,KAAKojB,OAAStc,SAASwR,cAAc,UACrCtY,KAAKqjB,QAAUrjB,KAAKojB,OAAOE,WAAW,MACtCtjB,KAAKojB,OAAOxa,MAA4B,GAApBkM,OAAOkG,WAC3Bhb,KAAKojB,OAAOva,OAASiM,OAAOyO,YAAc,GAAK,GAC/CvjB,KAAKojB,OAAO1a,MAAM5E,SAAW,QAC7B9D,KAAKojB,OAAO1a,MAAM8a,OAAS,OAC3BxjB,KAAKojB,OAAO1a,MAAM2H,KAAO,MACzBrQ,KAAKojB,OAAO1a,MAAM+R,UAAY,mBAC9Bza,KAAKojB,OAAO1a,MAAM+a,gBAAkB,UACpCzjB,KAAKojB,OAAO1a,MAAMgb,OAAS,qCAC3B1jB,KAAKojB,OAAO1a,MAAMib,OAAS,OAC3B7c,SAAS2R,KAAKpL,YAAYrN,KAAKojB,QAE/BpjB,KAAK4jB,gBAAkB,GACvB5jB,KAAK6jB,WAAa7jB,KAAKojB,OAAOxa,MAC9B5I,KAAK8jB,gBAAkB,EACvB9jB,KAAK+jB,eAAiB,CACxB,CAEA,QAAAhe,CAASrC,GACP1D,KAAK8jB,gBAAkBnY,KAAKsF,IAAIjR,KAAK0D,KAAKxB,GAC1ClC,KAAK4jB,gBAAgBve,KAAKrF,KAAK8jB,iBAC3B9jB,KAAK4jB,gBAAgBxX,OAASpM,KAAK6jB,YACrC7jB,KAAK4jB,gBAAgBI,QAEvBhkB,KAAKikB,WACP,CAGA,SAAAA,GACE,MAAMC,EAAMlkB,KAAKqjB,QACjBa,EAAIC,UAAU,EAAG,EAAGnkB,KAAKojB,OAAOxa,MAAO5I,KAAKojB,OAAOva,QACnDqb,EAAIE,YAAc,UAClBF,EAAIG,UAAY,EAChBH,EAAIE,YAAc,UAClBF,EAAIG,UAAY,EAChBH,EAAII,YACJtkB,KAAK4jB,gBAAgB5c,SAAQ,CAACud,EAAU/e,KACtC,MAAM4K,EAAI5K,EACJ+K,EAAIvQ,KAAKojB,OAAOva,OAAS0b,EAAM,EACvB,IAAV/e,EACF0e,EAAIM,OAAOpU,EAAGG,GAEd2T,EAAIO,OAAOrU,EAAGG,E,IAGlB2T,EAAIQ,QACN,CAEA,iBAAAC,CAAkB7gB,GAChB9D,KAAK+jB,eAAiBjgB,CACxB,ECpEK,MAAMuhB,UAA8BxiB,EAKzC,WAAAG,CAAYC,GACVwD,MAAMxD,GALA,KAAA4hB,UAAoB,EAM1B7kB,KAAK+C,MAAQ,CACf,CACQ,oBAAA+hB,GACN9kB,KAAK+kB,eAAiBje,SAASwR,cAAc,OAC7CtY,KAAK+kB,eAAerc,MAAM5E,SAAW,QACrC9D,KAAK+kB,eAAerc,MAAM8a,OAAS,OACnCxjB,KAAK+kB,eAAerc,MAAM2H,KAAO,OACjCrQ,KAAK+kB,eAAerc,MAAM+a,gBAAkB,UAC5CzjB,KAAK+kB,eAAerc,MAAMgb,OAAS,qCACnC1jB,KAAK+kB,eAAerc,MAAMib,OAAS,OACnC3jB,KAAK+kB,eAAe7a,aAAa,gBAAiB,KAClDpD,SAAS2R,KAAKpL,YAAYrN,KAAK+kB,gBAC/B,MAAMrc,EAAQ5B,SAASwR,cAAc,SACrC5P,EAAM4E,UAAY,2RAWlBxG,SAAS0R,KAAKnL,YAAY3E,EAC5B,CACA,OAAA/C,GACE3F,KAAK8kB,sBACP,CAEA,QAAA/e,CAASrC,GACP,IAAI4hB,EAAY,GACZ5hB,EAAKoI,EAAIpI,EAAKoT,IAChBwO,EAAY,KAEV5hB,EAAKoI,EAAIpI,EAAKoT,IAChBwO,EAAY,KAEdtlB,KAAK+kB,eAAe7a,aAAa,YAAaob,GAC9CtlB,KAAK+kB,eAAe7a,aAAa,QAAS,GAAGlK,KAAK0D,KAAKoI,IACzD,CAEA,QAAAlG,CAASlC,GACP1D,KAAK6kB,WACP,CAEA,UAAAngB,GACEoC,SAAS2R,KAAKuI,YAAYhhB,KAAK+kB,eACjC,EC1DK,MAAMQ,EACX,OAAAzb,CAAQ7D,EAAQuf,EAAW1W,EAAS,MAClC,OAA4B,MAArB7I,EAAEkB,aAAaqe,GAAa1W,EAAI7I,EAAEkB,aAAaqe,EACxD,ECHK,MAAMC,EACX,OAAA3b,CAAQ7D,GACN,OAAOA,EAAEiK,uBACX,ECHK,MAAMwV,EAAb,cACE,KAAAC,MAAa,KAEb,KAAA7O,EAAY,EACZ,KAAAhL,EAAY,EACZ,KAAAgD,EAAY,EACZ,KAAA5M,EAAY,EACZ,KAAAsY,GAAa,EACb,KAAAU,KAAe,EAEf,KAAArQ,GAAa,EACb,KAAA+a,GAAa,EACb,KAAAra,GAAa,EACb,KAAAsa,KAAe,EAEf,KAAA3O,IAAc,EACd,KAAAd,IAAc,EAEd,KAAA0P,GAAU,CAAC1V,EAAE,EAAEG,EAAE,GAEjB,KAAAwV,KAAe,EACf,KAAAC,KAAe,EACf,KAAA7N,GAAgC,WAEhC,KAAAD,GAAuC,QACzC,ECzBO,MAAM+N,EAAb,cAEU,KAAAC,YAA4C,IAAI5iB,IAChD,KAAAU,OAA0B,IAAIR,KAqCxC,CApCE,EAAA2iB,CAAGjhB,EAAYkhB,G,MACoB,GAA5BpmB,KAAKkmB,YAAY/gB,IAAID,IACxBlF,KAAKkmB,YAAY9gB,IAAIF,EAAI,IAEH,QAAxB,EAAAlF,KAAKkmB,YAAY1lB,IAAI0E,UAAG,SAAEG,KAAK+gB,GAC/BpmB,KAAKqmB,iBACP,CACO,GAAAlhB,CAAID,GACT,OAAOlF,KAAKkmB,YAAY/gB,IAAID,EAC9B,CACO,IAAA8D,CAAK9D,EAAYlE,G,MAClBhB,KAAKkmB,YAAY/gB,IAAID,KACC,QAAxB,EAAAlF,KAAKkmB,YAAY1lB,IAAI0E,UAAG,SAAE8B,SAASof,IACjCA,EAAMplB,EAAM,IAGlB,CACO,GAAAslB,CAAIphB,EAAYkhB,GACrB,IAAIG,EAAKvmB,KAAKkmB,YAAY1lB,IAAI0E,GACtB,MAAJqhB,GACFvmB,KAAKkmB,YAAY9gB,IAAIF,EAAIqhB,EAAGC,QAAQC,GAAWA,IAAML,KAEvDpmB,KAAKqmB,iBACP,CACO,GAAA1Z,CAAI3L,GACThB,KAAKgE,OAAOgD,SAAQof,IAClBA,EAAMplB,EAAM,GAEhB,CACQ,eAAAqlB,GACN7iB,MAAM+c,KAAKvgB,KAAKkmB,YAAYQ,UAAU1f,SAAQ2f,IAC5CA,EAAa3f,SAAQof,IACnBpmB,KAAKgE,OAAOqB,KAAK+gB,EAAM,GACvB,GAEN,ECbK,MAAMQ,EACX,OAAA9c,CAAQ7D,EAAQ4gB,EAAiB/f,SAAS2R,MACxC,IAAIqO,EACJ,IACEA,EAAKD,EAAU3W,uB,CACf,MAAOtC,GACPkZ,EAAKhgB,SAAS2R,KAAKvI,uB,CAErB,IAAI6W,EAlCR,SAA2B1iB,GACzB,IAAI,IAAEmM,EAAG,KAAEH,EAAI,MAAEzH,EAAK,OAAEC,GAAWxE,EAAG6L,wBAClC8W,EAaJ,SAAwB3iB,GAEtB,OADgByQ,OAAO2K,iBAAiBpb,GAAIoW,UAEzC3B,MAAM,WACNrW,MAAM,GAAI,GACV0W,KAAI,SAAUjX,GACb,OAAOU,WAAWV,EACpB,GACJ,CArBmB+kB,CAAe5iB,GAClC,GAA2B,GAAvB2iB,EAAa5a,OAAa,CAC5B,IAAI0K,EAAIkQ,EACR,IAAIE,EAAMpQ,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GACjC,MAAO,CACLlO,MAAOA,EAAQkO,EAAE,IAAM,EAAI,EAAIA,EAAE,GACjCjO,OAAQA,EAASiO,EAAE,IAAM,EAAI,EAAIA,EAAE,GACnCzG,MAAOA,EAAOyG,EAAE,GAAKtG,EAAMsG,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAAMoQ,EAC/D1W,MAAOH,EAAOyG,EAAE,GAAKtG,EAAMsG,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAAMoQ,E,CAGjE,MAAO,CAAE1W,MAAKH,OAAMzH,QAAOC,SAW/B,CAUase,CAAkBlhB,GAG3B,MAAO,CAAEuK,IAFDuW,EAAGvW,IAAMsW,EAAGtW,IAEHH,KADR0W,EAAG1W,KAAOyW,EAAGzW,KAExB,ECDF,SAAS+W,IACP,MAAO,iBAAkBtS,QAAUuS,UAAUC,eAAiB,CAChE,CAEA,MAAMC,EA4CJ,mBAAIrL,GACF,OAAOlc,KAAK0D,KAAKyU,EACnB,CAEA,mBAAI+D,CAAgBA,GAClBlc,KAAK0D,KAAKyU,GAAK+D,EAEflc,KAAKwnB,IAAItL,gBAAkBA,EAC3Blc,KAAKynB,UAAUvL,gBAAkBA,EACjClc,KAAK0nB,WAAWxL,gBAAkBA,EAClClc,KAAK2nB,WAAWzL,gBAAkBA,EAEX,cAAnBA,GACFpV,SAAS4C,gBAAgBtC,UAAUC,IAAI,eACvCP,SAAS4C,gBAAgBtC,UAAUoK,OAAO,eAE1C1K,SAAS4C,gBAAgBtC,UAAUC,IAAI,aACvCP,SAAS4C,gBAAgBtC,UAAUoK,OAAO,gBAG5CxR,KAAK4nB,UACL5nB,KAAK6nB,cACL7nB,KAAK0T,QAAQ1M,SAASnH,IACpBA,EAAOuG,yBAAyB,GAEpC,CACA,mBAAIiW,GACF,OAAOrc,KAAKkD,SAASmZ,eACvB,CACA,mBAAIA,CAAgBe,GAClBpd,KAAKkD,SAASmZ,gBAAkB,GAAM,GAAce,CACtD,CACA,SAAIA,GACF,OAAOpd,KAAKkD,SAASka,KACvB,CACA,SAAIA,CAAMA,GACRpd,KAAKkD,SAASka,MAAQA,CACxB,CAEA,kBAAI0K,GACF,OAAO9nB,KAAK0D,KAAKoI,CACnB,CACA,kBAAIgc,CAAeA,GACjB9nB,KAAK0D,KAAKoI,EAAIgc,EACd9nB,KAAK0D,KAAKoT,EAAIgR,EACdhT,OAAOiC,SAAS,EAAG/W,KAAK0D,KAAKoI,GAC7B,IAAK,IAAIuC,EAAI,EAAGA,EAAIrO,KAAK0T,QAAQtH,OAAQiC,IACvCrO,KAAK0T,QAAQrF,GAAGtI,SAAS/F,KAAK0D,KAGlC,CACA,mBAAIsY,CAAgB6K,GAClB,IAAIkB,EAAiC,MAAhB/nB,KAAK0D,KAAK+Z,GAC3BsK,IACF/nB,KAAK0D,KAAK+Z,GAAGjW,oBAAoB,SAAUxH,KAAKgoB,cAChDhoB,KAAK0D,KAAK+Z,GAAGjW,oBAAoB,SAAUxH,KAAKioB,eAElDjoB,KAAKwnB,IAAIxL,gBAAkB6K,EAC3B7mB,KAAKynB,UAAUzL,gBAAkB6K,EACjC7mB,KAAK0nB,WAAW1L,gBAAkB6K,EAClC7mB,KAAK2nB,WAAW3L,gBAAkB6K,EAClC7mB,KAAK0D,KAAK+Z,GAAKoJ,EACXkB,IACF/nB,KAAK0D,KAAK+Z,GAAGhW,iBAAiB,SAAUzH,KAAKgoB,cAC7ChoB,KAAK0D,KAAK+Z,GAAGhW,iBAAiB,SAAUzH,KAAKioB,eAE/CjoB,KAAK4nB,UACL5nB,KAAK6nB,aACP,CAIA,oBAAIK,CAAiBC,GACnBnoB,KAAKooB,MAAQD,EACbnoB,KAAKqoB,kBACP,CAEA,qBAAIC,CAAkBC,GACpBvoB,KAAKwoB,MAAQD,EACbvoB,KAAKqoB,kBACP,CACQ,gBAAAA,GAMN,OALIroB,KAAK8U,OAAOkG,WAAa,MAAQoM,IACnCpnB,KAAKuX,WAAavX,KAAKooB,MAEvBpoB,KAAKuX,WAAavX,KAAKwoB,MAEjBxoB,KAAKuX,YACX,IAAK,UACHvX,KAAK0D,KAAKwU,GAAK,UACflY,KAAKwnB,IAAMxnB,KAAK2nB,WAChB3nB,KAAK2E,uBACLmC,SAAS4C,gBAAgBhB,MAAM+f,SAAW,SAC1C,MACF,IAAK,UACHzoB,KAAK0D,KAAKwU,GAAK,UACflY,KAAKwnB,IAAMxnB,KAAK0nB,WAChB1nB,KAAK2E,uBACLmC,SAAS4C,gBAAgBhB,MAAM+f,SAAW,OAC1C,MAOF,QACEzoB,KAAK0D,KAAKwU,GAAK,SACflY,KAAKwnB,IAAMxnB,KAAKynB,UAChBznB,KAAK2E,uBACLmC,SAAS4C,gBAAgBhB,MAAM+f,SAAW,OAGhD,CAEA,cA7JQ,KAAA/U,QAAgC,IAAIlQ,MACpC,KAAAklB,UAAkC,IAAIllB,MACtC,KAAAQ,OAAsB,IAAIiiB,EAC1B,KAAAhiB,KAAkB,IAAIke,EAOtB,KAAAwG,GAAa,EACb,KAAAvmB,GAAa,EAKb,KAAAwmB,eAAsC,IAAI7V,EAC1C,KAAA8V,MAAwB,IAAIlW,EAC5B,KAAAmW,WAA8B,IAAIvD,EAClC,KAAAwD,oBAAgD,IAAItD,EACpD,KAAAuD,UAA4B,IAAIpC,EAChC,KAAAqC,iBAA0C,IAAIhoB,EAW5C,KAAAsC,QAAqC,IAAID,IAEzC,KAAA4lB,aAA2B,IAAI1lB,MAEjC,KAAAW,SAAmB,EAEnB,KAAAglB,QAAU,IAAInnB,EACd,KAAAonB,WAAqB,EACrB,KAAA1G,IAAc,EAwEd,KAAAnL,WAA+C,SAC/C,KAAA6Q,MAA+B,UAK/B,KAAAI,MAA0C,SAwN1C,KAAAa,SAAqL,CAC3L,OAAU,SACV,SAAY,YACZ,KAAQ,OACR,OAAU,UACV,OAAU,SACV,cAAe,mBACf,OAAU,SACV,MAAS,QACT,kBAAmB,mBACnB,kBAAmB,mBACnB,gBAAiB,kBA3LjBrpB,KAAKN,KAAOoH,SAAS2R,KACrBzY,KAAK8U,OAASA,OAEd9U,KAAKkD,SAAW,IAAIsa,EACpBxd,KAAK0D,KAAO,IAAIgiB,EAEhB1lB,KAAKynB,UAAY,IAAI9K,EAAmB7V,SAAU9G,KAAKkD,SAAUlD,KAAK0D,MACtE1D,KAAK0nB,WAAa,IAAIvL,EAAoBrV,SAAU9G,KAAKkD,SAAUlD,KAAK0D,MACxE1D,KAAK2nB,WAAa,IAAInL,EAAoB1V,SAAU9G,KAAKkD,SAAUlD,KAAK0D,MAExE1D,KAAKynB,UAAUjjB,aAAexE,KAAKwE,aAAakT,KAAK1X,MACrDA,KAAK0nB,WAAWljB,aAAexE,KAAKwE,aAAakT,KAAK1X,MACtDA,KAAK2nB,WAAWnjB,aAAexE,KAAKwE,aAAakT,KAAK1X,MAEtDA,KAAKynB,UAAUhjB,kBAAoBzE,KAAKyE,kBAAkBiT,KAAK1X,MAC/DA,KAAK0nB,WAAWjjB,kBAAoBzE,KAAKyE,kBAAkBiT,KAAK1X,MAChEA,KAAK2nB,WAAWljB,kBAAoBzE,KAAKyE,kBAAkBiT,KAAK1X,MAEhEA,KAAKynB,UAAUljB,cAAgBvE,KAAKuE,cAAcmT,KAAK1X,MACvDA,KAAK0nB,WAAWnjB,cAAgBvE,KAAKuE,cAAcmT,KAAK1X,MACxDA,KAAK2nB,WAAWpjB,cAAgBvE,KAAKuE,cAAcmT,KAAK1X,MAExDA,KAAKwnB,IAAMxnB,KAAKynB,UAChBznB,KAAKgc,gBAAkBlH,OACvB9U,KAAK0D,KAAK+Z,GAAKzd,KAAK8U,OAEpB9U,KAAK0D,KAAKyU,GAAK,WACfrR,SAAS4C,gBAAgBtC,UAAUC,IAAI,aAEvCrH,KAAKspB,YAActpB,KAAKupB,aAAa7R,KAAK1X,MAC1CA,KAAKgoB,aAAehoB,KAAKwb,cAAc9D,KAAK1X,MAC5CA,KAAKioB,aAAejoB,KAAK6F,SAAS6R,KAAK1X,MACvCA,KAAKwpB,gBAAkBxpB,KAAKypB,iBAAiB/R,KAAK1X,MACjC,IAAI0pB,gBAAe,KAClClmB,MAAM+c,KAAKvgB,KAAKuD,QAAQmjB,UAAU1f,SAAS5C,IACzCpE,KAAK2pB,YAAYvlB,EAAOC,GAAID,EAAO,IAErCpE,KAAK6F,UAAU,IAGR+jB,QAAQ9iB,SAAS4C,iBAC1B1J,KAAKiE,KAAK+e,YAAW,KACnBhjB,KAAK4a,eAAe,IAEtB5a,KAAK4nB,UAEL5nB,KAAKmmB,GAAG,eAAe,KACrBnmB,KAAK4nB,SAAS,IAGhB9gB,SAASW,iBAAiB,oBAAoB,KACxCX,SAAS+iB,OACX7pB,KAAKiE,KAAK6e,OAEV9iB,KAAKiE,KAAKwe,MAAMziB,KAAK0iB,I,GAG3B,CAEO,kBAAOoH,GAIZ,OAHKvC,EAAWlZ,IACdkZ,EAAWlZ,EAAI,IAAIkZ,GAEdA,EAAWlZ,CACpB,CAEO,KAAA0b,CAASjnB,GAEd,OADoB9C,KAAK0T,QAAQsW,MAAMnqB,GAAgBA,aAAkBiD,GAE3E,CAEO,GAAAmnB,CAAIC,EAAkChnB,EAAgB,MAE3D,MAAMrD,EAAS,IAAIqqB,EACjB,CACExmB,KAAM1D,KAAK0D,KACXC,KAAM3D,KAAK6oB,MACXjlB,UAAW5D,KAAK8oB,WAChBjlB,mBAAoB7D,KAAK+oB,oBACzBjlB,SAAU9D,KAAKgpB,UACfjlB,cAAe/D,KAAK4oB,eACpB5kB,OAAQhE,KAAKgE,OACbC,KAAMjE,KAAKiE,KACXb,gBAAiBpD,KAAKipB,iBACtB9lB,OAAQnD,KAAKmpB,SAEfjmB,GAGiB,GAAfrD,EAAOiD,MACT9C,KAAK0T,QAAQrO,KAAKxF,GAED,GAAfA,EAAOiD,MACT9C,KAAK0oB,UAAUrjB,KAAKxF,EAExB,CACO,KAAA4iB,CAAMC,GACX1iB,KAAK0iB,IAAMA,EACX1iB,KAAK0D,KAAK+Z,GAAGhW,iBAAiB,SAAUzH,KAAKgoB,cAC7ChoB,KAAK0D,KAAK+Z,GAAGhW,iBAAiB,SAAUzH,KAAKioB,cAE7CjoB,KAAKN,KAAK+H,iBAAiB,QAASzH,KAAKspB,YAAa,CAAEa,SAAS,IACjEnqB,KAAKN,KAAK+H,iBAAiB,YAAazH,KAAKwpB,iBAS7CxpB,KAAKiE,KAAKwe,MAAMC,GAChB5b,SAAS4C,gBAAgBtC,UAAUC,IAAI,WAEvC,IAAK,IAAIgH,EAAI,EAAGA,EAAIrO,KAAK0T,QAAQtH,OAAQiC,IACvCrO,KAAK0T,QAAQrF,GAAG1I,UAElB,IAAK,IAAI0I,EAAI,EAAGA,EAAIrO,KAAK0oB,UAAUtc,OAAQiC,IACzCrO,KAAK0oB,UAAUra,GAAG1I,UAGpB3F,KAAK6nB,cACL7nB,KAAKoqB,uBACLpqB,KAAKopB,WAAY,EACjBppB,KAAKgE,OAAOgF,KAAK,QAAS,KAC5B,CAEQ,oBAAArE,GACN,IAAK,IAAI0J,EAAI,EAAGA,EAAIrO,KAAK0T,QAAQtH,OAAQiC,IACvCrO,KAAK0T,QAAQrF,GAAG1J,uBAElB,IAAK,IAAI0J,EAAI,EAAGA,EAAIrO,KAAK0oB,UAAUtc,OAAQiC,IACzCrO,KAAK0oB,UAAUra,GAAG1J,sBAEtB,CAEQ,WAAAkjB,GACN/gB,SAASC,iBAAiB,YAAYC,SAAS7E,IAC7CnC,KAAKqqB,UAAUloB,EAAe,IAEhC2E,SAASC,iBAAiB,sBAAsBC,SAAS7E,IACvD,IAAImoB,EAAkBtqB,KAAK8oB,WAAWhf,QAAQ3H,EAAS,oBACvD,GAAuB,MAAnBmoB,GAA2BtqB,KAAKuD,QAAQ4B,IAAImlB,GAAkB,CAChE,IAAIC,EAAsBvqB,KAAKuD,QAAQ/C,IAAI8pB,GAChB,MAAvBC,GACFA,EAAoBpe,SAAS9G,KAAKlD,E,KAIxCnC,KAAK0T,QAAQ1M,SAASnH,IACpBA,EAAOgG,WACPhG,EAAOkG,SAAS/F,KAAK0D,MACrB7D,EAAO+F,SAAS5F,KAAK0D,KAAK,GAE9B,CAEO,OAAA8mB,GACLxqB,KAAK8U,OAAOtN,oBAAoB,SAAUxH,KAAKgoB,cAC/ChoB,KAAKN,KAAK8H,oBAAoB,QAASxH,KAAKgoB,cAC5ChoB,KAAK8U,OAAOtN,oBAAoB,SAAUxH,KAAKioB,cAC/CjoB,KAAKN,KAAK8H,oBAAoB,YAAaxH,KAAKwpB,iBAChDxpB,KAAKiE,KAAK6e,OACV9iB,KAAK0T,QAAQ1M,SAASnH,IACpBA,EAAO6E,YAAY,IAErB1E,KAAK0oB,UAAU1hB,SAASnH,IACtBA,EAAO6E,YAAY,IAGrB1E,KAAK0T,QAAU,IAAIlQ,MACnBxD,KAAK0oB,UAAY,IAAIllB,MAGrBxD,KAAKgE,OAAS,IAAIiiB,CACpB,CAeO,EAAAE,CAAGhmB,EAAiCimB,EAAYlhB,EAAa,IAClE,MAAMulB,EAAYzqB,KAAKqpB,SAASlpB,GAAO+E,EAC3B,UAAR/E,GAAmBH,KAAKopB,WACxBhD,IAEJpmB,KAAKgE,OAAOmiB,GAAGsE,EAAWrE,EAC5B,CAEO,GAAAE,CAAInmB,EAAiCimB,EAAYlhB,EAAa,IACjE,MAAMulB,EAAYzqB,KAAKqpB,SAASlpB,GAAO+E,EACvClF,KAAKgE,OAAOsiB,IAAImE,EAAWrE,EAC/B,CAGO,aAAAsE,CAAcxnB,GACkB,MAAjCA,EAAS,uBACXlD,KAAKipB,iBAAiB/nB,kBAAoBgC,EAAS,sBAEb,MAApCA,EAAS,0BACXlD,KAAKipB,iBAAiB9nB,gBAAkB+B,EAAS,yBAEb,MAAlCA,EAAS,wBACXlD,KAAKipB,iBAAiB/nB,kBAAoBgC,EAAS,uBAEd,MAAnCA,EAAS,yBACXlD,KAAKipB,iBAAiB9nB,gBAAkB+B,EAAS,wBAGd,MAAjCA,EAAS,uBACXlD,KAAKipB,iBAAiBznB,gBAAkB0B,EAAS,sBAEb,MAAlCA,EAAS,wBACXlD,KAAKipB,iBAAiBznB,gBAAkB0B,EAAS,uBAEX,MAApCA,EAAS,0BACXlD,KAAKipB,iBAAiBxnB,mBAAqByB,EAAS,yBAEf,MAAnCA,EAAS,yBACXlD,KAAKipB,iBAAiBxnB,mBAAqByB,EAAS,wBAGnB,MAA/BA,EAAS,qBACXlD,KAAKipB,iBAAiB7nB,cAAgB8B,EAAS,oBAEd,MAA/BA,EAAS,qBACXlD,KAAKipB,iBAAiB3nB,cAAgB4B,EAAS,oBAEf,MAA9BA,EAAS,oBACXlD,KAAKipB,iBAAiB5nB,aAAe6B,EAAS,mBAEd,MAA9BA,EAAS,oBACXlD,KAAKipB,iBAAiB1nB,aAAe2B,EAAS,mBAElB,MAA1BA,EAAS,gBACXlD,KAAKipB,iBAAiBvnB,UAAYwB,EAAS,eAGV,MAA/BA,EAAS,qBACXlD,KAAKipB,iBAAiBtnB,eAAiBuB,EAAS,oBAEjB,MAA7BA,EAAS,mBACXlD,KAAKipB,iBAAiBrnB,aAAesB,EAAS,kBAEjB,MAA3BA,EAAS,iBACXlD,KAAKipB,iBAAiBpnB,WAAaqB,EAAS,gBAGN,MAApCA,EAAS,0BACXlD,KAAKipB,iBAAiBnnB,mBAAqBoB,EAAS,yBAEnB,MAA/BA,EAAS,qBACXlD,KAAKipB,iBAAiBlnB,eAAiBmB,EAAS,mBAEpD,CAEU,WAAAymB,CAAYtlB,EAAiBD,G,4BACrC,MAAME,EAAatE,KAAK2qB,iBAAiBtmB,GAC6B,OAAlED,aAAM,EAANA,EAAQ2H,YAAkC,wBAC5C3H,SAAAA,EAAQ2H,YAAkC,qBAAqB6e,cAEG,OAAhExmB,aAAM,EAANA,EAAQ2H,YAAkC,sBAC5C3H,SAAAA,EAAQ2H,YAAkC,mBAAmB6e,cAM/DxmB,EAAOc,GAA4B,QAAvB,EAAAZ,EAAW,oBAAY,QAAI,UAAUtE,KAAKmE,WACtDC,EAAOS,MAA4B,QAApB,EAAAP,EAAmB,cAAC,QAAI,IAAIwU,MAAM,KACjD1U,EAAOjE,IAA8B,QAAxB,EAAAmE,EAAW,qBAAa,QAAItE,KAAKipB,iBAAiBvnB,UAC/D2C,EAAG6F,aAAa,YAAa9F,EAAOc,IAIpC,IAAI2lB,EAAI7qB,KAAK+oB,oBAAoBjf,QAAQzF,GACrCymB,EAAKD,EAAEjiB,MAAQ5I,KAAK0D,KAAKqiB,KACzBgF,EAAKF,EAAEhiB,OAAS7I,KAAK0D,KAAKsiB,KAC9B5hB,EAAOiH,YAAqB,UAAU,GACtCjH,EAAOiH,YAAoB,eAAgBrL,KAAKmpB,QAAQlnB,YACe,QAAnE,EAA+B,QAA/B,EAAAqC,EAAW,4BAAoB,QAAIA,EAAW,6BAAqB,QAAItE,KAAKipB,iBAAiB/nB,kBAC7FmD,EAAIrE,KAAK0D,KAAK6H,GAAI,KAEtBnH,EAAOiH,YAAoB,aAAcrL,KAAKmpB,QAAQlnB,YACqB,QAAvE,EAAkC,QAAlC,EAAAqC,EAAW,+BAAuB,QAAIA,EAAW,8BAAsB,QAAItE,KAAKipB,iBAAiB9nB,gBACjGkD,EAAIrE,KAAK0D,KAAK6H,GAAI,KAEtBnH,EAAOiH,YAAoB,cAGtB,EAHoCrL,KAAKmpB,QAAQlnB,YACiB,QAAnE,EAA+B,QAA/B,EAAAqC,EAAW,4BAAoB,QAAIA,EAAW,6BAAqB,QAAItE,KAAKipB,iBAAiBznB,gBAC7F6C,EAAoB,YAAhBrE,KAAK0D,KAAKyU,GAAmB4S,EAAKD,EAAI,KAE9C1mB,EAAOiH,YAAoB,iBAGtB,EAHuCrL,KAAKmpB,QAAQlnB,YACiD,QAAtG,EAAiE,QAAjE,EAA2B,QAA3B,EAAAqC,EAAW,wBAAgB,QAAIA,EAAW,+BAAuB,QAAIA,EAAW,8BAAsB,QAAItE,KAAKipB,iBAAiBxnB,mBAChI4C,EAAoB,YAAhBrE,KAAK0D,KAAKyU,GAAmB4S,EAAKD,EAAI,KAG9C,IAAIE,EAA2B,YAAhBhrB,KAAK0D,KAAKyU,GACnBnY,KAAKgpB,UAAUlf,QAAQzF,EAAIrE,KAAK0D,KAAK+Z,IAAIjN,IAAMxQ,KAAK0D,KAAKsiB,KACzDhmB,KAAKgpB,UAAUlf,QAAQzF,EAAIrE,KAAK0D,KAAK+Z,IAAIpN,KAAOrQ,KAAK0D,KAAKqiB,KAEhE3hB,EAAOiH,YAAoB,QAAS2f,GACpC5mB,EAAOiH,YAAoB,MAAO2f,GAA4B,YAAhBhrB,KAAK0D,KAAKyU,GAAmB4S,EAAKD,IAChF1mB,EAAOiH,YAAoB,OAAwB,YAAhBrL,KAAK0D,KAAKyU,GAAmB4S,EAAKD,GACrE1mB,EAAOiH,YAAqB,cAA0CyE,IAAhCxL,EAAW,kBACjDF,EAAOiH,YAAqB,oBAAsDyE,IAAtCxL,EAAW,wBACvDF,EAAOiH,YAAqB,WAAoCyE,IAA7BxL,EAAW,eAC9CF,EAAOiH,YAAoB,aAAcyf,EAAK,GAC9C1mB,EAAOiH,YAAoB,cAAe0f,EAAK,GAK/C,IAAIE,EAAejrB,KAAKkpB,aAAa1C,QAAO0E,GAAQA,EAAKhmB,IAAMd,EAAOc,KACtElF,KAAKkpB,aAAelpB,KAAKkpB,aAAa1C,QAAO0E,GAAQA,EAAKhmB,IAAMd,EAAOc,KACvE+lB,EAAajkB,SAAQmkB,GAAe/mB,EAAO+H,SAAS9G,KAAK8lB,EAAYhpB,WAErEnC,KAAK0T,QAAQ1M,SAASnH,IAChBA,EAAO+E,WAAWR,KACpBvE,EAAOqE,WAAWlE,KAAKmE,SAAUC,EAAQC,EAAIC,GAC7CzE,EAAOkF,QAAQX,G,IAInB,IAAIgnB,EAAgBhnB,EAAO2H,YAAoB,gBAC3Csf,EAAcjnB,EAAO2H,YAAoB,cA0BzCuf,EAAkB,CACpB5rB,KAAM,KACN6rB,WAAY,GAAGH,EAA+B,GAAfprB,KAAK0D,KAAK6H,YAAiB8f,EAA6B,GAAfrrB,KAAK0D,KAAK6H,WAClFigB,UAAW,MAITC,EAAgB,CAClB/rB,KAAM,KACN6rB,WAAY,GAAGH,EAAgBhnB,EAAO2H,YAAoB,uBAAuBsf,EAAcjnB,EAAO2H,YAAoB,yBAC1Hyf,UAAW,MAITE,EAAa,IAAIC,sBAtCGC,IACtBA,EAAQ5kB,SAASf,IACXA,EAAE4lB,gBACJ7rB,KAAKgE,OAAOgF,KAAK,mBAAmB5E,EAAOc,MAAM,GACjDd,EAAOuP,UAEP3T,KAAKgE,OAAOgF,KAAK,mBAAmB5E,EAAOc,MAAM,GACjDd,EAAOwP,Q,GAET,GA6BwD0X,GACxDQ,EAAW,IAAIH,sBA3BGC,IACpBA,EAAQ5kB,SAASf,IACXA,EAAE4lB,gBACJ7rB,KAAKgE,OAAOgF,KAAK,UAAU5E,EAAOc,MAAM,GACxCd,EAAOyP,SAEP7T,KAAKgE,OAAOgF,KAAK,UAAU5E,EAAOc,MAAM,GACxCd,EAAO0P,O,GAET,GAkBoD2X,GACxDC,EAAW9B,QAAQvlB,GACnBynB,EAASlC,QAAQvlB,GACjBD,EAAOiH,YAAkC,oBAAqBqgB,GAC9DtnB,EAAOiH,YAAkC,kBAAmBygB,EAC9D,CAEQ,gBAAAnB,CAAiBtmB,GACrB,IAAIC,EAAkC,CAAC,EAIvC,OAHAd,MAAM+c,KAAKlc,EAAGC,YAAY0C,SAAQ+kB,IAC9BznB,EAAWynB,EAAKlQ,MAAQkQ,EAAK/qB,KAAK,IAE/BsD,CACX,CAGA,SAAA+lB,CAAUhmB,GAER,IACID,EAEFA,EADY,MAFDpE,KAAK8oB,WAAWhf,QAAQzF,EAAI,iBAG9B,IAAImP,EAAanP,GAEtBrE,KAAKuD,QAAQ4B,IAAInF,KAAK8oB,WAAWhf,QAAQzF,EAAI,cACtCrE,KAAKuD,QAAQ/C,IAAIR,KAAK8oB,WAAWhf,QAAQzF,EAAI,cAE7C,IAAImP,EAAanP,GAG9BA,EAAG6F,aAAa,gBAAiB,IACjClK,KAAK2pB,YAAYtlB,EAAID,GACrBpE,KAAKuD,QAAQ6B,IAAIhB,EAAOc,GAAId,GAC5BpE,KAAKmE,UACP,CAEO,YAAA6nB,CAAa9mB,GAClB,IAAI+mB,EAAgBjsB,KAAKuD,QAAQ/C,IAAI0E,GACwC,OAAzE+mB,aAAa,EAAbA,EAAelgB,YAAkC,wBACnDkgB,SAAAA,EAAelgB,YAAkC,qBAAqB6e,cAEG,OAAvEqB,aAAa,EAAbA,EAAelgB,YAAkC,sBACnDkgB,SAAAA,EAAelgB,YAAkC,mBAAmB6e,cAGtE5qB,KAAKuD,QAAQgC,OAAOL,GACpB+mB,SAAAA,EAAe5nB,GAAG6nB,gBAAgB,iBAClCD,SAAAA,EAAerY,QACfqY,OAAgBnc,CAClB,CAEQ,gBAAA2Z,CAAiBxjB,GACvBjG,KAAK4oB,eAAe5iB,YAAYC,GAEhC,IAAK,IAAIoI,EAAI,EAAGA,EAAIrO,KAAK0T,QAAQtH,OAAQiC,IACvCrO,KAAK0T,QAAQrF,GAAGrI,YAAYC,GAE9B,IAAK,IAAIoI,EAAI,EAAGA,EAAIrO,KAAK0oB,UAAUtc,OAAQiC,IACzCrO,KAAK0oB,UAAUra,GAAGrI,YAAYC,EAGlC,CACQ,YAAAsjB,CAAatjB,GACnBjG,KAAKwnB,IAAIthB,QAAQD,GACjB,IAAK,IAAIoI,EAAI,EAAGA,EAAIrO,KAAK0T,QAAQtH,OAAQiC,IACvCrO,KAAK0T,QAAQrF,GAAGnI,QAAQD,GAE1B,IAAK,IAAIoI,EAAI,EAAGA,EAAIrO,KAAK0oB,UAAUtc,OAAQiC,IACzCrO,KAAK0oB,UAAUra,GAAGnI,QAAQD,EAE9B,CACQ,aAAA1B,GACN,IAAK,IAAI8J,EAAI,EAAGA,EAAIrO,KAAK0T,QAAQtH,OAAQiC,IACvCrO,KAAK0T,QAAQrF,GAAG9J,gBAElB,IAAK,IAAI8J,EAAI,EAAGA,EAAIrO,KAAK0oB,UAAUtc,OAAQiC,IACzCrO,KAAK0oB,UAAUra,GAAG9J,eAEtB,CACQ,YAAAC,GACN,IAAK,IAAI6J,EAAI,EAAGA,EAAIrO,KAAK0T,QAAQtH,OAAQiC,IACvCrO,KAAK0T,QAAQrF,GAAG7J,eAElB,IAAK,IAAI6J,EAAI,EAAGA,EAAIrO,KAAK0oB,UAAUtc,OAAQiC,IACzCrO,KAAK0oB,UAAUra,GAAG7J,cAEtB,CACQ,iBAAAC,GACN,IAAK,IAAI4J,EAAI,EAAGA,EAAIrO,KAAK0T,QAAQtH,OAAQiC,IACvCrO,KAAK0T,QAAQrF,GAAG5J,oBAElB,IAAK,IAAI4J,EAAI,EAAGA,EAAIrO,KAAK0oB,UAAUtc,OAAQiC,IACzCrO,KAAK0oB,UAAUra,GAAG5J,mBAEtB,CACQ,aAAA+W,CAAcvV,GACpBjG,KAAKwnB,IAAIzhB,SAASE,GAClB,IAAK,IAAIoI,EAAI,EAAGA,EAAIrO,KAAK0T,QAAQtH,OAAQiC,IACvCrO,KAAK0T,QAAQrF,GAAGtI,SAAS/F,KAAK0D,MAEhC,IAAK,IAAI2K,EAAI,EAAGA,EAAIrO,KAAK0oB,UAAUtc,OAAQiC,IACzCrO,KAAK0oB,UAAUra,GAAGtI,SAAS/F,KAAK0D,MAElC1D,KAAKgE,OAAOgF,KAAK,OAAQhJ,KAAK0D,KAAKxB,GACnClC,KAAKgE,OAAOgF,KAAK,SAAUhJ,KAAK0D,KAAKoI,EACvC,CACQ,aAAA8O,GACN5a,KAAK4oB,eAAehjB,WACpB5F,KAAKwnB,IAAI5hB,WACT,IAAK,IAAIyI,EAAI,EAAGA,EAAIrO,KAAK0T,QAAQtH,OAAQiC,IACvCrO,KAAK0T,QAAQrF,GAAGzI,SAAS5F,KAAK0D,MAEhC,IAAK,IAAI2K,EAAI,EAAGA,EAAIrO,KAAK0oB,UAAUtc,OAAQiC,IACzCrO,KAAK0oB,UAAUra,GAAGzI,SAAS5F,KAAK0D,MAElC1D,KAAKgE,OAAOgF,KAAK,SAAU,KAC7B,CACO,QAAAnD,GACL,IAAIsmB,EAAQ,EACRC,EAAQ,EACZ,IACE,IAAInc,EAAOjQ,KAAKwnB,IAAIxL,gBAAgB9L,wBACpCic,EAAQlc,EAAKrH,MACbwjB,EAAQnc,EAAKpH,M,CACb,MAAO+E,GACPue,EAAQnsB,KAAKwnB,IAAIxL,gBAAgBhB,WACjCoR,EAAQpsB,KAAKwnB,IAAIxL,gBAAgBuH,W,CAEf,YAAhBvjB,KAAK0D,KAAKyU,IACZnY,KAAK0D,KAAKmH,GAAK7K,KAAK0D,KAAK0S,IAAMgW,EAC/BpsB,KAAK0D,KAAK6H,GAAK6gB,IAEfpsB,KAAK0D,KAAKmH,GAAK7K,KAAK0D,KAAKwT,IAAMiV,EAC/BnsB,KAAK0D,KAAK6H,GAAK4gB,IAEbnsB,KAAK2oB,IAAMwD,GAASnsB,KAAK8U,OAAOkG,WAAa,QAC/Chb,KAAK4nB,UACL5nB,KAAK0T,QAAQ1M,SAASnH,IACpBA,EAAOgG,UAAU,IAEnB7F,KAAK0oB,UAAU1hB,SAASnH,IACtBA,EAAOgG,UAAU,KAGrB7F,KAAK2oB,GAAKwD,EACVnsB,KAAKoC,GAAKgqB,CACZ,CACQ,oBAAAhC,GAGN,MAAMiC,EAAwBlqB,IAC5B,GAAwD,MAApDnC,KAAK8oB,WAAWhf,QAAQ3H,EAAS,gBACnC,OAEF,IAAImqB,EAAWnqB,EAAQgF,aAAa,aAChCmjB,EAAkBtqB,KAAK8oB,WAAWhf,QAAQ3H,EAAS,oBAEhC,MAAnBmoB,IACFtqB,KAAKkpB,aAAelpB,KAAKkpB,aAAa1C,QACnC+F,GAA0BA,EAAiBrnB,IAAMolB,KAGtC,MAAZgC,GACFtsB,KAAKgsB,aAAaM,E,EAIhBE,EAAsBrqB,IAC1B,GAAwD,MAApDnC,KAAK8oB,WAAWhf,QAAQ3H,EAAS,gBACnC,OAEFnC,KAAKqqB,UAAUloB,GACf,IAAImoB,EAAkBtqB,KAAK8oB,WAAWhf,QAAQ3H,EAAS,oBACvD,GAAuB,MAAnBmoB,EACF,GAAItqB,KAAKuD,QAAQ4B,IAAImlB,GAAkB,CACrC,IAAIC,EAAsBvqB,KAAKuD,QAAQ/C,IAAI8pB,GAChB,MAAvBC,GACFA,EAAoBpe,SAAS9G,KAAKlD,E,MAGpCnC,KAAKkpB,aAAa7jB,KAAK,CACrBH,GAAIolB,EACJnoB,W,EAOS,IAAIsqB,kBAAkBC,IACrCA,EAAU1lB,SAAS2lB,IACK,cAAlBA,EAAS7pB,OACP6pB,EAASC,aAAaxgB,OAAS,GACjCugB,EAASC,aAAa5lB,SAAS6lB,IAC7B,GAAIA,EAAYC,WAAaC,KAAKC,aAAc,CAC9C,MAAM7qB,EAAU0qB,EACZ1qB,EAAQwT,aAAa,WACvB0W,EAAqBlqB,GAEvBA,EAAQ4E,iBAAiB,YAAYC,SAASimB,IAC5CZ,EAAqBY,EAAa,G,KAKtCN,EAASO,WAAW9gB,OAAS,GAE/BugB,EAASO,WAAWlmB,SAASmmB,IAC3B,GAAIA,EAAUL,WAAaC,KAAKC,aAAc,CAC5C,MAAM7qB,EAAUgrB,EACZhrB,EAAQwT,aAAa,YAAcxT,EAAQwT,aAAa,kBAC1D6W,EAAmBrqB,GAErBA,EAAQ4E,iBAAiB,iCAAiCC,SAASimB,IACjET,EAAmBS,EAAa,G,MAMpCN,EAASO,WAAW9gB,OAAS,GAAKugB,EAASC,aAAaxgB,OAAS,IACnEpM,KAAK0T,QAAQ1M,SAASnH,IACpBA,EAAOiG,WAAW,I,GAIxB,IAOK8jB,QAAQ9iB,SAAS2R,KALX,CACbnU,YAAY,EACZ8oB,WAAW,EACXC,SAAS,GAGb,CACQ,OAAAzF,GAUN,IACE,IAAI0F,GAVkBjpB,EAUuBrE,KAAK0D,KAAK+Z,GATvC3I,OAAO2K,iBAAiBpb,GAAIoW,UAEzC3B,MAAM,WACNrW,MAAM,GAAI,GACV0W,KAAI,SAAUjX,GACb,OAAOU,WAAWV,EACpB,KAIFlC,KAAK0D,KAAKqiB,KAAOuH,EAAmB,GACpCttB,KAAK0D,KAAKsiB,KAAOsH,EAAmB,E,CACpC,MAAO1f,GACP5N,KAAK0D,KAAKqiB,KAAO,EACjB/lB,KAAK0D,KAAKsiB,KAAO,C,CAfnB,IAAwB3hB,EAiBxB,IACE,IAAI4L,EAAOjQ,KAAK0D,KAAK+Z,GAAGvN,wBACxBlQ,KAAK2oB,GAAK1Y,EAAKrH,MAAQ5I,KAAK0D,KAAKqiB,KACjC/lB,KAAKoC,GAAK6N,EAAKpH,OAAS7I,KAAK0D,KAAKsiB,I,CAClC,MAAOpY,GACP5N,KAAK2oB,GAAK3oB,KAAK0D,KAAK+Z,GAAGzC,WACvBhb,KAAKoC,GAAKpC,KAAK0D,KAAK+Z,GAAG8F,W,CAErBvjB,KAAK2oB,GAAK,MAAQvB,IACpBpnB,KAAKuX,WAAavX,KAAKooB,MAEvBpoB,KAAKuX,WAAavX,KAAKwoB,MAGzB,IAAI+E,EAAIzmB,SAAS2R,KACfgO,EAAI3f,SAAS4C,gBAEf1J,KAAK0D,KAAKwT,IAAMlX,KAAK0D,KAAK+Z,GAAG+P,YAC7BxtB,KAAK0D,KAAK0S,IAAMpW,KAAK0D,KAAK+Z,GAAGgQ,aACR3d,MAAjB9P,KAAK0D,KAAKwT,MACZlX,KAAK0D,KAAKwT,IAAMvL,KAAKE,IAAI0hB,EAAEC,YAAaD,EAAEnN,YAAaqG,EAAEiH,YAAajH,EAAE+G,YAAa/G,EAAErG,cAEpEtQ,MAAjB9P,KAAK0D,KAAK0S,MACZpW,KAAK0D,KAAK0S,IAAMzK,KAAKE,IAAI0hB,EAAEE,aAAcF,EAAE7qB,aAAc+jB,EAAEkH,aAAclH,EAAEgH,aAAchH,EAAE/jB,eAEzE,YAAhB1C,KAAK0D,KAAKyU,IACZnY,KAAK0D,KAAKmH,GAAK7K,KAAK0D,KAAK0S,IAAMpW,KAAKoC,GACpCpC,KAAK0D,KAAK6H,GAAKvL,KAAKoC,KAEpBpC,KAAK0D,KAAKmH,GAAK7K,KAAK0D,KAAKwT,IAAMlX,KAAK2oB,GACpC3oB,KAAK0D,KAAK6H,GAAKvL,KAAK2oB,IAEtB3oB,KAAK0D,KAAKmiB,MAAuB,GAAhB7lB,KAAK0D,KAAK6H,GAC3BvL,KAAKqoB,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/Utils/StringDefaultSettings.ts","webpack://StringTune/./src/Utils/StringParser.ts","webpack://StringTune/./src/StringModule.ts","webpack://StringTune/./src/Objects/StringBase.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/Scroll/Modules/StringProgress.ts","webpack://StringTune/./src/Media/Modules/StringSVG.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/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/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};","export class StringDefaultSettings {\r\n stringOffsetStart: string = '0%'\r\n stringOffsetEnd: string = '0%'\r\n\r\n stringEnterEl: string = 'top'\r\n stringExitEl: string = 'bottom'\r\n stringEnterVp: string = 'bottom'\r\n stringExitVp: string = 'top'\r\n\r\n stringInviewTop: string = '0%'\r\n stringInviewBottom: string = '0%'\r\n\r\n stringKey: string = '--progress'\r\n\r\n stringStrength: number = 0.3\r\n stringRadius: number = 150\r\n stringLerp: number = 0.2\r\n stringParallaxBias: number = 0.0\r\n stringParallax: number = 0.2\r\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}","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 { StringDefaultSettings } from './Utils/StringDefaultSettings';\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\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 parser = new StringParser();\r\n protected defaultSettings: StringDefaultSettings = new StringDefaultSettings()\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 this.defaultSettings = visitor.defaultSettings;\r\n this.parser = visitor.parser;\r\n }\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>): void {\r\n \r\n }\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 enterObject(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 leaveObject(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 { StringModule } from \"../StringModule\";\r\nimport { StringObject } from \"./StringObject\";\r\n\r\n\r\nexport class StringBase extends StringModule {\r\n private oldLerp = 0\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor, settings);\r\n }\r\n\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\r\n \r\n }\r\n \r\n\r\n}\r\n","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\nexport class StringLazy extends StringBase {\r\n private isStartLoaded: boolean = false;\r\n private imageLoadingCount: number = 0;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'lazy';\r\n }\r\n onStart(): void {\r\n const imagesEls = document.querySelectorAll('img[string-lazy]');\r\n imagesEls.forEach((element: any) => {\r\n this.load(element);\r\n });\r\n this.isStartLoaded = true;\r\n }\r\n onConnect(object: StringObject) {\r\n this.imageLoadingCount++;\r\n if (this.isStartLoaded) {\r\n let element: any = object.el;\r\n this.load(element);\r\n }\r\n }\r\n private load(element: any) {\r\n this.getImageSize(element, element.getAttribute('string-lazy'));\r\n element.classList.add(`lazyLoad`);\r\n element.src = element.getAttribute('string-lazy') as any;\r\n const onLoad = () => {\r\n element.classList.add(`-loaded`);\r\n element.removeEventListener('load', onLoad);\r\n };\r\n element.addEventListener('load', onLoad);\r\n }\r\n private getImageSize(element: HTMLElement, url: string) {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = () => {\r\n if (xhr.status === 206 || xhr.status === 200) {\r\n const buffer = xhr.response;\r\n const blob = new Blob([buffer]);\r\n const img = new Image();\r\n img.onload = () => {\r\n element.style.aspectRatio = `${img.width} / ${img.height}`;\r\n resolve({ width: img.width, height: img.height });\r\n\r\n URL.revokeObjectURL(img.src);\r\n this.imageLoadingCount--;\r\n if (this.imageLoadingCount <= 0) {\r\n this.events.emit('all-image-loaded', null);\r\n this.imageLoadingCount = 0;\r\n }\r\n };\r\n img.onerror = () => {\r\n URL.revokeObjectURL(img.src); \r\n this.imageLoadingCount--; \r\n reject(new Error('Failed to load image'));\r\n };\r\n img.src = URL.createObjectURL(blob);\r\n } else {\r\n reject(new Error('Failed to load image'));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('Network error'));\r\n };\r\n xhr.setRequestHeader('Range', 'bytes=0-');\r\n xhr.send();\r\n });\r\n }\r\n}\r\n","import { StringModule } from \"../../StringModule\";\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\";\r\nimport { StringModule } from \"../../StringModule\";\r\n\r\nexport class StringVideoAutoplay extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = \"autoplay\";\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const videoSrc = this.attribute.process(videoElement, \"string-src\", \"\");\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (videoElement.tagName.toLowerCase() === \"video\" && videoSrc && started == false) {\r\n videoElement.setAttribute(\"muted\", \"muted\");\r\n videoElement.setAttribute(\"playsinline\", \"\");\r\n videoElement.setAttribute(\"loop\", \"\");\r\n videoElement.setAttribute(\"autoplay\", \"\");\r\n videoElement.src = videoSrc;\r\n videoElement.muted = true;\r\n videoElement.addEventListener(\"canplaythrough\", () => {\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (started == false) {\r\n this.tryPlay(object, videoElement); \r\n }\r\n }, { once: true });\r\n videoElement.load();\r\n } else {\r\n console.warn(\r\n \"StringVideoAutoplay: Element is not a <video> tag or string-src is missing.\",\r\n object.el\r\n );\r\n }\r\n }\r\n\r\n private tryPlay(object: StringObject, element: HTMLVideoElement) {\r\n element.play().catch((err) => {\r\n console.warn(\"Autoplay failed:\", err);\r\n }).then(() => {\r\n element.setAttribute(`string-started`, '')\r\n });\r\n }\r\n}","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nconst tS = 'top';\r\nconst bS = 'bottom';\r\nconst lS = 'left';\r\nconst rS = 'right';\r\n\r\nexport class StringProgress extends StringBase {\r\n \r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'progress';\r\n }\r\n\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\r\n super.initObject(globalId, object, el, attributes)\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.setProperty('start-element', startElementPosition);\r\n object.setProperty('start-source', startSourcePosition);\r\n object.setProperty('end-element', endElementPosition);\r\n object.setProperty('end-source', endSourcePosition);\r\n\r\n this.calculatePositions(object, this.data.wS)\r\n \r\n \r\n }\r\n\r\n onScroll(data: StringData): void {\r\n super.onScroll(data)\r\n this.objects.forEach((object) => {\r\n this.setUpObject(object);\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n super.onConnect(object)\r\n object.onEnter = () => {\r\n this.setUpObject(object);\r\n };\r\n }\r\n\r\n private setUpObject(object: StringObject) {\r\n const progress = Math.min(1, Math.max(0, (this.data.c - object.getProperty<number>('start-position')) / object.getProperty<number>('difference-position')));\r\n \r\n if (object.getProperty<number>('progress') !== progress) {\r\n object.setProperty<number>('progress', progress);\r\n this.applyProgress(object, progress);\r\n }\r\n }\r\n\r\n private applyProgress(object: StringObject, progress: number) {\r\n const progressStr = progress.toString();\r\n this.events.emit(`progress_${object.id}`, progress);\r\n object.el.style.setProperty(object.key, progressStr);\r\n if (object.connects.length > 0) {\r\n object.connects.forEach((element) => {\r\n element.style.setProperty(object.key, progressStr);\r\n });\r\n }\r\n }\r\n\r\n private calculatePositions(object: StringObject, windowSize: number) {\r\n if ((object.getProperty('start-element') === tS && object.getProperty('start-source') === tS) || (object.getProperty('start-element') === lS && object.getProperty('start-source') === lS)) {\r\n object.setProperty<number>('start-position', object.getProperty<number>('start') - object.getProperty<number>('offset-start'));\r\n } else if ((object.getProperty('start-element') === tS && object.getProperty('start-source') === bS) || (object.getProperty('start-element') === lS && object.getProperty('start-source') === rS)) {\r\n object.setProperty<number>('start-position', object.getProperty<number>('start') - windowSize - object.getProperty<number>('offset-start'));\r\n } else if ((object.getProperty('start-element') === bS && object.getProperty('start-source') === tS) || (object.getProperty('start-element') === rS && object.getProperty('start-source') === lS)) {\r\n object.setProperty<number>('start-position', object.getProperty<number>('start') + object.getProperty<number>('size') - object.getProperty<number>('offset-start'));\r\n } else if ((object.getProperty('start-element') === bS && object.getProperty('start-source') === bS) || (object.getProperty('start-element') === rS && object.getProperty('start-source') === rS)) {\r\n object.setProperty<number>('start-position', object.getProperty<number>('start') - windowSize - object.getProperty<number>('offset-start') + object.getProperty<number>('size'));\r\n }\r\n\r\n if ((object.getProperty('end-element') === tS && object.getProperty('end-source') === tS) || (object.getProperty('end-element') === lS && object.getProperty('end-source') === lS)) {\r\n object.setProperty<number>('end-position',object.getProperty<number>('start') + object.getProperty<number>('offset-end'));\r\n } else if ((object.getProperty('end-element') === tS && object.getProperty('end-source') === bS) || (object.getProperty('end-element') === lS && object.getProperty('end-source') === rS)) {\r\n object.setProperty<number>('end-position',object.getProperty<number>('start') - windowSize + object.getProperty<number>('offset-end'));\r\n } else if ((object.getProperty('end-element') === bS && object.getProperty('end-source') === tS) || (object.getProperty('end-element') === rS && object.getProperty('end-source') === lS)) {\r\n object.setProperty<number>('end-position',object.getProperty<number>('start') + object.getProperty<number>('size') + object.getProperty<number>('offset-end'));\r\n } else if ((object.getProperty('end-element') === bS && object.getProperty('end-source') === bS) || (object.getProperty('end-element') === rS && object.getProperty('end-source') === rS)) {\r\n object.setProperty<number>('end-position',object.getProperty<number>('start') - windowSize + object.getProperty<number>('size') + object.getProperty<number>('offset-end'));\r\n }\r\n object.setProperty<number>('difference-position', object.getProperty<number>('end-position') - object.getProperty<number>('start-position'))\r\n\r\n }\r\n\r\n}\r\n","\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringProgress } from '../../Scroll/Modules/StringProgress';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringSVG extends StringProgress {\r\n \r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'svg-morph';\r\n }\r\n\r\n async initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\r\n const startSrc = attributes[\"string-svg-start\"];\r\n const endSrc = attributes[\"string-svg-end\"];\r\n\r\n const [startSVG, endSVG]: any = await Promise.all([\r\n this.loadSVG(startSrc),\r\n this.loadSVG(endSrc),\r\n ]);\r\n\r\n let svgStart = startSVG.querySelector(\"path\");\r\n let svgEnd = endSVG.querySelector(\"path\");\r\n\r\n let pointsStart = svgStart.getAttribute(\"d\") || \"\";\r\n let pointsEnd = svgEnd.getAttribute(\"d\") || \"\";\r\n\r\n object.setProperty<any>(\"points-start\", pointsStart)\r\n object.setProperty<any>(\"points-end\", pointsEnd)\r\n\r\n let pathElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n pathElement.setAttribute(\"d\", pointsStart);\r\n pathElement.setAttribute(\"fill\", attributes[\"string-fill\"] ?? \"black\");\r\n\r\n const svgContainer = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n svgContainer.setAttribute(\"viewBox\", startSVG.getAttribute(\"viewBox\") || \"0 0 100 100\");\r\n svgContainer.appendChild(pathElement);\r\n el.innerHTML = \"\"\r\n el.appendChild(svgContainer);\r\n\r\n object.setProperty(\"svg-path\", pathElement);\r\n super.initObject(globalId, object, el, attributes);\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n super.onScroll(data)\r\n this.objects.forEach((object) => {\r\n this.morphPath(object, object.getProperty<number>('progress'));\r\n });\r\n }\r\n\r\n private async loadSVG(url: string): Promise<SVGElement | null> {\r\n try {\r\n const response = await fetch(url);\r\n const text = await response.text();\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(text, \"image/svg+xml\");\r\n return doc.querySelector(\"svg\");\r\n } catch (error) {\r\n console.error(`StringSVG: помилка завантаження ${url}`, error);\r\n return null;\r\n }\r\n }\r\n\r\n private morphPath(object: StringObject, progress: number) {\r\n const interpolatedPath = this.interpolatePaths(object.getProperty<any>(\"points-start\"), object.getProperty<any>(\"points-end\"), progress);\r\n object.getProperty<any>(\"svg-path\").setAttribute(\"d\", interpolatedPath);\r\n }\r\n\r\n private interpolatePaths(startD: string, endD: string, progress: number): string {\r\n const startCommands = this.parsePathCommands(startD);\r\n const endCommands = this.parsePathCommands(endD);\r\n\r\n if (startCommands.length !== endCommands.length) {\r\n console.warn(\"StringSVG: Кількість команд в шляхах різна, відображається один із шляхів без інтерполяції.\");\r\n return progress < 0.5 ? startD : endD; \r\n }\r\n\r\n let interpolatedD = \"\";\r\n\r\n for (let i = 0; i < startCommands.length; i++) {\r\n const startParts = startCommands[i].match(/([a-zA-Z])|(-?\\d*\\.?\\d+)/g) || [];\r\n const endParts = endCommands[i].match(/([a-zA-Z])|(-?\\d*\\.?\\d+)/g) || [];\r\n\r\n if (startParts.length !== endParts.length) {\r\n console.warn(`StringSVG: Різна кількість аргументів у команді ${startParts[0]}, пропускаємо.`);\r\n interpolatedD += (progress < 0.5 ? startCommands[i] : endCommands[i]) + \" \";\r\n continue;\r\n }\r\n\r\n interpolatedD += startParts[0]; // Додаємо буквену команду (M, L, C і т.д.)\r\n\r\n for (let j = 1; j < startParts.length; j++) {\r\n const startVal = parseFloat(startParts[j]);\r\n const endVal = parseFloat(endParts[j]);\r\n\r\n if (isNaN(startVal) || isNaN(endVal)) {\r\n interpolatedD += ` ${startParts[j]}`; // Наприклад, якщо це `Z`, просто додаємо без змін\r\n } else {\r\n const interpolatedVal = startVal + (endVal - startVal) * progress;\r\n interpolatedD += ` ${interpolatedVal.toFixed(3)}`; // Округлення до 3 знаків після коми\r\n }\r\n }\r\n }\r\n\r\n return interpolatedD;\r\n }\r\n\r\n private parsePathCommands(d: string): string[] {\r\n return d.match(/[a-df-z][^a-df-z]*/gi) || [];\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import { StringBase } from '../../Objects/StringBase';\r\nimport { 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 StringBase {\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(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>): void {\r\n super.initObject(globalId, object, el, attributes)\r\n\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\r\n object.setProperty('alignment', attributes[\"string-alignment\"] ?? 'center');\r\n\r\n object.setProperty('mouse-x', 0);\r\n object.setProperty('mouse-y', 0);\r\n object.setProperty('mouse-pixel-x', 0);\r\n object.setProperty('mouse-pixel-y', 0);\r\n\r\n\r\n object.setProperty('is-mouse-over', false);\r\n object.setProperty('is-mouse-move', false);\r\n object.setProperty('lerp', remapLerp(rawLerpValue));\r\n object.setProperty('cursor-target-disable', attributes[\"string-cursor-target-disable\"] !== undefined);\r\n object.setProperty('cursor-target-style-disable', attributes[\"string-cursor-target-style-disable\"] !== undefined);\r\n\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 object.setProperty('cursor-target-class', \"\")\r\n if (targetQuery) {\r\n object.setProperty('cursor-target-class', targetQuery);\r\n }\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.getProperty('is-mouse-over') && !object.getProperty('cursor-target-disable')) {\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.getProperty<number>('mouse-pixel-x') - elementX;\r\n const dy = object.getProperty<number>('mouse-pixel-y') - elementY;\r\n const distanceSquared = dx * dx + dy * dy;\r\n if (distanceSquared > 0.0001) {\r\n if (object.getProperty('is-mouse-move') == false) {\r\n object.setProperty('is-mouse-move', true);\r\n object.setProperty('mouse-pixel-x', elementX);\r\n object.setProperty('mouse-pixel-y', elementY);\r\n this.events.emit(`mousemove_start_${object.id}`, null)\r\n }\r\n let lerpX = this.lerp.process(object.getProperty<number>('mouse-pixel-x'), elementX, object.getProperty('lerp'));\r\n let lerpY = this.lerp.process(object.getProperty<number>('mouse-pixel-y'), elementY, object.getProperty('lerp'));\r\n object.setProperty('mouse-pixel-x', object.getProperty<number>('mouse-pixel-x') + lerpX)\r\n object.setProperty('mouse-pixel-y', object.getProperty<number>('mouse-pixel-y') + lerpY)\r\n const offsetX = this.calculateOffset(object.getProperty('alignment'), object.getProperty<number>('mouse-pixel-x'), rect.width);\r\n const offsetY = this.calculateOffset(object.getProperty('alignment'), object.getProperty<number>('mouse-pixel-y'), rect.height);\r\n object.setProperty('mouse-x', offsetX);\r\n object.setProperty('mouse-y', offsetY);\r\n this.setMouseCoordinates(object, object.getProperty<number>('mouse-x'), object.getProperty<number>('mouse-y'));\r\n this.events.emit(`mousemove_${object.id}`, {\r\n x: object.getProperty<number>('mouse-x'),\r\n y: object.getProperty<number>('mouse-y'),\r\n })\r\n this.events.emit(`mousemove_pixel_${object.id}`, {\r\n x: object.getProperty<number>('mouse-pixel-x'),\r\n y: object.getProperty<number>('mouse-pixel-y'),\r\n })\r\n } else {\r\n object.setProperty('mouse-pixel-x', elementX);\r\n object.setProperty('mouse-pixel-y', elementY);\r\n this.events.emit(`mousemove_end_${object.id}`, null);\r\n }\r\n } else {\r\n if (object.getProperty<number>('mouse-x') != 0 || object.getProperty<number>('mouse-y') != 0) {\r\n \r\n object.setProperty('is-mouse-move', false);\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', object.getProperty('half-width'), rect.width);\r\n const offsetY = this.calculateOffset('center', object.getProperty('half-height'), rect.height);\r\n\r\n object.setProperty('mouse-x', object.getProperty<number>('mouse-x') + this.lerp.process(object.getProperty<number>('mouse-x'), offsetX, object.getProperty('lerp')));\r\n object.setProperty('mouse-y', object.getProperty<number>('mouse-y') + this.lerp.process(object.getProperty<number>('mouse-y'), offsetY, object.getProperty('lerp')));\r\n \r\n\r\n if (Math.abs(object.getProperty<number>('mouse-x')) < .001 && Math.abs(object.getProperty<number>('mouse-y')) < .001) {\r\n object.setProperty('mouse-x', 0);\r\n object.setProperty('mouse-y', 0);\r\n object.setProperty('mouse-pixel-x', 0);\r\n object.setProperty('mouse-pixel-y', 0);\r\n }\r\n this.setMouseCoordinates(object, object.getProperty<number>('mouse-x'), object.getProperty<number>('mouse-y'));\r\n }\r\n }\r\n });\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.setProperty('is-mouse-over', true);\r\n if (object.getProperty<string>('cursor-target-class')!= null && object.getProperty<string>('cursor-target-class').length > 0) {\r\n this.cursor.classList.add(object.getProperty<string>('cursor-target-class'))\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.setProperty('is-mouse-over', false);\r\n if (object.getProperty<string>('cursor-target-class') != null && object.getProperty<string>('cursor-target-class').length > 0) {\r\n this.cursor.classList.remove(object.getProperty<string>('cursor-target-class'))\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.getProperty('cursor-target-style-disable')) {\r\n if (object.getProperty<boolean>('self-disable') == 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 { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringMagnetic extends StringBase {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'magnetic';\r\n }\r\n\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\r\n super.initObject(globalId, object, el, attributes)\r\n object.setProperty('is-magneting', false);\r\n object.setProperty('magnetic-target-x', 0);\r\n object.setProperty('magnetic-target-y', 0);\r\n object.setProperty('magnetic-x', 0);\r\n object.setProperty('magnetic-y', 0);\r\n object.setProperty('strength', attributes[\"string-strength\"] ?? this.defaultSettings.stringStrength);\r\n object.setProperty('radius', attributes[\"string-radius\"] ?? this.defaultSettings.stringRadius);\r\n object.setProperty('lerp', .1);\r\n\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLElement;\r\n\r\n if (this.settings != null) {\r\n if (this.settings['string-strength'] != null) {\r\n object.setProperty(\"strength\", this.settings['string-strength']);\r\n }\r\n if (this.settings['string-radius'] != null) {\r\n object.setProperty(\"radius\", this.settings['string-radius']);\r\n }\r\n if (this.settings['string-lerp'] != null) {\r\n object.setProperty(\"lerp\", this.settings['string-lerp']);\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.objects.forEach((object) => {\r\n const element = object.el as HTMLElement;\r\n const rect = element.getBoundingClientRect();\r\n const elementCenterX = rect.left + object.getProperty<number>('half-width');\r\n const elementCenterY = rect.top + object.getProperty<number>('half-height');\r\n const distX = e.clientX - elementCenterX;\r\n const distY = e.clientY - elementCenterY;\r\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\r\n let radius = object.getProperty<number>('radius');\r\n let strength = object.getProperty<number>('strength');\r\n\r\n if (distance < radius) {\r\n object.setProperty('magnetic-target-x', distX * strength * ((radius - distance) / radius));\r\n object.setProperty('magnetic-target-y', distY * strength * ((radius - distance) / radius));\r\n object.setProperty('is-magneting', true);\r\n } else {\r\n object.setProperty('magnetic-target-x', 0);\r\n object.setProperty('magnetic-target-y', 0);\r\n }\r\n });\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n if (object.getProperty('is-magneting')) {\r\n let magneticX = object.getProperty<number>('magnetic-x')\r\n let magneticY = object.getProperty<number>('magnetic-y')\r\n let lerpX = this.lerp.process(magneticX, object.getProperty('magnetic-target-x'), object.getProperty('lerp'));\r\n let lerpY = this.lerp.process(magneticY, object.getProperty('magnetic-target-y'), object.getProperty('lerp'));\r\n if (lerpX > -0.01 && lerpX < 0.01) {\r\n lerpX = 0;\r\n object.setProperty('magnetic-x', object.getProperty('magnetic-target-x'));\r\n }\r\n if (lerpY > -0.01 && lerpY < 0.01) {\r\n lerpY = 0;\r\n object.setProperty('magnetic-y', object.getProperty('magnetic-target-y'));\r\n }\r\n magneticX += lerpX;\r\n magneticY += lerpY;\r\n object.setProperty<number>('magnetic-x', magneticX)\r\n object.setProperty<number>('magnetic-y', magneticY)\r\n object.el.style.setProperty('--magnetic-x', magneticX.toString());\r\n object.el.style.setProperty('--magnetic-y', magneticY.toString());\r\n if (object.getProperty('magnetic-target-x') == magneticX || object.getProperty('magnetic-target-y') == magneticY) {\r\n object.setProperty('is-magneting', false);\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","export class StringLerpCalc {\r\n process(current: number, target: number, amt: number) {\r\n const difference = target - current;\r\n 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\n\r\nexport class StringObject {\r\n public el: HTMLElement;\r\n public id: string = '';\r\n public key: string = '--progress';\r\n public keys: string = '';\r\n\r\n public connects: Array<HTMLElement> = new Array<HTMLElement>();\r\n private properties: Map<string, any> = new Map();\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n\r\n public onEnter = () => {};\r\n public onLeave = () => {};\r\n\r\n\r\n // \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 \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 \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 // 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\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 public setProperty<T>(key: string, value: T): void {\r\n this.properties.set(key, value);\r\n }\r\n\r\n public getProperty<T>(key: string): T {\r\n return this.properties.get(key) ?? null;\r\n }\r\n\r\n constructor(element: HTMLElement) {\r\n this.el = element;\r\n \r\n }\r\n\r\n enter() {\r\n this.setProperty('active', true);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.enterObject(this.id, this);\r\n });\r\n this.onEnter();\r\n }\r\n leave() {\r\n this.setProperty('active', false);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.leaveObject(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.getProperty<boolean>('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 \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 { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringAnchor extends StringBase {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'anchor';\r\n }\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>): void {\r\n super.initObject(globalId, object, el, attributes)\r\n object.setProperty('anchor', this.attribute.process(el, `string-anchor`, \"center center\"));\r\n\r\n }\r\n onConnect(object: StringObject) {\r\n super.onConnect(object)\r\n if (object.getProperty('anchor') == null || object.getProperty('anchor') == \"\") {\r\n object.setProperty('anchor', \"center center\")\r\n }\r\n const p = object.getProperty<string>('anchor').split(' ');\r\n const x = this.parseOrig(p[0]);\r\n const y = this.parseOrig(p[1] || p[0]);\r\n object.el.style.transformOrigin = `${x} ${y}`;\r\n }\r\n\r\n private parseOrig(part: string) {\r\n part = part.trim();\r\n if (part.startsWith('random')) {\r\n const o = part.slice(7, -1).split(',').map(s => s.trim());\r\n const c = Math.floor(Math.random() * o.length);\r\n return o[c];\r\n } else {\r\n return part;\r\n }\r\n }\r\n}\r\n\r\n","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringGlide extends StringBase {\r\n private previousLerp: number = 0;\r\n private displacement: number = 0;\r\n private acceleration: number = 0;\r\n private velocityMultiplier: number = 0.00125;\r\n private isInitialScroll: boolean = true;\r\n\r\n private baseVelocityMultiplier: number = 0.00125;\r\n private reducedVelocityMultiplier: number = this.baseVelocityMultiplier / 20;\r\n private negativeVelocityMultiplier: number = -0.0001;\r\n\r\n private readonly ACCELERATION_STEP: number = 0.05;\r\n private readonly MIN_DISPLACEMENT: number = 0.01;\r\n private readonly MAX_DISPLACEMENT: number = 1;\r\n private readonly MIN_VELOCITY: number = -1;\r\n private readonly MAX_VELOCITY: number = 1;\r\n\r\n private maxDisplacementValue: number = 0;\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor);\r\n this.htmlKey = 'glide';\r\n\r\n if (settings) {\r\n const { baseVelocityMultiplier, reducedVelocityMultiplier, negativeVelocityMultiplier } = settings;\r\n this.baseVelocityMultiplier = baseVelocityMultiplier ?? this.baseVelocityMultiplier;\r\n this.reducedVelocityMultiplier = reducedVelocityMultiplier ?? this.reducedVelocityMultiplier;\r\n this.negativeVelocityMultiplier = negativeVelocityMultiplier ?? this.negativeVelocityMultiplier;\r\n }\r\n \r\n }\r\n\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\r\n super.initObject(globalId, object, el, attributes)\r\n //object.glide = parseFloat(attributes[\"string-glide\"] ?? \"1\");\r\n object.setProperty('glide', parseFloat(attributes[\"string-glide\"] ?? \"1\"))\r\n }\r\n\r\n private setupItem = (object: StringObject) => {\r\n const transformCompute = `translate3d(0, ${-this.data.dV * this.maxDisplacementValue * object.getProperty<number>('glide')}px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n }\r\n\r\n private onUpdateDesktopEvent = ()=>{\r\n for (let i = 0; i < this.objects.length; i++) {\r\n let object = this.objects[i]\r\n this.setupItem(object)\r\n }\r\n }\r\n private onUpdateMobileEvent = ()=>{}\r\n private onUpdateEvent = this.onUpdateDesktopEvent\r\n\r\n \r\n\r\n private calcExpanderFactor(isDirectionUp: boolean): void {\r\n const isConditionMet = isDirectionUp\r\n ? this.data.v < this.previousLerp\r\n : this.data.v > this.previousLerp;\r\n\r\n this.velocityMultiplier = isConditionMet\r\n ? (this.isInitialScroll ? this.baseVelocityMultiplier : this.reducedVelocityMultiplier)\r\n : this.negativeVelocityMultiplier;\r\n\r\n if (!isConditionMet) {\r\n this.isInitialScroll = false;\r\n }\r\n }\r\n onStart(): void {\r\n this.maxDisplacementValue = this.data.wS * 0.1\r\n }\r\n\r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.maxDisplacementValue = this.data.wS * 0.1\r\n this.onUpdateEvent = this.onUpdateDesktopEvent\r\n } else {\r\n this.onUpdateEvent = this.onUpdateMobileEvent \r\n this.resetState();\r\n this.objects.forEach((object) => {\r\n this.setupItem(object);\r\n })\r\n }\r\n }\r\n\r\n private resetState(): void {\r\n this.displacement = 0;\r\n this.acceleration = 0;\r\n this.isInitialScroll = true;\r\n this.velocityMultiplier = this.baseVelocityMultiplier;\r\n }\r\n\r\n onScrollStart(): void {\r\n this.resetState();\r\n }\r\n\r\n onScrollStop(): void {\r\n this.resetState();\r\n this.previousLerp = 0;\r\n //document.documentElement.style.setProperty('--glide', '0');\r\n for (let i = 0; i < this.objects.length; i++) {\r\n let object = this.objects[i]\r\n const transformCompute = `translate3d(0, 0px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.el.style.setProperty('--glide', this.data.dV.toString());\r\n }\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.calcExpanderFactor(this.data.sDB === false);\r\n this.acceleration = Math.min(this.MAX_DISPLACEMENT, this.acceleration + this.ACCELERATION_STEP);\r\n this.displacement = Math.max(this.MIN_DISPLACEMENT, Math.min(this.MAX_DISPLACEMENT, this.displacement + this.velocityMultiplier));\r\n this.data.dV = Math.min(this.MAX_VELOCITY, Math.max(this.MIN_VELOCITY, this.data.v * this.displacement * this.acceleration));\r\n this.objects.forEach((object) => {\r\n object.el.style.setProperty('--glide', this.data.dV.toString());\r\n })\r\n this.previousLerp = this.data.v;\r\n this.onUpdateEvent()\r\n }\r\n}","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringLerp extends StringBase {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'lerp';\r\n }\r\n onScrollStop(): void {\r\n this.objects.forEach((object) => {\r\n object.el.style.setProperty('--lerp', \"0\");\r\n })\r\n }\r\n onScroll(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n object.el.style.setProperty('--lerp', this.data.v.toString());\r\n })\r\n }\r\n}\r\n","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringData } from '../../Utils/StringData';\r\nimport { StringProgress } from './StringProgress';\r\n\r\nexport class StringParallax extends StringProgress {\r\n \r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'parallax';\r\n }\r\n\r\n initObject(globalId: number, object: StringObject, el: HTMLElement, attributes: Record<string, any>) {\r\n let parallaxPosition = parseFloat(attributes[\"string-parallax-bias\"] ?? this.defaultSettings.stringParallaxBias);\r\n object.setProperty('parallax-position-start', -0.5 + 0.5 * parallaxPosition);\r\n object.setProperty('parallax-position-end', 0.5 + 0.5 * (1 - parallaxPosition));\r\n object.setProperty('parallax-factor', parseFloat(attributes[\"string-parallax\"] ?? this.defaultSettings.stringParallax));\r\n object.setProperty<number>('offset-start', object.getProperty<number>('parallax-factor') * this.data.wS)\r\n object.setProperty<number>('offset-end', object.getProperty<number>('parallax-factor') * this.data.wS)\r\n super.initObject(globalId, object, el, attributes)\r\n }\r\n \r\n private setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${\r\n object.getProperty<number>('parallax-factor') * this.data.wS * object.getProperty<number>('parallax-position-start') + progress * object.getProperty<number>('parallax-factor') * this.data.wS * object.getProperty<number>('parallax-position-end')\r\n }px, 0)`;\r\n object.el.style.transform = transformCompute;\r\n object.connects.forEach((element) => {\r\n element.style.transform = transformCompute;\r\n });\r\n };\r\n\r\n private onScrollDesktopEvent = () => {\r\n this.objects.forEach((object) => {\r\n this.setupParallax(object, object.getProperty<number>('progress'))\r\n });\r\n }\r\n private onScrollMobileEvent = () => {}\r\n private onScrollEvent = this.onScrollDesktopEvent\r\n\r\n \r\n onScroll(data: StringData): void {\r\n super.onScroll(data)\r\n this.onScrollEvent()\r\n }\r\n \r\n onResize(): void {\r\n if (window.innerWidth > 1080) {\r\n this.onScrollEvent = this.onScrollDesktopEvent\r\n } else {\r\n this.onScrollEvent = this.onScrollMobileEvent \r\n this.objects.forEach((object) => {\r\n this.setupParallax(object, .5);\r\n })\r\n }\r\n }\r\n}\r\n","import { 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","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDefault extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'mobile';\r\n }\r\n public onUpdate() {\r\n if (this.data.d!=0) {\r\n let delta = this.data.d * this.settings.speedAccelerate\r\n this.data.d -= delta\r\n this.data.v = delta \r\n\r\n if (Math.abs(this.data.v) < .1) {\r\n this.data.d = 0\r\n this.data.v = 0\r\n this.onScrollStop();\r\n } \r\n }\r\n }\r\n public onScroll(e: any) {\r\n this.data.c = this.d.documentElement.scrollTop;\r\n this.data.t = this.d.documentElement.scrollTop;\r\n }\r\n\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n if (this.data.d == 0) {\r\n this.onScrollStart()\r\n }\r\n let plusDelta = e.deltaY\r\n if (this.data.t == 0) {\r\n this.data.d += Math.max(0, e.deltaY);\r\n }\r\n this.data.d += plusDelta;\r\n }\r\n }\r\n}","\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\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: any = false;\r\n private readonly velocityThreshold = 0.1;\r\n private plusDelta: number = 0\r\n private previousCurrent: number = 0\r\n\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 === null) {\r\n this.isBottomScrollDirection = newDirection;\r\n return;\r\n }\r\n this.data.sDB = newDirection;\r\n this.onChangeDirection();\r\n \r\n document.documentElement.classList.toggle(CLASS_NAMES.SCROLL_FORWARD, newDirection);\r\n document.documentElement.classList.toggle(CLASS_NAMES.SCROLL_BACK, !newDirection);\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 this.isBottomScrollDirection = null\r\n }\r\n\r\n private delta: number = 0;\r\n public onUpdate(): void {\r\n \r\n if (this.isScrollbarManipulation) {\r\n this.isScrollbarManipulation = false;\r\n this.data.t = this.scrollContainer?.scrollTop ?? document.documentElement.scrollTop;\r\n this.data.c = this.data.t;\r\n return;\r\n }\r\n if (this.data.d != 0) {\r\n this.delta = this.data.d * this.settings.speedAccelerate\r\n this.data.t = Math.min(Math.max(0, this.data.t + this.delta), this.data.bS);\r\n this.data.d -= this.delta\r\n this.data.v = (this.data.t - this.data.c) * this.settings.speed\r\n\r\n const absVelocity = Math.abs(this.data.v);\r\n if (this.data.v > 0) {\r\n this.data.c = Math.ceil(this.data.c + this.data.v);\r\n } else {\r\n this.data.c = Math.floor(this.data.c + this.data.v);\r\n }\r\n this.updateScrollDirection(this.data.v > 0);\r\n if (absVelocity < this.velocityThreshold) {\r\n this.stopScroll();\r\n this.onScrollStop();\r\n \r\n } else {\r\n this.isProg = true;\r\n if (this.previousCurrent != this.data.c) {\r\n this.previousCurrent = this.data.c\r\n this.onCalcUpdate();\r\n }\r\n }\r\n }\r\n }\r\n\r\n \r\n\r\n public onWheel(e: WheelEvent) {\r\n e.preventDefault()\r\n this.plusDelta = e.deltaY;\r\n if (this.plusDelta === 0) return;\r\n if (this.data.d === 0) {\r\n this.onScrollStart();\r\n }\r\n let scrollDirection = Math.sign(this.plusDelta);\r\n if ((this.data.t === 0 && scrollDirection < 0) || (this.data.t === this.data.bS && scrollDirection > 0)) return;\r\n this.data.d += this.plusDelta;\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 = this.scrollContainer?.scrollTop ?? document.documentElement.scrollTop - this.data.c\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{\r\n private sC: number = 0.1\r\n private sA: number = 0.25\r\n\r\n public get speed() {\r\n return this.sC\r\n }\r\n public get speedAccelerate() {\r\n return this.sA\r\n }\r\n\r\n public set speedAccelerate(speed: number) {\r\n this.sA = speed\r\n }\r\n public set speed(speed: number) {\r\n this.sC = speed\r\n }\r\n\r\n \r\n}","import { StringBase } from '../../Objects/StringBase';\r\nimport { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\ninterface ISplitOptions {\r\n line?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n word?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n char?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n charLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n charWord?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n wordLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n}\r\n\r\nexport class StringSplit extends StringBase {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'split';\r\n }\r\n\r\n onStart(): void {}\r\n onResize(): void {\r\n document.querySelectorAll(`[string=\"split\"].-splited`).forEach((element) => {\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n if (!element.classList.contains('-splited')) {\r\n element.classList.add('-splited');\r\n element.setAttribute('string-split-original', element.innerHTML);\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n \r\n if (element.innerHTML != this.split(splitOptions, element).html) {\r\n element.innerHTML = this.split(splitOptions, element).html\r\n }\r\n }\r\n }\r\n\r\n private parseSplitOptions(attributeValue: string | null): ISplitOptions {\r\n const options: ISplitOptions = {\r\n line: [],\r\n word: [],\r\n char: [],\r\n charLine: [],\r\n charWord: [],\r\n wordLine: [],\r\n };\r\n\r\n if (attributeValue) {\r\n const parts = attributeValue.split('|');\r\n\r\n parts.forEach((part) => {\r\n const match = part.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\r\n\r\n if (match) {\r\n const prefix = match[1] || '';\r\n const option = match[2];\r\n const params = match[4] ? match[4].split(',') : [];\r\n switch (prefix + option) {\r\n case 'char-line':\r\n (options.charLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char-word':\r\n (options.charWord as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word-line':\r\n (options.wordLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'line':\r\n (options.line as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word':\r\n (options.word as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char':\r\n (options.char as any[]).push(this.parseParam(params));\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private parseParam(params: string[]): { align: string; random?: { min: number; max: number }; abs?: boolean } {\r\n const result: { align: string; random?: { min: number; max: number }; abs?: boolean } = { align: 'start' };\r\n\r\n params.forEach((param) => {\r\n if (param === 'abs') {\r\n result.abs = true;\r\n } else if (param.startsWith('random')) {\r\n const match = param.match(/random\\((\\d+),(\\d+)\\)/);\r\n if (match) {\r\n result.random = { min: parseInt(match[1]), max: parseInt(match[2]) };\r\n result.align = 'random';\r\n } else {\r\n result.align = 'random';\r\n }\r\n } else if (['start', 'center', 'end'].includes(param)) {\r\n result.align = param;\r\n } else {\r\n result.align = 'start';\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public split(options: ISplitOptions, elementRoot: any): any {\r\n //let text = elementRoot.innerHTML;\r\n let text = elementRoot.getAttribute('string-split-original');\r\n if (text.length === 0) return '';\r\n\r\n text = this.decodeHtmlEntity(text);\r\n \r\n const element = document.createElement('span');\r\n const words = text.split(/\\s+/);\r\n let globalCharIndex = 0;\r\n let globalWordIndex = 0;\r\n const totalChars = text.replace(/\\s/g, '').length;\r\n\r\n const tempSpan = document.createElement('span');\r\n const compStyles = window.getComputedStyle(elementRoot);\r\n\r\n tempSpan.style.fontFamily = compStyles.fontFamily;\r\n tempSpan.style.fontSize = compStyles.fontSize;\r\n tempSpan.style.letterSpacing = compStyles.letterSpacing;\r\n tempSpan.style.lineHeight = compStyles.lineHeight;\r\n tempSpan.style.fontWeight = compStyles.fontWeight;\r\n tempSpan.classList.add('-s-char');\r\n document.body.appendChild(tempSpan);\r\n\r\n let virtualLines: any[] = [];\r\n let virtualLine: any[] = [];\r\n let currentLineWidth = 0;\r\n words.forEach((word: any, wordIndex: any) => {\r\n tempSpan.textContent = word;\r\n if (word.length > 0) {\r\n tempSpan.textContent += '\\u00a0';\r\n }\r\n\r\n const wordWidth = tempSpan.offsetWidth;\r\n\r\n const virtualWordSpan = {\r\n text: word,\r\n width: wordWidth,\r\n chars: new Array<any>(),\r\n };\r\n const chars = Array.from(word);\r\n chars.forEach((char, charIndex) => {\r\n const virtualCharSpan = {\r\n text: char,\r\n };\r\n\r\n virtualWordSpan.chars.push(virtualCharSpan);\r\n });\r\n if (currentLineWidth + wordWidth > elementRoot.offsetWidth) {\r\n virtualLines.push(virtualLine);\r\n virtualLine = [];\r\n currentLineWidth = 0;\r\n globalCharIndex += virtualLine.length;\r\n }\r\n virtualLine.push(virtualWordSpan);\r\n currentLineWidth += wordWidth;\r\n });\r\n\r\n virtualLines.push(virtualLine);\r\n\r\n let hasLineOptions = false;\r\n if (options.line != null) {\r\n if (options.line.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.wordLine != null) {\r\n if (options.wordLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.charLine != null) {\r\n if (options.charLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n\r\n let addedWordsCount = 0;\r\n if (hasLineOptions) {\r\n // for (let i = 0; i < virtualLines.length; i++) {\r\n // addedWordsCount += virtualLines[i].length;\r\n // }\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n this.appendVirtualLineToDOM(\r\n i,\r\n virtualLines.length,\r\n words.length,\r\n element,\r\n virtualLines[i],\r\n options,\r\n globalCharIndex,\r\n totalChars,\r\n addedWordsCount\r\n );\r\n addedWordsCount += virtualLines[i].length;\r\n }\r\n } else {\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n virtualLines[i].forEach((virtualWordSpan: any, wordIndex: any) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n if ((options.char!=null && options.char?.length > 0) || (options.charWord != null && options.charWord?.length > 0)) {\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n });\r\n } else {\r\n wordSpan.textContent = virtualWordSpan.text;\r\n }\r\n \r\n\r\n this.applyOptions(wordSpan, options.word, globalWordIndex, 'word', wordIndex, words.length);\r\n if (virtualWordSpan.chars.length > 0) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n element.appendChild(wordSpan);\r\n globalWordIndex++;\r\n }\r\n });\r\n }\r\n }\r\n\r\n document.body.removeChild(tempSpan);\r\n return { html: element.innerHTML };\r\n }\r\n\r\n // TODO: remove line - char,word\r\n private appendVirtualLineToDOM(\r\n lineIndex: number,\r\n length: number,\r\n totalWords: number,\r\n element: HTMLSpanElement,\r\n virtualLine: any[],\r\n options: ISplitOptions,\r\n globalCharIndex: number,\r\n totalChars: number,\r\n addedWordsCount: number\r\n ) {\r\n const lineSpan = document.createElement('span');\r\n lineSpan.classList.add('-s-line');\r\n\r\n this.applyOptions(lineSpan, options.line, lineIndex, 'line', 0, length);\r\n\r\n let lineCharIndex = 0;\r\n let globalWordIndex = 0;\r\n let totalLineChars = 0;\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n totalLineChars += virtualWordSpan.text.length;\r\n });\r\n virtualLine.forEach((virtualWordSpan, wordIndex) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n\r\n virtualWordSpan.chars.forEach((virtualCharSpan: any, charIndex: any) => {\r\n const charSpan = document.createElement('span');\r\n charSpan.classList.add('-s-char');\r\n charSpan.textContent = virtualCharSpan.text;\r\n\r\n this.applyOptions(charSpan, options.char, globalCharIndex, 'char', charIndex, totalChars);\r\n this.applyOptions(charSpan, options.charLine, lineCharIndex, 'char-line', charIndex, totalLineChars);\r\n this.applyOptions(charSpan, options.charWord, charIndex, 'char-word', charIndex, virtualWordSpan.text.length);\r\n\r\n wordSpan.appendChild(charSpan);\r\n globalCharIndex++;\r\n lineCharIndex++;\r\n });\r\n\r\n this.applyOptions(\r\n wordSpan,\r\n options.word,\r\n addedWordsCount + globalWordIndex,\r\n 'word',\r\n addedWordsCount + globalWordIndex,\r\n totalWords - 1\r\n );\r\n this.applyOptions(wordSpan, options.wordLine, wordIndex, 'word-line', wordIndex, virtualLine.length);\r\n\r\n if (wordIndex < virtualLine.length - 1) {\r\n wordSpan.innerHTML += '\\u00a0';\r\n }\r\n // +'\\u00a0';\r\n\r\n lineSpan.appendChild(wordSpan);\r\n // if (wordIndex < virtualLine.length - 1) {\r\n // lineSpan.appendChild(this.createSpaceSpan());\r\n // }\r\n globalWordIndex++;\r\n }\r\n });\r\n\r\n element.appendChild(lineSpan);\r\n }\r\n\r\n private applyOptions(\r\n span: HTMLSpanElement,\r\n optionArray: any[] | undefined,\r\n globalIndex: number,\r\n type: string,\r\n localIndex: number,\r\n parentLength: number\r\n ) {\r\n if (optionArray) {\r\n optionArray.forEach((option, optionIndex) => {\r\n let index = this.calculateIndex(option, globalIndex, localIndex, parentLength);\r\n\r\n const variableName = this.generateVariableName(type, option, optionIndex);\r\n span.style.setProperty(variableName, String(index));\r\n });\r\n }\r\n }\r\n\r\n private createSpaceSpan(): HTMLSpanElement {\r\n const spaceSpan = document.createElement('span');\r\n spaceSpan.innerHTML = '\\u00a0';\r\n return spaceSpan;\r\n }\r\n\r\n private decodeHtmlEntity(str: string) {\r\n return str.replace(/&amp;/g, '&');\r\n }\r\n\r\n private calculateIndex(\r\n options: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n globalIndex: number,\r\n localIndex: number,\r\n parentLength: number\r\n ): number {\r\n let index = globalIndex;\r\n if (options.align === 'random') {\r\n if (options.random === undefined) {\r\n options.random = { min: 0, max: parentLength };\r\n }\r\n const min = options.random.min || 0;\r\n const max = options.random.max || parentLength;\r\n index = Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n if (options.align === 'end') {\r\n index = parentLength - index - 1;\r\n } else if (options.align === 'center') {\r\n index = index - Math.floor(parentLength / 2);\r\n }\r\n\r\n if (options.abs) {\r\n index = Math.abs(index);\r\n }\r\n return index;\r\n }\r\n\r\n private generateVariableName(\r\n type: string,\r\n option: { align: string; random?: { min: number; max: number }; abs?: boolean },\r\n index: number\r\n ): string {\r\n let variableName = `--${type}`;\r\n if (option.align) {\r\n variableName += `-${option.align}`;\r\n }\r\n return variableName;\r\n }\r\n}\r\n","export class StringFPS {\r\n private isAnimationStarted: boolean = false;\r\n private fpsInterval: 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.requestAnimationId = requestAnimationFrame(() => this.animate());\r\n this.onFrameCallback();\r\n };\r\n } else {\r\n 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 this.requestAnimationId = requestAnimationFrame(() => this.animate());\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: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this._type = 2;\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.right = '10px';\r\n this.displayElement.style.backgroundColor = '#000000';\r\n this.displayElement.style.border = '1px solid rgba(255, 255, 255, 0.2)';\r\n this.displayElement.style.zIndex = '9999';\r\n this.displayElement.setAttribute('data-fps', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-fps]::after {\r\n content: 'FPS: ' attr(fps);\r\n position: relative;\r\n display: block;\r\n color: #ffffff;\r\n padding: 5px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n this.intervalId = setInterval(() => {\r\n this.displayElement.setAttribute('fps', `${this.callCount}`);\r\n this.callCount = 0;\r\n }, 1000);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++;\r\n }\r\n\r\n destructor() {\r\n clearInterval(this.intervalId);\r\n document.body.removeChild(this.displayElement);\r\n }\r\n}","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 {\r\n three: any = null;\r\n\r\n t: number = 0;\r\n c: number = 0;\r\n d: number = 0;\r\n v: number = 0;\r\n dV: number = 0;\r\n sDB: boolean = false;\r\n\r\n bS: number = 0;\r\n cF: number = 1;\r\n wS: number = 0;\r\n hnwS: number = 0;\r\n\r\n psW: number = 0;\r\n psH: number = 0;\r\n\r\n cL: any = {x:0,y:0}\r\n\r\n scsW: number = 1;\r\n scsH: number = 1;\r\n sD: 'vertical' | 'horizontal' = 'vertical';\r\n sC: any;\r\n sM: 'smooth' | 'disable' | 'default' = 'smooth';\r\n}\r\n","export class StringEvent{\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}","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 { StringSVG } from './Media/Modules/StringSVG';\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 { StringDefaultSettings } from './Utils/StringDefaultSettings';\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 private _defaultSettings: StringDefaultSettings = new StringDefaultSettings()\r\n\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 private fps: number = 0\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 Array.from(this.objects.values()).forEach((object) => {\r\n this.setupObject(object.el, object);\r\n });\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 document.addEventListener(\"visibilitychange\", () => {\r\n if (document.hidden) {\r\n this.loop.stop()\r\n } else {\r\n this.loop.start(this.fps)\r\n }\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 \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 defaultSettings: this._defaultSettings,\r\n parser: this._parser,\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.fps = fps\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\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 const attributes = this.getAllAttributes(el);\r\n if (object?.getProperty<IntersectionObserver>('observer-progress') != null) {\r\n object?.getProperty<IntersectionObserver>('observer-progress').disconnect();\r\n }\r\n if (object?.getProperty<IntersectionObserver>('observer-inview') != null) {\r\n object?.getProperty<IntersectionObserver>('observer-inview').disconnect();\r\n }\r\n //object.lerp = attributes[\"string-lerp\"] ?? this._defaultSettings.stringLerp;\r\n //object.weight = parseFloat(attributes[\"string-weight\"] ?? \"0.0\");\r\n //object.calculatePositions(windowSize);\r\n\r\n object.id = attributes[\"string-id\"] ?? `string-${this.globalId}`;\r\n object.keys = (attributes[\"string\"] ?? \"\").split('|');\r\n object.key = attributes[\"string-key\"] ?? this._defaultSettings.stringKey;\r\n el.setAttribute(`string-id`, object.id);\r\n\r\n\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 object.setProperty<boolean>('active', true)\r\n object.setProperty<number>('offset-start', 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.setProperty<number>('offset-end', 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 object.setProperty<number>('inview-top', 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 object.setProperty<number>('inview-bottom', 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 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.setProperty<number>('start', startPos);\r\n object.setProperty<number>('end', startPos + (this.data.sD == 'vertical' ? rH : rW));\r\n object.setProperty<number>('size', this.data.sD == 'vertical' ? rH : rW)\r\n object.setProperty<boolean>('repeat', attributes[\"string-repeat\"] !== undefined);\r\n object.setProperty<boolean>('self-disable', attributes[\"string-self-disable\"] !== undefined);\r\n object.setProperty<boolean>('abs', attributes[\"string-abs\"] !== undefined);\r\n object.setProperty<number>('half-width', rW / 2);\r\n object.setProperty<number>('half-height', rH / 2);\r\n\r\n\r\n\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 this.modules.forEach((module: IStringModule) => {\r\n if (module.tryConnect(object)) {\r\n module.initObject(this.globalId, object, el, attributes);\r\n module.connect(object);\r\n }\r\n });\r\n\r\n let observerStart = object.getProperty<number>('offset-start');\r\n let observerEnd = object.getProperty<number>('offset-end');\r\n\r\n let callbackProgress = (entries: any) => {\r\n entries.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`activate_object_${object.id}`, true);\r\n object.enter();\r\n } else {\r\n this.events.emit(`activate_object_${object.id}`, false);\r\n object.leave();\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 \r\n let optionsInview = {\r\n root: null,\r\n rootMargin: `${observerStart + object.getProperty<number>('inview-top')}px 0px ${observerEnd + object.getProperty<number>('inview-bottom')}px 0px`,\r\n threshold: 0.001,\r\n };\r\n \r\n\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n obProgress.observe(el);\r\n obInview.observe(el);\r\n object.setProperty<IntersectionObserver>('observer-progress', obProgress);\r\n object.setProperty<IntersectionObserver>('observer-inview', obInview);\r\n }\r\n\r\n private 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 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?.getProperty<IntersectionObserver>('observer-progress') != null) {\r\n removedObject?.getProperty<IntersectionObserver>('observer-progress').disconnect();\r\n }\r\n if (removedObject?.getProperty<IntersectionObserver>('observer-inview') != null) {\r\n removedObject?.getProperty<IntersectionObserver>('observer-inview').disconnect();\r\n }\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, StringSVG, 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","StringDefaultSettings","stringOffsetStart","stringOffsetEnd","stringEnterEl","stringExitEl","stringEnterVp","stringExitVp","stringInviewTop","stringInviewBottom","stringKey","stringStrength","stringRadius","stringLerp","stringParallaxBias","stringParallax","StringParser","parseSingle","v","element","wH","baseRem","pV","isNegative","startsWith","slice","offsetHeight","endsWith","parseFloat","StringModule","type","_type","constructor","visitor","settings","parser","defaultSettings","objectsMap","Map","objects","Array","htmlKey","data","lerp","attribute","boundingClientRect","position","virtualCursor","events","loop","initObject","globalId","object","el","attributes","onScrollStart","onScrollStop","onChangeDirection","destructor","onChangeScrollParams","tryConnect","keys","includes","connect","onConnect","enterObject","id","has","set","push","leaveObject","delete","index","indexOf","splice","onStart","onUpdate","onResize","onRebuild","onScroll","onMouseMove","e","onWheel","onChangeDevice","onChangeScrollDirection","onMutationObserver","added","removed","StringBase","super","oldLerp","StringLazy","isStartLoaded","imageLoadingCount","document","querySelectorAll","forEach","load","getImageSize","getAttribute","classList","add","src","onLoad","removeEventListener","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","tS","bS","lS","rS","StringProgress","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","setProperty","calculatePositions","wS","setUpObject","onEnter","progress","Math","min","max","c","getProperty","applyProgress","progressStr","toString","connects","length","windowSize","StringSVG","startSrc","endSrc","startSVG","endSVG","all","loadSVG","svgStart","querySelector","svgEnd","pointsStart","pointsEnd","pathElement","createElementNS","svgContainer","appendChild","innerHTML","morphPath","fetch","text","DOMParser","parseFromString","error","interpolatedPath","interpolatePaths","startD","endD","startCommands","parsePathCommands","endCommands","interpolatedD","i","startParts","match","endParts","j","startVal","endVal","isNaN","toFixed","d","remapLerp","inMin","inMax","outMin","outMax","StringCursor","oldX","oldY","enterObjectsMap","enterObjects","overCount","cursor","cursorContent","mouseLerp","rawLerpValue","undefined","targetQuery","requestAnimationFrame","rect","getBoundingClientRect","elementX","x","left","elementY","y","top","dx","dy","lerpX","lerpY","offsetX","calculateOffset","offsetY","setMouseCoordinates","abs","cursorData","smoothX","smoothY","timeoutId","onMouseEnterEventBind","onMouseLeaveEventBind","remove","clearTimeout","onLeave","alignment","mousePos","size","StringMagnetic","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","sqrt","radius","strength","magneticX","magneticY","StringLerpCalc","current","target","amt","StringVirtualCursor","targetX","targetY","_x","_y","_lerpX","_lerpY","_lF","pow","StringObject","properties","modules","enter","leave","show","hide","DeviceType","StringResponsiveQueryDevice","config","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","thumbSize","updateThumb","contentHeight","visibleHeight","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","body","userSelect","scrollTimeout","StringAnchor","p","split","parseOrig","transformOrigin","part","trim","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","onUpdateMobileEvent","onUpdateEvent","calcExpanderFactor","isDirectionUp","isConditionMet","innerWidth","resetState","sDB","StringLerp","StringParallax","setupParallax","onScrollDesktopEvent","onScrollMobileEvent","onScrollEvent","parallaxPosition","StringScroll","isProg","isParallaxEnabled","name","vT","onCalcUpdate","scrollContainer","_scrollDirection","scrollDirection","StringScrollDefault","delta","speedAccelerate","scrollTop","plusDelta","StringScrollDisable","preventDefault","CLASS_NAMES","StringScrollSmooth","isScrollbarManipulation","isBottomScrollDirection","velocityThreshold","previousCurrent","updateScrollDirection","newDirection","toggle","stopScroll","speed","absVelocity","ceil","sign","StringTypeSettings","sC","sA","StringSplit","splitOptions","parseSplitOptions","html","contains","attributeValue","options","line","word","char","charLine","charWord","wordLine","prefix","option","params","parseParam","result","align","param","parseInt","elementRoot","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","start","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","createDisplayElement","displayElement","right","intervalId","setInterval","clearInterval","StringLerpTracker","StringPositionTracker","dirSymbol","StringAttribute","n","StringBoundingClientRect","StringData","three","cF","hnwS","cL","scsW","scsH","StringEvent","eventsByKey","on","event","updateAllEvents","off","ea","filter","h","values","listOfEvents","StringPosition","container","br","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","_defaultSettings","connectQueue","_parser","isStarted","eventMap","onWheelBind","onWheelEvent","onMouseMoveBind","onMouseMoveEvent","ResizeObserver","setupObject","observe","hidden","getInstance","reuse","find","use","objectClass","passive","initMutationObserver","addObject","connectTargetId","connectTargetObject","destroy","eventName","setupSettings","getAllAttributes","disconnect","r","rW","rH","startPos","connectItems","item","connectItem","observerStart","observerEnd","optionsProgress","rootMargin","threshold","optionsInview","obProgress","IntersectionObserver","entries","isIntersecting","obInview","attr","removeObject","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":""}