@fiddle-digital/string-tune 0.0.62 → 0.0.64
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.cjs +40 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +598 -0
- package/dist/index.d.ts +524 -23
- package/dist/index.js +39 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +40 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +17 -25
- package/dist/3D/Modules/String3DModel.d.ts +0 -14
- package/dist/3D/String3DCamera.d.ts +0 -37
- package/dist/3D/String3DObject.d.ts +0 -17
- package/dist/3D/String3DRenderer.d.ts +0 -18
- package/dist/3D/String3DScene.d.ts +0 -25
- package/dist/IStringModule.d.ts +0 -25
- package/dist/Loading/Modules/StringLazy.d.ts +0 -11
- package/dist/Loading/Modules/StringLoading.d.ts +0 -6
- package/dist/Loading/Modules/StringVideoAutoplay.d.ts +0 -16
- package/dist/Media/Modules/StringSVG.d.ts +0 -12
- package/dist/Mouse/Modules/StringCursor.d.ts +0 -19
- package/dist/Mouse/Modules/StringMagnetic.d.ts +0 -10
- package/dist/Mouse/StringVirtualCursor.d.ts +0 -20
- package/dist/Objects/StringBase.d.ts +0 -7
- package/dist/Objects/StringObject.d.ts +0 -20
- package/dist/Screen/StringInview.d.ts +0 -6
- package/dist/Screen/StringResponsive.d.ts +0 -10
- package/dist/Scroll/Modules/Scrollbar/StringScrollbar.d.ts +0 -30
- package/dist/Scroll/Modules/Scrollbar/StringScrollbarHorizontal.d.ts +0 -14
- package/dist/Scroll/Modules/Scrollbar/StringScrollbarVertical.d.ts +0 -14
- package/dist/Scroll/Modules/StringAnchor.d.ts +0 -8
- package/dist/Scroll/Modules/StringDisplacement.d.ts +0 -7
- package/dist/Scroll/Modules/StringGlide.d.ts +0 -32
- package/dist/Scroll/Modules/StringLerp.d.ts +0 -7
- package/dist/Scroll/Modules/StringParallax.d.ts +0 -13
- package/dist/Scroll/Modules/StringProgress.d.ts +0 -12
- package/dist/Scroll/Types/StringScroll.d.ts +0 -23
- package/dist/Scroll/Types/StringScrollDefault.d.ts +0 -9
- package/dist/Scroll/Types/StringScrollDisable.d.ts +0 -9
- package/dist/Scroll/Types/StringScrollSmooth.d.ts +0 -18
- package/dist/Scroll/Types/StringTypeSettings.d.ts +0 -8
- package/dist/Split/Modules/StringSplit.d.ts +0 -68
- package/dist/StringFPS.d.ts +0 -11
- package/dist/StringModule.d.ts +0 -52
- package/dist/Tracker/StringDelayLerpTracker.d.ts +0 -16
- package/dist/Tracker/StringFPSTracker.d.ts +0 -12
- package/dist/Tracker/StringLerpTracker.d.ts +0 -15
- package/dist/Tracker/StringPositionTracker.d.ts +0 -13
- package/dist/Utils/Events/AbstractHandler.d.ts +0 -1
- package/dist/Utils/Events/Handler.d.ts +0 -4
- package/dist/Utils/StringAttribute.d.ts +0 -3
- package/dist/Utils/StringBoundingClientRect.d.ts +0 -3
- package/dist/Utils/StringData.d.ts +0 -21
- package/dist/Utils/StringDefaultSettings.d.ts +0 -16
- package/dist/Utils/StringEvent.d.ts +0 -10
- package/dist/Utils/StringLerp.d.ts +0 -3
- package/dist/Utils/StringLerpCalc.d.ts +0 -3
- package/dist/Utils/StringParser.d.ts +0 -3
- package/dist/Utils/StringPosition.d.ts +0 -6
- package/dist/Utils/StringToCanvas.d.ts +0 -7
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\";\r\nimport { StringModule } from \"../../StringModule\";\r\n\r\nexport class StringVideoAutoplay extends StringModule {\r\n private static isInternetSpeedCheckStarted: boolean = false;\r\n private static internetSpeed: number | null = null;\r\n private static intervalId: number | null = null;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = \"autoplay\";\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('high-quality', this.attribute.process(el, \"string-high-src\", this.attribute.process(el, \"string-src\", '')));\r\n object.setProperty('medium-quality', this.attribute.process(el, \"string-medium-src\", object.getProperty('high-quality')));\r\n object.setProperty('low-quality', this.attribute.process(el, \"string-low-src\", object.getProperty('high-quality')));\r\n }\r\n\r\n onStart() {\r\n if (!StringVideoAutoplay.isInternetSpeedCheckStarted) {\r\n this.startGlobalSpeedCheck();\r\n }\r\n }\r\n\r\n async onConnect(object: StringObject) {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const started = this.attribute.process(videoElement, \"string-started\", null) !== null;\r\n\r\n if (videoElement.tagName.toLowerCase() === \"video\" && !started) {\r\n videoElement.setAttribute(\"string-started\", \"\");\r\n videoElement.muted = true;\r\n videoElement.setAttribute(\"muted\", \"muted\");\r\n videoElement.setAttribute(\"playsinline\", \"\");\r\n videoElement.setAttribute(\"loop\", \"\");\r\n videoElement.setAttribute(\"autoplay\", \"\");\r\n\r\n if (StringVideoAutoplay.internetSpeed === null) {\r\n StringVideoAutoplay.internetSpeed = await this.testInternetSpeed(object);\r\n }\r\n\r\n const initialQuality = this.selectQuality(object);\r\n videoElement.src = initialQuality;\r\n videoElement.dataset.qualityLevel = this.getQualityLevel(object, initialQuality).toString();\r\n\r\n videoElement.load();\r\n videoElement.addEventListener(\"canplay\", () => this.tryPlay(videoElement));\r\n }\r\n }\r\n\r\n private selectQuality(object: StringObject): string {\r\n const speed = StringVideoAutoplay.internetSpeed ?? 0;\r\n if (speed > 1.5) return object.getProperty<string>('high-quality');\r\n if (speed > 0.3) return object.getProperty<string>('medium-quality');\r\n return object.getProperty<string>('low-quality');\r\n }\r\n\r\n private getQualityLevel(object: StringObject, url: string): number {\r\n if (url === object.getProperty('high-quality')) return 3;\r\n if (url === object.getProperty('medium-quality')) return 2;\r\n return 1;\r\n }\r\n\r\n private async testInternetSpeed(object: StringObject): Promise<number> {\r\n if (object==null) {\r\n return 0\r\n }\r\n const url = object.getProperty<string>('low-quality');\r\n try {\r\n const startTime = performance.now();\r\n const response = await fetch(url, { method: \"GET\", headers: { Range: \"bytes=0-100000\" } });\r\n if (!response.ok) throw new Error(`Fetch failed: ${response.statusText}`);\r\n const duration = (performance.now() - startTime) / 1000;\r\n return 0.1 / duration;\r\n } catch (error) {\r\n console.error(\"[StringVideoAutoplay] Error testing internet speed:\", error);\r\n return 0;\r\n }\r\n }\r\n\r\n private startGlobalSpeedCheck() {\r\n if (StringVideoAutoplay.isInternetSpeedCheckStarted) return;\r\n StringVideoAutoplay.isInternetSpeedCheckStarted = true;\r\n\r\n const checkSpeed = async () => {\r\n if (this.objects.length === 0 && StringVideoAutoplay.intervalId !== null) {\r\n clearInterval(StringVideoAutoplay.intervalId);\r\n StringVideoAutoplay.intervalId = null;\r\n return;\r\n }\r\n\r\n const speed = await this.testInternetSpeed(this.objects[0]);\r\n StringVideoAutoplay.internetSpeed = speed;\r\n\r\n this.objects.forEach(async (object) => {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const newQuality = this.selectQuality(object);\r\n const newQualityLevel = this.getQualityLevel(object, newQuality);\r\n const currentQualityLevel = parseInt(videoElement.dataset.qualityLevel || '0');\r\n\r\n if (newQualityLevel < currentQualityLevel && videoElement.currentTime > 0) return;\r\n\r\n if (newQualityLevel !== object.getProperty('quality') &&\r\n videoElement.dataset.qualityLevel === newQualityLevel.toString()) {\r\n object.setProperty('quality', newQualityLevel);\r\n\r\n const prevController = object.getProperty<AbortController>('abort-controller');\r\n if (prevController) prevController.abort();\r\n\r\n const abortController = new AbortController();\r\n object.setProperty('abort-controller', abortController);\r\n\r\n const response = await fetch(newQuality, { signal: abortController.signal });\r\n if (!response.ok) throw new Error(`Fetch error: ${response.statusText}`);\r\n\r\n const blob = await response.blob();\r\n const blobUrl = URL.createObjectURL(blob);\r\n\r\n const prevBlobUrl = object.getProperty<string>('currentBlobUrl');\r\n if (prevBlobUrl) URL.revokeObjectURL(prevBlobUrl);\r\n object.setProperty('currentBlobUrl', blobUrl);\r\n\r\n const currentTime = videoElement.currentTime;\r\n const wasPlaying = !videoElement.paused;\r\n\r\n videoElement.src = blobUrl;\r\n videoElement.load();\r\n videoElement.currentTime = currentTime;\r\n\r\n if (wasPlaying) videoElement.play().catch(console.warn);\r\n\r\n videoElement.dataset.qualityLevel = newQualityLevel.toString();\r\n }\r\n });\r\n };\r\n\r\n checkSpeed();\r\n StringVideoAutoplay.intervalId = window.setInterval(checkSpeed, 2000);\r\n }\r\n\r\n private tryPlay(element: HTMLVideoElement) {\r\n element.play().catch(err => console.warn(\"[StringVideoAutoplay] Autoplay failed:\", err));\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\r\n \r\n\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\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 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 \r\n \r\n }\r\n leave() {\r\n this.setProperty('active', false);\r\n \r\n \r\n }\r\n show() {\r\n this.onEnter();\r\n this.el.classList.add('-inview');\r\n this.modules.forEach((module: IStringModule) => {\r\n module.enterObject(this.id, this);\r\n });\r\n }\r\n hide() {\r\n this.onLeave();\r\n if (this.getProperty<boolean>('repeat')) {\r\n this.el.classList.remove('-inview');\r\n }\r\n this.modules.forEach((module: IStringModule) => {\r\n module.leaveObject(this.id);\r\n });\r\n }\r\n\r\n connect(module: IStringModule) {\r\n if (!this.modules.includes(module)) {\r\n this.modules.push(module);\r\n }\r\n }\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 if (e.deltaY != 0) {\r\n e.preventDefault()\r\n }\r\n\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(/&/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{\r\n\r\n private eventsByKey: Map<string, Array<Function>> = new Map<string, Array<Function>>()\r\n private events: Array<Function> = new Array<Function>()\r\n on(id: string, event: Function){\r\n if ( this.eventsByKey.has(id) == false) { \r\n this.eventsByKey.set(id, [])\r\n }\r\n this.eventsByKey.get(id)?.push(event)\r\n this.updateAllEvents()\r\n }\r\n public has(id: string) {\r\n return this.eventsByKey.has(id)\r\n }\r\n public emit(id: string, value: any) {\r\n if (this.eventsByKey.has(id)) {\r\n this.eventsByKey.get(id)?.forEach((event: any) => {\r\n event(value)\r\n });\r\n }\r\n }\r\n public off(id: string, event: Function) {\r\n let ea = this.eventsByKey.get(id)\r\n if (ea!=null) {\r\n this.eventsByKey.set(id, ea.filter((h: any) => h !== event))\r\n }\r\n this.updateAllEvents()\r\n }\r\n public all(value: any) {\r\n this.events.forEach(event => {\r\n event(value)\r\n });\r\n }\r\n private updateAllEvents() {\r\n this.events = [];\r\n Array.from(this.eventsByKey.values()).forEach(listOfEvents => {\r\n listOfEvents.forEach(event => {\r\n this.events.push(event)\r\n });\r\n });\r\n }\r\n}","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","/// <reference path=\"./jsx-global.d.ts\" />\r\n\r\n\r\nimport { 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\nfunction isSafari(): boolean {\r\n let ua = navigator.userAgent.toLowerCase();\r\n if (ua.indexOf('safari') != -1) {\r\n if (ua.indexOf('chrome') > -1) {\r\n return false\r\n } else {\r\n return true\r\n }\r\n } else {\r\n return false\r\n }\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 \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-bottom'] != null) {\r\n this._defaultSettings.stringOffsetStart = settings['string-offset-bottom'];\r\n }\r\n if (settings['string-offset-top'] != null) {\r\n this._defaultSettings.stringOffsetEnd = settings['string-offset-top'];\r\n }\r\n if (settings['string-offset-right'] != null) {\r\n this._defaultSettings.stringOffsetStart = settings['string-offset-right'];\r\n }\r\n if (settings['string-offset-left'] != null) {\r\n this._defaultSettings.stringOffsetEnd = settings['string-offset-left'];\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-end', this._parser.parseSingle(\r\n attributes[\"string-offset-top\"] ?? attributes[\"string-offset-right\"] ?? this._defaultSettings.stringOffsetStart,\r\n el, this.data.wS, 16\r\n ))\r\n object.setProperty<number>('offset-start', this._parser.parseSingle(\r\n attributes[\"string-offset-bottom\"] ?? attributes[\"string-offset-left\"] ?? 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: `${observerEnd + this.data.wS}px 0px ${observerStart + this.data.wS}px 0px`,\r\n threshold: 0.001,\r\n };\r\n \r\n \r\n let optionsInview = {\r\n root: null,\r\n rootMargin: `${observerEnd + object.getProperty<number>('inview-top')}px 0px ${observerStart + 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 e.preventDefault()\r\n \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 return false\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 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, StringModule, StringObject, StringData\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","setProperty","process","getProperty","isInternetSpeedCheckStarted","startGlobalSpeedCheck","videoElement","started","tagName","toLowerCase","setAttribute","muted","internetSpeed","testInternetSpeed","initialQuality","selectQuality","dataset","qualityLevel","getQualityLevel","toString","tryPlay","speed","startTime","performance","now","fetch","method","headers","Range","ok","statusText","error","console","checkSpeed","async","length","intervalId","clearInterval","newQuality","newQualityLevel","parseInt","currentTime","prevController","abort","abortController","AbortController","signal","blobUrl","prevBlobUrl","wasPlaying","paused","play","catch","warn","window","setInterval","err","tS","bS","lS","rS","StringProgress","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","calculatePositions","wS","setUpObject","onEnter","progress","Math","min","max","c","applyProgress","progressStr","connects","windowSize","StringSVG","startSrc","endSrc","startSVG","endSVG","all","loadSVG","svgStart","querySelector","svgEnd","pointsStart","pointsEnd","pathElement","createElementNS","svgContainer","appendChild","innerHTML","morphPath","text","DOMParser","parseFromString","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","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","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","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","then","requestAnimationId","onFrameCallback","animate","start","fps","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","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,"sources":["../src/index.ts","../src/Utils/StringDefaultSettings.ts","../src/Utils/StringParser.ts","../src/StringModule.ts","../src/Objects/StringBase.ts","../src/Loading/Modules/StringLazy.ts","../src/Loading/Modules/StringLoading.ts","../src/Loading/Modules/StringVideoAutoplay.ts","../src/Scroll/Modules/StringProgress.ts","../src/Media/Modules/StringSVG.ts","../src/Mouse/Modules/StringCursor.ts","../src/Mouse/Modules/StringMagnetic.ts","../src/Utils/StringLerpCalc.ts","../src/Mouse/StringVirtualCursor.ts","../src/Objects/StringObject.ts","../src/Screen/StringResponsive.ts","../src/Scroll/Modules/Scrollbar/StringScrollbarHorizontal.ts","../src/Scroll/Modules/Scrollbar/StringScrollbarVertical.ts","../src/Scroll/Modules/Scrollbar/StringScrollbar.ts","../src/Scroll/Modules/StringAnchor.ts","../src/Scroll/Modules/StringGlide.ts","../src/Scroll/Modules/StringLerp.ts","../src/Scroll/Modules/StringParallax.ts","../src/Scroll/Types/StringScroll.ts","../src/Scroll/Types/StringScrollDefault.ts","../src/Scroll/Types/StringScrollDisable.ts","../src/Scroll/Types/StringScrollSmooth.ts","../src/Scroll/Types/StringTypeSettings.ts","../src/Split/Modules/StringSplit.ts","../src/StringFPS.ts","../src/Tracker/StringDelayLerpTracker.ts","../src/Tracker/StringFPSTracker.ts","../src/Tracker/StringLerpTracker.ts","../src/Tracker/StringPositionTracker.ts","../src/Utils/StringAttribute.ts","../src/Utils/StringBoundingClientRect.ts","../src/Utils/StringData.ts","../src/Utils/StringEvent.ts","../src/Utils/StringPosition.ts"],"sourcesContent":["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\nimport './types/jsx-attrs'\r\n\r\n\r\nfunction isTouchDevice() {\r\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n}\r\nfunction isSafari(): boolean {\r\n let ua = navigator.userAgent.toLowerCase();\r\n if (ua.indexOf('safari') != -1) {\r\n if (ua.indexOf('chrome') > -1) {\r\n return false\r\n } else {\r\n return true\r\n }\r\n } else {\r\n return false\r\n }\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 \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-bottom'] != null) {\r\n this._defaultSettings.stringOffsetStart = settings['string-offset-bottom'];\r\n }\r\n if (settings['string-offset-top'] != null) {\r\n this._defaultSettings.stringOffsetEnd = settings['string-offset-top'];\r\n }\r\n if (settings['string-offset-right'] != null) {\r\n this._defaultSettings.stringOffsetStart = settings['string-offset-right'];\r\n }\r\n if (settings['string-offset-left'] != null) {\r\n this._defaultSettings.stringOffsetEnd = settings['string-offset-left'];\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-end', this._parser.parseSingle(\r\n attributes[\"string-offset-top\"] ?? attributes[\"string-offset-right\"] ?? this._defaultSettings.stringOffsetStart,\r\n el, this.data.wS, 16\r\n ))\r\n object.setProperty<number>('offset-start', this._parser.parseSingle(\r\n attributes[\"string-offset-bottom\"] ?? attributes[\"string-offset-left\"] ?? 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: `${observerEnd + this.data.wS}px 0px ${observerStart + this.data.wS}px 0px`,\r\n threshold: 0.001,\r\n };\r\n \r\n \r\n let optionsInview = {\r\n root: null,\r\n rootMargin: `${observerEnd + object.getProperty<number>('inview-top')}px 0px ${observerStart + 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 e.preventDefault()\r\n \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 return false\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 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, StringModule, StringObject, StringData\r\n};\r\n\r\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 private static isInternetSpeedCheckStarted: boolean = false;\r\n private static internetSpeed: number | null = null;\r\n private static intervalId: number | null = null;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = \"autoplay\";\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('high-quality', this.attribute.process(el, \"string-high-src\", this.attribute.process(el, \"string-src\", '')));\r\n object.setProperty('medium-quality', this.attribute.process(el, \"string-medium-src\", object.getProperty('high-quality')));\r\n object.setProperty('low-quality', this.attribute.process(el, \"string-low-src\", object.getProperty('high-quality')));\r\n }\r\n\r\n onStart() {\r\n if (!StringVideoAutoplay.isInternetSpeedCheckStarted) {\r\n this.startGlobalSpeedCheck();\r\n }\r\n }\r\n\r\n async onConnect(object: StringObject) {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const started = this.attribute.process(videoElement, \"string-started\", null) !== null;\r\n\r\n if (videoElement.tagName.toLowerCase() === \"video\" && !started) {\r\n videoElement.setAttribute(\"string-started\", \"\");\r\n videoElement.muted = true;\r\n videoElement.setAttribute(\"muted\", \"muted\");\r\n videoElement.setAttribute(\"playsinline\", \"\");\r\n videoElement.setAttribute(\"loop\", \"\");\r\n videoElement.setAttribute(\"autoplay\", \"\");\r\n\r\n if (StringVideoAutoplay.internetSpeed === null) {\r\n StringVideoAutoplay.internetSpeed = await this.testInternetSpeed(object);\r\n }\r\n\r\n const initialQuality = this.selectQuality(object);\r\n videoElement.src = initialQuality;\r\n videoElement.dataset.qualityLevel = this.getQualityLevel(object, initialQuality).toString();\r\n\r\n videoElement.load();\r\n videoElement.addEventListener(\"canplay\", () => this.tryPlay(videoElement));\r\n }\r\n }\r\n\r\n private selectQuality(object: StringObject): string {\r\n const speed = StringVideoAutoplay.internetSpeed ?? 0;\r\n if (speed > 1.5) return object.getProperty<string>('high-quality');\r\n if (speed > 0.3) return object.getProperty<string>('medium-quality');\r\n return object.getProperty<string>('low-quality');\r\n }\r\n\r\n private getQualityLevel(object: StringObject, url: string): number {\r\n if (url === object.getProperty('high-quality')) return 3;\r\n if (url === object.getProperty('medium-quality')) return 2;\r\n return 1;\r\n }\r\n\r\n private async testInternetSpeed(object: StringObject): Promise<number> {\r\n if (object==null) {\r\n return 0\r\n }\r\n const url = object.getProperty<string>('low-quality');\r\n try {\r\n const startTime = performance.now();\r\n const response = await fetch(url, { method: \"GET\", headers: { Range: \"bytes=0-100000\" } });\r\n if (!response.ok) throw new Error(`Fetch failed: ${response.statusText}`);\r\n const duration = (performance.now() - startTime) / 1000;\r\n return 0.1 / duration;\r\n } catch (error) {\r\n console.error(\"[StringVideoAutoplay] Error testing internet speed:\", error);\r\n return 0;\r\n }\r\n }\r\n\r\n private startGlobalSpeedCheck() {\r\n if (StringVideoAutoplay.isInternetSpeedCheckStarted) return;\r\n StringVideoAutoplay.isInternetSpeedCheckStarted = true;\r\n\r\n const checkSpeed = async () => {\r\n if (this.objects.length === 0 && StringVideoAutoplay.intervalId !== null) {\r\n clearInterval(StringVideoAutoplay.intervalId);\r\n StringVideoAutoplay.intervalId = null;\r\n return;\r\n }\r\n\r\n const speed = await this.testInternetSpeed(this.objects[0]);\r\n StringVideoAutoplay.internetSpeed = speed;\r\n\r\n this.objects.forEach(async (object) => {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const newQuality = this.selectQuality(object);\r\n const newQualityLevel = this.getQualityLevel(object, newQuality);\r\n const currentQualityLevel = parseInt(videoElement.dataset.qualityLevel || '0');\r\n\r\n if (newQualityLevel < currentQualityLevel && videoElement.currentTime > 0) return;\r\n\r\n if (newQualityLevel !== object.getProperty('quality') &&\r\n videoElement.dataset.qualityLevel === newQualityLevel.toString()) {\r\n object.setProperty('quality', newQualityLevel);\r\n\r\n const prevController = object.getProperty<AbortController>('abort-controller');\r\n if (prevController) prevController.abort();\r\n\r\n const abortController = new AbortController();\r\n object.setProperty('abort-controller', abortController);\r\n\r\n const response = await fetch(newQuality, { signal: abortController.signal });\r\n if (!response.ok) throw new Error(`Fetch error: ${response.statusText}`);\r\n\r\n const blob = await response.blob();\r\n const blobUrl = URL.createObjectURL(blob);\r\n\r\n const prevBlobUrl = object.getProperty<string>('currentBlobUrl');\r\n if (prevBlobUrl) URL.revokeObjectURL(prevBlobUrl);\r\n object.setProperty('currentBlobUrl', blobUrl);\r\n\r\n const currentTime = videoElement.currentTime;\r\n const wasPlaying = !videoElement.paused;\r\n\r\n videoElement.src = blobUrl;\r\n videoElement.load();\r\n videoElement.currentTime = currentTime;\r\n\r\n if (wasPlaying) videoElement.play().catch(console.warn);\r\n\r\n videoElement.dataset.qualityLevel = newQualityLevel.toString();\r\n }\r\n });\r\n };\r\n\r\n checkSpeed();\r\n StringVideoAutoplay.intervalId = window.setInterval(checkSpeed, 2000);\r\n }\r\n\r\n private tryPlay(element: HTMLVideoElement) {\r\n element.play().catch(err => console.warn(\"[StringVideoAutoplay] Autoplay failed:\", err));\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\r\n \r\n\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\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 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 \r\n \r\n }\r\n leave() {\r\n this.setProperty('active', false);\r\n \r\n \r\n }\r\n show() {\r\n this.onEnter();\r\n this.el.classList.add('-inview');\r\n this.modules.forEach((module: IStringModule) => {\r\n module.enterObject(this.id, this);\r\n });\r\n }\r\n hide() {\r\n this.onLeave();\r\n if (this.getProperty<boolean>('repeat')) {\r\n this.el.classList.remove('-inview');\r\n }\r\n this.modules.forEach((module: IStringModule) => {\r\n module.leaveObject(this.id);\r\n });\r\n }\r\n\r\n connect(module: IStringModule) {\r\n if (!this.modules.includes(module)) {\r\n this.modules.push(module);\r\n }\r\n }\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 if (e.deltaY != 0) {\r\n e.preventDefault()\r\n }\r\n\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(/&/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{\r\n\r\n private eventsByKey: Map<string, Array<Function>> = new Map<string, Array<Function>>()\r\n private events: Array<Function> = new Array<Function>()\r\n on(id: string, event: Function){\r\n if ( this.eventsByKey.has(id) == false) { \r\n this.eventsByKey.set(id, [])\r\n }\r\n this.eventsByKey.get(id)?.push(event)\r\n this.updateAllEvents()\r\n }\r\n public has(id: string) {\r\n return this.eventsByKey.has(id)\r\n }\r\n public emit(id: string, value: any) {\r\n if (this.eventsByKey.has(id)) {\r\n this.eventsByKey.get(id)?.forEach((event: any) => {\r\n event(value)\r\n });\r\n }\r\n }\r\n public off(id: string, event: Function) {\r\n let ea = this.eventsByKey.get(id)\r\n if (ea!=null) {\r\n this.eventsByKey.set(id, ea.filter((h: any) => h !== event))\r\n }\r\n this.updateAllEvents()\r\n }\r\n public all(value: any) {\r\n this.events.forEach(event => {\r\n event(value)\r\n });\r\n }\r\n private updateAllEvents() {\r\n this.events = [];\r\n Array.from(this.eventsByKey.values()).forEach(listOfEvents => {\r\n listOfEvents.forEach(event => {\r\n this.events.push(event)\r\n });\r\n });\r\n }\r\n}","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"],"mappings":"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","names":["index_exports","__export","StringAnchor","StringCursor","StringData","StringDelayLerpTracker","StringFPSTracker","StringGlide","StringLazy","StringLerp","StringLerpTracker","StringLoading","StringMagnetic","StringModule","StringObject","StringParallax","StringPositionTracker","StringProgress","StringResponsive","StringSVG","StringScrollbar","StringSplit","StringTune","StringVideoAutoplay","StringDefaultSettings","StringParser","v","element","wH","baseRem","isNegative","pV","StringModule","visitor","settings","StringParser","StringDefaultSettings","globalId","object","el","attributes","id","index","data","e","added","removed","StringBase","StringModule","visitor","settings","globalId","object","el","attributes","StringLazy","StringBase","visitor","element","object","onLoad","url","resolve","reject","xhr","buffer","blob","img","StringLoading","StringModule","visitor","settings","_StringVideoAutoplay","StringModule","visitor","globalId","object","el","attributes","videoElement","started","initialQuality","_a","speed","url","startTime","response","error","checkSpeed","newQuality","newQualityLevel","currentQualityLevel","prevController","abortController","blob","blobUrl","prevBlobUrl","currentTime","wasPlaying","element","err","StringVideoAutoplay","tS","bS","lS","rS","StringProgress","StringBase","visitor","globalId","object","el","attributes","_a","_b","_c","_d","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","data","progress","progressStr","element","windowSize","StringSVG","StringProgress","visitor","globalId","object","el","attributes","_a","startSrc","endSrc","startSVG","endSVG","svgStart","svgEnd","pointsStart","pointsEnd","pathElement","svgContainer","data","url","text","error","progress","interpolatedPath","startD","endD","startCommands","endCommands","interpolatedD","i","startParts","endParts","j","startVal","endVal","interpolatedVal","d","remapLerp","value","inMin","inMax","outMin","outMax","t","StringCursor","StringBase","visitor","settings","globalId","object","el","attributes","_a","rawLerpValue","targetQuery","data","rect","elementX","elementY","dx","dy","lerpX","lerpY","offsetX","offsetY","cursorData","element","timeoutId","onMouseEnterEventBind","onMouseLeaveEventBind","x","y","alignment","mousePos","size","StringMagnetic","StringBase","visitor","globalId","object","el","attributes","_a","_b","element","e","rect","elementCenterX","elementCenterY","distX","distY","distance","radius","strength","data","magneticX","magneticY","lerpX","lerpY","StringLerpCalc","current","target","amt","StringVirtualCursor","mouseLerp","StringLerpCalc","value","e","StringObject","element","key","value","_a","module","StringResponsiveQueryDevice","config","_a","enable","min","max","query","StringResponsive","StringModule","visitor","settings","_b","_c","_d","isMobileMedia","isTabletMedia","isLaptopMedia","isDesktopMedia","element","showElement","StringScrollbarHorizontal","data","scrollbar","thumb","contentSize","visibleSize","thumbSize","contentHeight","visibleHeight","e","deltaY","newScrollPosition","StringScrollbarVertical","data","scrollbar","thumb","contentSize","visibleSize","thumbSize","contentWidth","visibleWidth","e","deltaX","newScrollPosition","StringScrollbar","StringModule","visitor","data","style","StringScrollbarHorizontal","StringScrollbarVertical","StringAnchor","StringBase","visitor","globalId","object","el","attributes","p","x","y","part","o","s","c","StringGlide","StringBase","visitor","settings","object","transformCompute","i","baseVelocityMultiplier","reducedVelocityMultiplier","negativeVelocityMultiplier","globalId","el","attributes","_a","isDirectionUp","isConditionMet","data","StringLerp","StringBase","visitor","object","data","StringParallax","StringProgress","visitor","object","progress","transformCompute","element","globalId","el","attributes","_a","_b","parallaxPosition","data","StringScroll","document","settings","data","e","scrollDirection","StringScrollDefault","StringScroll","document","settings","data","delta","e","plusDelta","StringScrollDisable","StringScroll","document","settings","data","e","CLASS_NAMES","StringScrollSmooth","StringScroll","document","settings","data","newDirection","_a","_b","absVelocity","scrollDirection","StringTypeSettings","speed","StringSplit","StringBase","visitor","element","splitOptions","object","attributeValue","options","part","match","prefix","option","params","result","param","elementRoot","text","words","globalCharIndex","globalWordIndex","totalChars","tempSpan","compStyles","virtualLines","virtualLine","currentLineWidth","word","wordIndex","wordWidth","virtualWordSpan","char","charIndex","virtualCharSpan","hasLineOptions","addedWordsCount","i","_a","_b","wordSpan","charSpan","lineIndex","length","totalWords","lineSpan","lineCharIndex","totalLineChars","span","optionArray","globalIndex","type","localIndex","parentLength","optionIndex","index","variableName","spaceSpan","str","min","max","StringFPS","fps","now","elapsed","callback","StringDelayLerpTracker","StringModule","visitor","data","ctx","pos","index","x","y","position","StringFPSTracker","StringModule","visitor","style","data","StringLerpTracker","StringModule","visitor","data","ctx","pos","index","x","y","position","StringPositionTracker","StringModule","visitor","style","data","dirSymbol","StringAttribute","e","n","d","StringBoundingClientRect","e","StringData","StringEvent","id","event","_a","value","ea","h","listOfEvents","nullifyTransforms","el","top","left","width","height","transformArr","parseTransform","t","det","v","StringPosition","e","container","br","error","er","o","oL","isTouchDevice","StringTune","_StringTune","StringEvent","StringFPS","StringVirtualCursor","StringLerpCalc","StringAttribute","StringBoundingClientRect","StringPosition","StringDefaultSettings","StringParser","StringTypeSettings","StringData","StringScrollSmooth","StringScrollDefault","StringScrollDisable","object","scrollDirection","module","speed","scrollPosition","i","container","isUpdateEvents","mobileMode","desktopMode","isTouchDevice","type","objectClass","settings","fps","element","connectTargetId","connectTargetObject","key","event","id","eventName","el","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","attributes","r","rW","rH","startPos","connectItems","item","connectItem","observerStart","observerEnd","callbackProgress","entries","e","callbackInview","optionsProgress","optionsInview","obProgress","obInview","attr","isInit","StringObject","removedObject","newWW","newWH","rect","error","handleRemovedElement","removeId","connectQueueItem","handleAddedElement","observer","mutations","mutation","removedNode","childElement","addedNode","config","parseTransform","v","transformContainer","b","h"]}
|