@fiddle-digital/string-tune 0.0.1
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/LICENSE +21 -0
- package/dist/IStringModule.d.ts +20 -0
- package/dist/Loading/Modules/StringLazy.d.ts +8 -0
- package/dist/Loading/Modules/StringLoading.d.ts +6 -0
- package/dist/Loading/Modules/StringVideoAutoplay.d.ts +7 -0
- package/dist/Mouse/Modules/StringCursor.d.ts +16 -0
- package/dist/Mouse/Modules/StringMagnetic.d.ts +9 -0
- package/dist/Mouse/StringVirtualCursor.d.ts +18 -0
- package/dist/Objects/StringObject.d.ts +54 -0
- package/dist/Scroll/Modules/Scrollbar/StringScrollbar.d.ts +30 -0
- package/dist/Scroll/Modules/Scrollbar/StringScrollbarHorizontal.d.ts +14 -0
- package/dist/Scroll/Modules/Scrollbar/StringScrollbarVertical.d.ts +14 -0
- package/dist/Scroll/Modules/StringDisplacement.d.ts +6 -0
- package/dist/Scroll/Modules/StringParallax.d.ts +8 -0
- package/dist/Scroll/Modules/StringProgress.d.ts +9 -0
- package/dist/Scroll/Types/StringScroll.d.ts +20 -0
- package/dist/Scroll/Types/StringScrollDefault.d.ts +10 -0
- package/dist/Scroll/Types/StringScrollDisable.d.ts +9 -0
- package/dist/Scroll/Types/StringScrollSmooth.d.ts +11 -0
- package/dist/Scroll/Types/StringTypeSettings.d.ts +11 -0
- package/dist/Split/Modules/StringSplit.d.ts +68 -0
- package/dist/StringFPS.d.ts +12 -0
- package/dist/StringModule.d.ts +41 -0
- package/dist/Tracker/StringFPSTracker.d.ts +12 -0
- package/dist/Tracker/StringPositionTracker.d.ts +13 -0
- package/dist/Utils/StringAttribute.d.ts +3 -0
- package/dist/Utils/StringBoundingClientRect.d.ts +3 -0
- package/dist/Utils/StringData.d.ts +16 -0
- package/dist/Utils/StringEvent.d.ts +10 -0
- package/dist/Utils/StringLerp.d.ts +3 -0
- package/dist/Utils/StringParser.d.ts +3 -0
- package/dist/Utils/StringPosition.d.ts +6 -0
- package/dist/bundle.js +2 -0
- package/dist/bundle.js.map +1 -0
- package/dist/index.d.ts +72 -0
- package/package.json +79 -0
- package/readme.md +83 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"bundle.js","mappings":"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","sources":["webpack://StringTune/webpack/universalModuleDefinition","webpack://StringTune/webpack/bootstrap","webpack://StringTune/webpack/runtime/define property getters","webpack://StringTune/webpack/runtime/hasOwnProperty shorthand","webpack://StringTune/webpack/runtime/make namespace object","webpack://StringTune/./src/StringModule.ts","webpack://StringTune/./src/Loading/Modules/StringLazy.ts","webpack://StringTune/./src/Loading/Modules/StringLoading.ts","webpack://StringTune/./src/Loading/Modules/StringVideoAutoplay.ts","webpack://StringTune/./src/Mouse/Modules/StringCursor.ts","webpack://StringTune/./src/Mouse/Modules/StringMagnetic.ts","webpack://StringTune/./src/Utils/StringLerp.ts","webpack://StringTune/./src/Mouse/StringVirtualCursor.ts","webpack://StringTune/./src/Objects/StringObject.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/StringDisplacement.ts","webpack://StringTune/./src/Scroll/Modules/StringParallax.ts","webpack://StringTune/./src/Scroll/Modules/StringProgress.ts","webpack://StringTune/./src/Scroll/Types/StringScroll.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDefault.ts","webpack://StringTune/./src/Scroll/Types/StringScrollDisable.ts","webpack://StringTune/./src/Scroll/Types/StringScrollSmooth.ts","webpack://StringTune/./src/Scroll/Types/StringTypeSettings.ts","webpack://StringTune/./src/Split/Modules/StringSplit.ts","webpack://StringTune/./src/StringFPS.ts","webpack://StringTune/./src/Tracker/StringFPSTracker.ts","webpack://StringTune/./src/Tracker/StringPositionTracker.ts","webpack://StringTune/./src/Utils/StringAttribute.ts","webpack://StringTune/./src/Utils/StringBoundingClientRect.ts","webpack://StringTune/./src/Utils/StringData.ts","webpack://StringTune/./src/Utils/StringEvent.ts","webpack://StringTune/./src/Utils/StringParser.ts","webpack://StringTune/./src/Utils/StringPosition.ts","webpack://StringTune/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"StringTune\"] = factory();\n\telse\n\t\troot[\"StringTune\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { IStringModule } from './IStringModule';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerp } from './Utils/StringLerp';\r\nimport { StringPosition } from './Utils/StringPosition';\r\n\r\nexport class StringModule implements IStringModule {\r\n lerp: StringLerp;\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 settings: any = null;\r\n protected objectsMap: Map<string, StringObject> = new Map<string, StringObject>();\r\n protected objects: Array<StringObject> = new Array<StringObject>();\r\n protected htmlKey: string = '';\r\n protected _type: number = 1;\r\n public get type() {\r\n return this._type;\r\n }\r\n constructor(visitor: any, settings: any = null) {\r\n this.data = visitor.data;\r\n this.lerp = visitor.lerp;\r\n this.attribute = visitor.attribute;\r\n this.boundingClientRect = visitor.boundingClientRect;\r\n this.position = visitor.position;\r\n this.virtualCursor = visitor.virtualCursor;\r\n this.events = visitor.events;\r\n this.settings = settings;\r\n }\r\n destructor() {}\r\n\r\n tryConnect(object: StringObject): boolean {\r\n let stringModuleKeys = this.attribute.process(object.el, 'string', '').split('|');\r\n\r\n let value = false;\r\n stringModuleKeys.forEach((key: string) => {\r\n if (key == this.htmlKey) {\r\n value = true;\r\n }\r\n });\r\n return value;\r\n }\r\n connect(object: StringObject) {\r\n object.connect(this);\r\n this.onConnect(object);\r\n }\r\n addObject(id: string, object: StringObject) {\r\n this.objectsMap.set(id, object);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n removeObject(id: string) {\r\n this.objectsMap.delete(id);\r\n this.objects = Array.from(this.objectsMap).map(([name, value]) => value);\r\n }\r\n\r\n onStart(): void {}\r\n onUpdate(data: StringData): void {}\r\n onResize(): void {}\r\n onConnect(object: StringObject): void {}\r\n onRebuild(): void {}\r\n onScroll(data: StringData): void {}\r\n onMouseMove(e: MouseEvent): void {}\r\n onWheel(e: WheelEvent): void {}\r\n onChangeDevice(): void {}\r\n onChangeScrollDirection(): void {}\r\n onMutationObserver(added: NodeList, removed: NodeList): void {}\r\n}\r\n","import { StringObject } from '../../Objects/StringObject';\nimport { StringModule } from '../../StringModule';\n\nexport class StringLazy extends StringModule {\n constructor(visitor: any) {\n super(visitor);\n this.htmlKey = 'lazy';\n }\n\n onStart(): void {\n const imagesEls = document.querySelectorAll('img[string-lazy]');\n imagesEls.forEach((element: any) => {\n this.getImageSize(element, element.getAttribute('string-lazy'));\n element.classList.add(`lazyLoad`);\n element.src = element.getAttribute('string-lazy') as any;\n element.addEventListener('load', () => {\n element.classList.add(`-loaded`);\n });\n });\n }\n\n onConnect(object: StringObject) {\n const element = object.el as HTMLVideoElement;\n }\n\n private getImageSize(element: HTMLElement, url: string) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status === 206 || xhr.status === 200) {\n const buffer = xhr.response;\n const blob = new Blob([buffer]);\n const img = new Image();\n img.onload = () => {\n element.style.aspectRatio = `${img.width} / ${img.height}`;\n resolve({ width: img.width, height: img.height });\n URL.revokeObjectURL(img.src);\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n img.src = URL.createObjectURL(blob);\n } else {\n reject(new Error('Failed to load image'));\n }\n };\n xhr.onerror = () => {\n reject(new Error('Network error'));\n };\n xhr.setRequestHeader('Range', 'bytes=0-');\n xhr.send();\n });\n }\n}\n","import { StringModule } from \"../../StringModule\";\r\nimport { StringData } from \"../../Utils/StringData\";\r\n\r\n\r\nexport class StringLoading extends StringModule{\r\n loadingTimeout: number = 0\r\n\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor)\r\n this._type = 2\r\n\r\n if (settings != null) {\r\n if (settings.timeout != null) {\r\n this.loadingTimeout = settings.timeout\r\n }\r\n }\r\n }\r\n onStart(): void {\r\n setTimeout(() => {\r\n const htmlElement = document.documentElement;\r\n htmlElement.classList.add('-loaded');\r\n }, this.loadingTimeout);\r\n \r\n }\r\n}","import { StringObject } from \"../../Objects/StringObject\";\r\nimport { StringModule } from \"../../StringModule\";\r\n\r\nexport class StringVideoAutoplay extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = \"autoplay\";\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const videoElement = object.el as HTMLVideoElement;\r\n const videoSrc = this.attribute.process(videoElement, \"string-src\", \"\");\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (videoElement.tagName.toLowerCase() === \"video\" && videoSrc && started == false) {\r\n videoElement.setAttribute(\"muted\", \"muted\");\r\n videoElement.setAttribute(\"playsinline\", \"\");\r\n videoElement.setAttribute(\"loop\", \"\");\r\n videoElement.setAttribute(\"autoplay\", \"\");\r\n videoElement.src = videoSrc;\r\n videoElement.muted = true;\r\n videoElement.addEventListener(\"canplaythrough\", () => {\r\n const started = this.attribute.process(videoElement, \"string-started\", null) == null ? false : true;\r\n if (started == false) {\r\n this.tryPlay(object, videoElement); \r\n }\r\n }, { once: true });\r\n videoElement.load();\r\n } else {\r\n console.warn(\r\n \"StringVideoAutoplay: Element is not a <video> tag or string-src is missing.\",\r\n object.el\r\n );\r\n }\r\n }\r\n\r\n private tryPlay(object: StringObject, element: HTMLVideoElement) {\r\n element.play().catch((err) => {\r\n console.warn(\"Autoplay failed:\", err);\r\n object.started = false;\r\n }).then(() => {\r\n object.started = true;\r\n element.setAttribute(`string-started`, '')\r\n });\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringCursor extends StringModule {\r\n private lerpFactor: number = 0.2;\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\r\n constructor(visitor: any, settings: any = null) {\r\n super(visitor);\r\n this.htmlKey = 'cursor';\r\n this.cursor = document.querySelector('[string-cursor]') as HTMLElement;\r\n if (settings != null) {\r\n if (settings.lerp != null) {\r\n this.lerpFactor = settings.lerp;\r\n }\r\n }\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n if (this.virtualCursor.smoothX != this.oldX || this.virtualCursor.smoothY != this.oldY) {\r\n let cursorData = {\r\n lerpX: this.virtualCursor.lerpX,\r\n lerpY: this.virtualCursor.lerpY,\r\n x: this.virtualCursor.x,\r\n y: this.virtualCursor.y,\r\n };\r\n this.events.emit('cursor', cursorData);\r\n\r\n this.cursor.style.setProperty('--x', this.virtualCursor.smoothX);\r\n this.cursor.style.setProperty('--y', this.virtualCursor.smoothY);\r\n\r\n this.oldX = this.virtualCursor.smoothX;\r\n this.oldY = this.virtualCursor.smoothY;\r\n }\r\n\r\n this.objects.forEach((object) => {\r\n if (object.isMouseMove) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', this.virtualCursor.x - rect.left, rect.width);\r\n const offsetY = this.calculateOffset('center', this.virtualCursor.y - rect.top, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n } else {\r\n if (object.mouseX != 0 || object.mouseY != 0) {\r\n let rect = object.el.getBoundingClientRect();\r\n const offsetX = this.calculateOffset('center', object.halfWidth, rect.width);\r\n const offsetY = this.calculateOffset('center', object.halfHeight, rect.height);\r\n object.mouseX += this.lerp.process(object.mouseX, offsetX, object.lerp);\r\n object.mouseY += this.lerp.process(object.mouseY, offsetY, object.lerp);\r\n this.setMouseCoordinates(object, object.mouseX, object.mouseY);\r\n }\r\n }\r\n });\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n let element = object.el;\r\n\r\n let onMouseEnterEventBind = () => {\r\n element.addEventListener('mousemove', onMouseMoveEventBind);\r\n element.addEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = true;\r\n if (object.cursorTarget != null) {\r\n object.cursorTarget.classList.add('-show');\r\n }\r\n };\r\n let onMouseMoveEventBind = (event: MouseEvent) => {};\r\n let onMouseLeaveEventBind = () => {\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n object.isMouseMove = false;\r\n if (object.cursorTarget != null) {\r\n object.cursorTarget.classList.remove('-show');\r\n }\r\n };\r\n\r\n object.onEnter = () => {\r\n element.addEventListener('mouseenter', onMouseEnterEventBind);\r\n };\r\n object.onLeave = () => {\r\n element.removeEventListener('mouseenter', onMouseEnterEventBind);\r\n element.removeEventListener('mousemove', onMouseMoveEventBind);\r\n element.removeEventListener('mouseleave', onMouseLeaveEventBind);\r\n };\r\n }\r\n\r\n private setMouseCoordinates(object: StringObject, x: number, y: number) {\r\n if (object.selfDisable == false) {\r\n object.el.style.setProperty('--mouse-x', x.toFixed(2));\r\n object.el.style.setProperty('--mouse-y', y.toFixed(2));\r\n }\r\n object.connects.forEach((element) => {\r\n element.style.setProperty('--mouse-x', x.toFixed(2));\r\n element.style.setProperty('--mouse-y', y.toFixed(2));\r\n });\r\n }\r\n\r\n private calculateOffset(position: string, mousePos: number, size: number): number {\r\n switch (position) {\r\n case 'start':\r\n return mousePos / size;\r\n case 'end':\r\n return (mousePos - size) / size;\r\n case 'center':\r\n default:\r\n return (mousePos - size / 2) / (size / 2);\r\n }\r\n }\r\n}\r\n","import { StringModule } from \"../../StringModule\";\r\nimport { StringObject } from \"../../Objects/StringObject\";\r\nimport { StringData } from \"../../Utils/StringData\";\r\n\r\nexport class StringMagnetic extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = \"magnetic\";\r\n }\r\n\r\n onConnect(object: StringObject) {\r\n const element = object.el as HTMLElement;\r\n \r\n }\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.objects.forEach(object => {\r\n const element = object.el as HTMLElement;\r\n const rect = element.getBoundingClientRect();\r\n const elementCenterX = rect.left + object.halfWidth;\r\n const elementCenterY = rect.top + object.halfHeight;\r\n const distX = e.clientX - elementCenterX;\r\n const distY = e.clientY - elementCenterY;\r\n const distance = Math.sqrt(distX ** 2 + distY ** 2);\r\n \r\n if (distance < object.radius) {\r\n object.magneticTargetX = distX * object.strength * ((object.radius - distance) / object.radius);\r\n object.magneticTargetY = distY * object.strength * ((object.radius - distance) / object.radius);\r\n object.isMagneting = true\r\n } else {\r\n \r\n object.magneticTargetX = 0\r\n object.magneticTargetY = 0\r\n }\r\n });\r\n \r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.objects.forEach(object => {\r\n if (object.isMagneting) {\r\n let lerpX = this.lerp.process(object.magneticX, object.magneticTargetX, object.lerp)\r\n let lerpY = this.lerp.process(object.magneticY, object.magneticTargetY, object.lerp)\r\n if (lerpX > -0.01 && lerpX < 0.01) {\r\n lerpX = 0\r\n object.magneticX = object.magneticTargetX\r\n }\r\n if (lerpY > -0.01 && lerpY < 0.01) {\r\n lerpY = 0\r\n object.magneticY = object.magneticTargetY\r\n }\r\n object.magneticX += lerpX;\r\n object.magneticY += lerpY;\r\n object.el.style.setProperty('--magnetic-x', object.magneticX.toString())\r\n object.el.style.setProperty('--magnetic-y', object.magneticY.toString())\r\n if ((object.magneticTargetX == object.magneticX) || (object.magneticTargetY == object.magneticY)) {\r\n object.isMagneting = false\r\n }\r\n }\r\n });\r\n }\r\n \r\n}\r\n","export class StringLerp{\r\n process(start: number, end: number, amt: number) {\r\n return amt * (end - start);\r\n }\r\n}","import { IStringModule } from \"../IStringModule\"\r\nimport { StringModule } from \"../StringModule\";\r\nimport { StringLerp } from \"../Utils/StringLerp\";\r\n\r\nexport class StringVirtualCursor{\r\n private _lF = .1\r\n private lerp = new StringLerp()\r\n \r\n private _x: number = 0\r\n private _y: number = 0\r\n private _lerpX: number = 0\r\n private _lerpY: number = 0\r\n\r\n private targetX: number = 0\r\n private targetY: number = 0\r\n\r\n public get x(){\r\n return this.targetX\r\n }\r\n public get y(){\r\n return this.targetY\r\n }\r\n public get smoothX(){\r\n return this._x\r\n }\r\n public get smoothY(){\r\n return this._y\r\n }\r\n public get lerpX(){\r\n return this._lerpX\r\n }\r\n public get lerpY(){\r\n return this._lerpY\r\n }\r\n\r\n\r\n onMouseMove(e: MouseEvent): void {\r\n this.targetX = e.clientX;\r\n this.targetY = e.clientY;\r\n }\r\n onUpdate(): void {\r\n this._lerpX = this.lerp.process(this._x, this.targetX, this._lF)\r\n this._lerpY = this.lerp.process(this._y, this.targetY, this._lF)\r\n \r\n this._x = Math.floor(this._x + this._lerpX);\r\n this._y = Math.floor(this._y + this._lerpY);\r\n }\r\n\r\n\r\n}","import { IStringModule } from '../IStringModule';\r\n\r\nconst tS = 'top';\r\nconst bS = 'bottom';\r\nconst lS = 'left';\r\nconst rS = 'right';\r\n\r\nexport class StringObject {\r\n public el: HTMLElement;\r\n public id: string = '';\r\n public oStart: number = 0;\r\n public oEnd: number = 0;\r\n public size: number = 0;\r\n\r\n public startPos: number = 0;\r\n public endPos: number = 0;\r\n public differencePos: number = 0;\r\n public factor: number = 1;\r\n\r\n public sElPos: string = '';\r\n public sScrPos: string = '';\r\n public eElPos: string = '';\r\n public eScrPos: string = '';\r\n\r\n public halfWidth: number = 0;\r\n public halfHeight: number = 0;\r\n\r\n public start: number = 0;\r\n public end: number = 0;\r\n\r\n public mouseX: number = 0;\r\n public mouseY: number = 0;\r\n\r\n public magneticTargetX: number = 0;\r\n public magneticTargetY: number = 0;\r\n\r\n public magneticX: number = 0;\r\n public magneticY: number = 0;\r\n\r\n public lerp: number = 0;\r\n public strength: number = 0;\r\n public radius: number = 0;\r\n public parallaxPositionStart: number = 0;\r\n public parallaxPositionEnd: number = 0;\r\n\r\n public connects: Array<HTMLElement> = new Array<HTMLElement>();\r\n public cursorTarget: any = null;\r\n\r\n public key: string = '--progress';\r\n\r\n public showObserver: IntersectionObserver | null = null;\r\n public progressObserver: IntersectionObserver | null = null;\r\n public inviewObserver: IntersectionObserver | null = null;\r\n\r\n public repeat: boolean = false;\r\n public selfDisable: boolean = false;\r\n public active: boolean = false;\r\n public abs: boolean = false;\r\n public isMouseMove: boolean = false;\r\n public started: boolean = false;\r\n public isMagneting: boolean = false;\r\n\r\n public onEnter = () => {};\r\n public onLeave = () => {};\r\n\r\n private modules: Array<IStringModule> = new Array<IStringModule>();\r\n\r\n constructor(element: HTMLElement) {\r\n this.el = element;\r\n }\r\n\r\n enter() {\r\n this.active = true;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.addObject(this.id, this);\r\n });\r\n this.onEnter();\r\n }\r\n leave() {\r\n this.active = false;\r\n this.modules.forEach((module: IStringModule) => {\r\n module.removeObject(this.id);\r\n });\r\n this.onLeave();\r\n }\r\n show() {\r\n this.el.classList.add('-inview');\r\n }\r\n hide() {\r\n if (this.repeat) {\r\n this.el.classList.remove('-inview');\r\n }\r\n }\r\n\r\n connect(module: IStringModule) {\r\n this.modules.push(module);\r\n }\r\n\r\n public calculatePositions(windowSize: number) {\r\n if ((this.sElPos === tS && this.sScrPos === tS) || (this.sElPos === lS && this.sScrPos === lS)) {\r\n this.startPos = this.start - this.oEnd;\r\n } else if ((this.sElPos === tS && this.sScrPos === bS) || (this.sElPos === lS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === tS) || (this.sElPos === rS && this.sScrPos === lS)) {\r\n this.startPos = this.start + this.size - this.oEnd;\r\n } else if ((this.sElPos === bS && this.sScrPos === bS) || (this.sElPos === rS && this.sScrPos === rS)) {\r\n this.startPos = this.start - windowSize - this.oEnd;\r\n }\r\n\r\n if ((this.eElPos === tS && this.eScrPos === tS) || (this.eElPos === lS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.oStart;\r\n } else if ((this.eElPos === tS && this.eScrPos === bS) || (this.eElPos === lS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === tS) || (this.eElPos === rS && this.eScrPos === lS)) {\r\n this.endPos = this.start + this.size + this.oStart;\r\n } else if ((this.eElPos === bS && this.eScrPos === bS) || (this.eElPos === rS && this.eScrPos === rS)) {\r\n this.endPos = this.start - windowSize + this.size + this.oStart;\r\n }\r\n\r\n this.differencePos = this.endPos - this.startPos;\r\n }\r\n}\r\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarHorizontal {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startY: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psH;\r\n const visibleSize = this.data.wS;\r\n\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentHeight = this.data.psH;\r\n const visibleHeight = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentHeight) * visibleHeight + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startY = e.clientY;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n if (!this.isDragging) return;\r\n const deltaY = e.clientY - this.startY;\r\n const newScrollPosition = this.startScrollPosition + (deltaY / this.data.wS) * this.data.psH;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringData } from '../../../Utils/StringData';\r\n\r\nexport class StringScrollbarVertical {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private isDragging = false;\r\n private startCoordinate: number = 0;\r\n private startScrollPosition: number = 0;\r\n data: StringData;\r\n\r\n constructor(data: StringData, scrollbar: any, thumb: any) {\r\n this.data = data;\r\n this.scrollbar = scrollbar;\r\n this.thumb = thumb;\r\n }\r\n\r\n onResize(): void {\r\n const contentSize = this.data.psW;\r\n const visibleSize = this.data.wS;\r\n const thumbSize = (visibleSize / contentSize) * visibleSize;\r\n this.thumb.style.setProperty('--size', thumbSize + 'px');\r\n\r\n if (contentSize <= visibleSize) {\r\n this.scrollbar.classList.add('-hide');\r\n } else {\r\n this.scrollbar.classList.remove('-hide');\r\n }\r\n }\r\n\r\n updateThumb() {\r\n const contentWidth = this.data.psW;\r\n const visibleWidth = this.data.wS;\r\n this.thumb.style.setProperty('--position', `${(this.data.c / contentWidth) * visibleWidth + 'px'}`);\r\n }\r\n\r\n mouseDownEvent(e: MouseEvent) {\r\n this.startCoordinate = e.clientX;\r\n this.startScrollPosition = this.data.c;\r\n }\r\n\r\n mouseMoveEvent(e: MouseEvent) {\r\n const deltaX = e.clientX - this.startCoordinate;\r\n const newScrollPosition = this.startScrollPosition + (deltaX / this.data.wS) * this.data.psW;\r\n this.data.c = newScrollPosition;\r\n this.data.t = newScrollPosition;\r\n window.scrollTo(0, newScrollPosition);\r\n this.updateThumb();\r\n }\r\n}\r\n","import { StringModule } from '../../../StringModule';\r\nimport { StringData } from '../../../Utils/StringData';\r\nimport { StringScrollbarHorizontal } from './StringScrollbarHorizontal';\r\nimport { StringScrollbarVertical } from './StringScrollbarVertical';\r\n\r\nexport class StringScrollbar extends StringModule {\r\n private scrollbar: any;\r\n private thumb: any;\r\n private scrollTimeout: any;\r\n\r\n private isDragging = false;\r\n private startY: number = 0;\r\n private startScrollTop: number = 0;\r\n\r\n private mouseUpEventBind: any;\r\n private mouseDownEventBind: any;\r\n private mouseMoveEventBind: any;\r\n\r\n private scrollbarState: any;\r\n private scrollbarStateHorizontal: any;\r\n private scrollbarStateVertical: any;\r\n\r\n constructor(visitor: any) {\r\n super(visitor);\r\n\r\n this.mouseUpEventBind = this.mouseUpEvent.bind(this);\r\n this.mouseDownEventBind = this.mouseDownEvent.bind(this);\r\n this.mouseMoveEventBind = this.mouseMoveEvent.bind(this);\r\n }\r\n destructor(): void {\r\n document.removeEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.removeEventListener('mousedown', this.mouseDownEventBind);\r\n document.removeEventListener('mousemove', this.mouseMoveEventBind);\r\n }\r\n\r\n onStart(): void {\r\n this.createScrollbar();\r\n this.updateThumb();\r\n this.addCustomStyles();\r\n document.addEventListener('mouseup', this.mouseUpEventBind);\r\n this.thumb.addEventListener('mousedown', this.mouseDownEventBind);\r\n document.addEventListener('mousemove', this.mouseMoveEventBind);\r\n document.documentElement.classList.add(`-without-scrollbar`);\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.updateThumb();\r\n this.showScrollbar();\r\n this.hideScrollbar();\r\n }\r\n\r\n onResize(): void {\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n onChangeScrollDirection() {\r\n if (this.data.sD == 'horizontal') {\r\n this.scrollbarState = this.scrollbarStateVertical;\r\n } else {\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n this.scrollbarState.onResize();\r\n }\r\n\r\n private addCustomStyles() {\r\n const style = document.createElement('style');\r\n style.textContent = `\r\n ::-webkit-scrollbar {\r\n display: none;\r\n width: 0;\r\n height: 0;\r\n -webkit-appearance: none;\r\n }\r\n body {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n .-without-scrollbar::-webkit-scrollbar {\r\n display: none;\r\n }\r\n .-without-scrollbar {\r\n -ms-overflow-style: none; /* IE and Edge */\r\n scrollbar-width: none; /* Firefox */\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n\r\n private createScrollbar() {\r\n this.scrollbar = document.createElement('div');\r\n this.scrollbar.classList.add('scrollbar');\r\n this.thumb = document.createElement('div');\r\n this.thumb.classList.add('thumb');\r\n this.scrollbar.appendChild(this.thumb);\r\n document.body.appendChild(this.scrollbar);\r\n\r\n this.scrollbarStateHorizontal = new StringScrollbarHorizontal(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarStateVertical = new StringScrollbarVertical(this.data, this.scrollbar, this.thumb);\r\n this.scrollbarState = this.scrollbarStateHorizontal;\r\n }\r\n\r\n private updateThumb() {\r\n this.scrollbarState.updateThumb();\r\n }\r\n\r\n private mouseDownEvent(e: MouseEvent) {\r\n this.isDragging = true;\r\n this.scrollbarState.mouseDownEvent(e);\r\n document.body.style.userSelect = 'none';\r\n this.scrollbar.classList.add('-touch');\r\n }\r\n\r\n private mouseMoveEvent(e: MouseEvent) {\r\n if (!this.isDragging) return;\r\n this.scrollbarState.mouseMoveEvent(e);\r\n }\r\n\r\n private mouseUpEvent() {\r\n this.isDragging = false;\r\n document.body.style.userSelect = '';\r\n this.hideScrollbar();\r\n this.scrollbar.classList.remove('-touch');\r\n }\r\n\r\n private showScrollbar() {\r\n this.scrollbar.classList.add('-scroll');\r\n }\r\n\r\n private hideScrollbar() {\r\n if (this.scrollTimeout) {\r\n clearTimeout(this.scrollTimeout);\r\n }\r\n this.scrollTimeout = setTimeout(() => {\r\n this.scrollbar.classList.remove('-scroll');\r\n }, 1000);\r\n }\r\n}\r\n","import { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringDisplacement extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'displacement.';\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n document.documentElement.style.setProperty('--lerp', data.v.toString());\r\n }\r\n}\r\n","import { StringObject } from \"../../Objects/StringObject\";\r\nimport { StringModule } from \"../../StringModule\";\r\nimport { StringData } from \"../../Utils/StringData\";\r\n\r\nexport class StringParallax extends StringModule{\r\n private setupParallax = (object: StringObject, progress: number)=>{}\r\n constructor(visitor: any) {\r\n super(visitor)\r\n this.htmlKey = 'parallax'\r\n }\r\n onScroll(data: StringData): void {\r\n this.objects.forEach(object => {\r\n let progress = Math.min(1, Math.max(0, (this.data.c - object.startPos) / object.differencePos))\r\n object.el.style.setProperty(object.key, progress.toString())\r\n this.setupParallax(object, progress)\r\n });\r\n }\r\n onChangeScrollDirection(): void {\r\n if (this.data.sD == 'vertical') {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(0, ${(object.factor * this.data.wS * object.parallaxPositionStart)\r\n + (progress * object.factor * this.data.wS * object.parallaxPositionEnd)}px, 0)`\r\n object.el.style.transform = transformCompute\r\n object.connects.forEach(element => {\r\n element.style.transform = transformCompute\r\n });\r\n }\r\n } else {\r\n this.setupParallax = (object: StringObject, progress: number) => {\r\n let transformCompute = `translate3d(${(object.factor * this.data.wS * object.parallaxPositionStart)\r\n + (progress * object.factor * this.data.wS * object.parallaxPositionEnd)}px, 0, 0)`\r\n object.el.style.transform = transformCompute\r\n object.connects.forEach(element => {\r\n element.style.transform = transformCompute\r\n });\r\n }\r\n }\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\nimport { StringData } from '../../Utils/StringData';\r\n\r\nexport class StringProgress extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'progress';\r\n }\r\n onScroll(data: StringData): void {\r\n this.objects.forEach((object) => {\r\n this.setUpObject(object, this.data.c);\r\n });\r\n }\r\n onConnect(object: StringObject) {\r\n object.onEnter = () => {\r\n this.setUpObject(object, this.data.c);\r\n };\r\n }\r\n\r\n private setUpObject(object: StringObject, currentTop: number) {\r\n let progress = Math.min(1, Math.max(0, (currentTop - object.startPos) / object.differencePos));\r\n //TODO BUG\r\n this.events.emit(`progress_${object.id}`, progress);\r\n object.el.style.setProperty(object.key, progress.toString());\r\n object.connects.forEach((element) => {\r\n element.style.setProperty(object.key, progress.toString());\r\n });\r\n }\r\n}\r\n","import { StringData } from '../../Utils/StringData';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScroll {\r\n public data: StringData;\r\n public isProg: boolean = false;\r\n public isParallaxEnabled: boolean = false;\r\n public name: string = '';\r\n public settings: StringTypeSettings;\r\n public v = 0;\r\n protected vT: number = 0;\r\n protected d: any;\r\n\r\n public scrollContainer: any;\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n this.d = document;\r\n this.settings = settings;\r\n this.data = data;\r\n this.scrollContainer = window;\r\n }\r\n\r\n onCalcUpdate: any = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n onUpdate(): void {}\r\n onWheel(e: any): void {}\r\n onScroll(e: any): void {}\r\n\r\n protected _scrollDirection: 'vertical' | 'horizontal' = 'vertical';\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this._scrollDirection = scrollDirection;\r\n if (this._scrollDirection == 'vertical') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(0, this.data.c);\r\n };\r\n } else if (this._scrollDirection == 'horizontal') {\r\n this.onCalcUpdate = () => {\r\n this.scrollContainer.scrollTo(this.data.c, 0);\r\n };\r\n }\r\n }\r\n}\r\n","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDefault extends StringScroll {\r\n private animateC: number = 0\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 this.vT = this.d.documentElement.scrollTop - this.animateC\r\n this.animateC = this.d.documentElement.scrollTop\r\n this.v = this.vT\r\n }\r\n public onWheel(e: any) {\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 this.data.d = 0\r\n }\r\n}","\r\nimport { StringData } from \"../../Utils/StringData\";\r\nimport { StringScroll } from \"./StringScroll\";\r\nimport { StringTypeSettings } from \"./StringTypeSettings\";\r\n\r\nexport class StringScrollDisable extends StringScroll {\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data)\r\n this.name = \"disable\"\r\n }\r\n\r\n public onUpdate() {\r\n }\r\n\r\n public onWheel(e: any) {\r\n }\r\n\r\n public onScroll(e: any) {\r\n e.preventDefault()\r\n\r\n }\r\n}","import { StringData } from '../../Utils/StringData';\r\nimport { StringScroll } from './StringScroll';\r\nimport { StringTypeSettings } from './StringTypeSettings';\r\n\r\nexport class StringScrollSmooth extends StringScroll {\r\n public name: string = 'desktop';\r\n private isScroll: boolean = false;\r\n\r\n constructor(document: any, settings: StringTypeSettings, data: StringData) {\r\n super(document, settings, data);\r\n this.name = 'desktop';\r\n }\r\n\r\n public onUpdate() {\r\n this.data.v = (this.data.t - this.data.c) * this.settings.speed;\r\n if (this.data.v != 0) {\r\n this.isScroll = true;\r\n\r\n let newC;\r\n if (this.data.v > 0) {\r\n newC = Math.ceil(this.data.c + this.data.v);\r\n document.documentElement.classList.add('-scroll-forward');\r\n document.documentElement.classList.remove('-scroll-back');\r\n } else {\r\n newC = Math.floor(this.data.c + this.data.v);\r\n document.documentElement.classList.add('-scroll-back');\r\n document.documentElement.classList.remove('-scroll-forward');\r\n }\r\n\r\n if (this.data.c != newC) {\r\n this.data.c = newC;\r\n this.isProg = true;\r\n this.onCalcUpdate();\r\n } else {\r\n this.data.c = newC;\r\n }\r\n } else if (this.isScroll) {\r\n this.isScroll = false;\r\n this.data.v = 0;\r\n this.data.c = this.data.t;\r\n this.isProg = false;\r\n document.documentElement.classList.remove('-scroll-back');\r\n document.documentElement.classList.remove('-scroll-forward');\r\n document.documentElement.style.setProperty('--lerp', '0');\r\n }\r\n }\r\n public onWheel(e: any) {\r\n if (e.deltaY != 0) {\r\n e.preventDefault();\r\n this.data.d = e.deltaY;\r\n this.data.t += this.data.d;\r\n this.data.t = Math.min(Math.max(this.data.t, 0), this.data.bS);\r\n }\r\n }\r\n public onScroll(e: any) {\r\n e.preventDefault();\r\n if (this.isProg == false) {\r\n this.data.v = this.d.documentElement.scrollTop - this.data.c;\r\n this.data.c = this.d.documentElement.scrollTop;\r\n this.data.t = this.d.documentElement.scrollTop;\r\n this.data.d = 0;\r\n\r\n this.onCalcUpdate();\r\n // window.scrollTo(this.data.c, 0);\r\n // window.scrollTo(0, this.data.t)\r\n }\r\n }\r\n}\r\n","export class StringTypeSettings{\r\n private sC: number = 0.0\r\n private sA: number = 0.13\r\n private sD: number = 0.04\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 public get speedDecelerate() { \r\n return this.sD\r\n }\r\n\r\n public set speedAccelerate(speed: number) {\r\n this.sA = speed\r\n this.updateScrollParams()\r\n }\r\n public set speedDecelerate(speed: number) { \r\n this.sD = speed\r\n this.updateScrollParams()\r\n }\r\n \r\n private updateScrollParams() {\r\n this.sC = this.sA * (1 - this.sD)\r\n }\r\n}","import { StringObject } from '../../Objects/StringObject';\r\nimport { StringModule } from '../../StringModule';\r\n\r\ninterface ISplitOptions {\r\n line?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n word?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n char?: Array<{\r\n align: string;\r\n random?: { min: number; max: number };\r\n abs?: boolean;\r\n }>;\r\n charLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n charWord?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n wordLine?: Array<{ align: string; random?: { min: number; max: number }; abs?: boolean }>;\r\n}\r\n\r\nexport class StringSplit extends StringModule {\r\n constructor(visitor: any) {\r\n super(visitor);\r\n this.htmlKey = 'split';\r\n }\r\n\r\n onStart(): void {}\r\n onResize(): void {\r\n document.querySelectorAll(`[string=\"split\"].-splited`).forEach((element) => {\r\n const splitOptions = this.parseSplitOptions(element.getAttribute('string-split'));\r\n element.innerHTML = this.split(splitOptions, element).html;\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 element.innerHTML = this.split(splitOptions, element).html;\r\n }\r\n }\r\n\r\n private parseSplitOptions(attributeValue: string | null): ISplitOptions {\r\n const options: ISplitOptions = {\r\n line: [],\r\n word: [],\r\n char: [],\r\n charLine: [],\r\n charWord: [],\r\n wordLine: [],\r\n };\r\n\r\n if (attributeValue) {\r\n const parts = attributeValue.split('|');\r\n\r\n parts.forEach((part) => {\r\n const match = part.match(/^(\\w+-)?(\\w+)(\\[(.*?)\\])?$/);\r\n\r\n if (match) {\r\n const prefix = match[1] || '';\r\n const option = match[2];\r\n const params = match[4] ? match[4].split(',') : [];\r\n switch (prefix + option) {\r\n case 'char-line':\r\n (options.charLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char-word':\r\n (options.charWord as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word-line':\r\n (options.wordLine as any[]).push(this.parseParam(params));\r\n break;\r\n case 'line':\r\n (options.line as any[]).push(this.parseParam(params));\r\n break;\r\n case 'word':\r\n (options.word as any[]).push(this.parseParam(params));\r\n break;\r\n case 'char':\r\n (options.char as any[]).push(this.parseParam(params));\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private parseParam(params: string[]): { align: string; random?: { min: number; max: number }; abs?: boolean } {\r\n const result: { align: string; random?: { min: number; max: number }; abs?: boolean } = { align: 'start' };\r\n\r\n params.forEach((param) => {\r\n if (param === 'abs') {\r\n result.abs = true;\r\n } else if (param.startsWith('random')) {\r\n const match = param.match(/random\\((\\d+),(\\d+)\\)/);\r\n if (match) {\r\n result.random = { min: parseInt(match[1]), max: parseInt(match[2]) };\r\n result.align = 'random';\r\n } else {\r\n result.align = 'random';\r\n }\r\n } else if (['start', 'center', 'end'].includes(param)) {\r\n result.align = param;\r\n } else {\r\n result.align = 'start';\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public split(options: ISplitOptions, elementRoot: any): any {\r\n //let text = elementRoot.innerHTML;\r\n let text = elementRoot.getAttribute('string-split-original');\r\n if (text.length === 0) return '';\r\n\r\n text = this.decodeHtmlEntity(text);\r\n const element = document.createElement('span');\r\n const words = text.split(/\\s+/);\r\n let globalCharIndex = 0;\r\n let globalWordIndex = 0;\r\n const totalChars = text.replace(/\\s/g, '').length;\r\n\r\n const tempSpan = document.createElement('span');\r\n const compStyles = window.getComputedStyle(elementRoot);\r\n\r\n tempSpan.style.fontFamily = compStyles.fontFamily;\r\n tempSpan.style.fontSize = compStyles.fontSize;\r\n tempSpan.style.letterSpacing = compStyles.letterSpacing;\r\n tempSpan.style.lineHeight = compStyles.lineHeight;\r\n tempSpan.style.fontWeight = compStyles.fontWeight;\r\n tempSpan.classList.add('-s-char');\r\n document.body.appendChild(tempSpan);\r\n\r\n let virtualLines: any[] = [];\r\n let virtualLine: any[] = [];\r\n let currentLineWidth = 0;\r\n words.forEach((word: any, wordIndex: any) => {\r\n tempSpan.textContent = word;\r\n if (word.length > 0) {\r\n tempSpan.textContent += '\\u00a0';\r\n }\r\n\r\n const wordWidth = tempSpan.offsetWidth;\r\n\r\n const virtualWordSpan = {\r\n text: word,\r\n width: wordWidth,\r\n chars: new Array<any>(),\r\n };\r\n const chars = Array.from(word);\r\n chars.forEach((char, charIndex) => {\r\n const virtualCharSpan = {\r\n text: char,\r\n };\r\n\r\n virtualWordSpan.chars.push(virtualCharSpan);\r\n });\r\n if (currentLineWidth + wordWidth > elementRoot.offsetWidth) {\r\n virtualLines.push(virtualLine);\r\n virtualLine = [];\r\n currentLineWidth = 0;\r\n globalCharIndex += virtualLine.length;\r\n }\r\n virtualLine.push(virtualWordSpan);\r\n currentLineWidth += wordWidth;\r\n });\r\n\r\n virtualLines.push(virtualLine);\r\n\r\n let hasLineOptions = false;\r\n if (options.line != null) {\r\n if (options.line.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.wordLine != null) {\r\n if (options.wordLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n if (options.charLine != null) {\r\n if (options.charLine.length > 0) {\r\n hasLineOptions = true;\r\n }\r\n }\r\n\r\n let addedWordsCount = 0;\r\n if (hasLineOptions) {\r\n // for (let i = 0; i < virtualLines.length; i++) {\r\n // addedWordsCount += virtualLines[i].length;\r\n // }\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n this.appendVirtualLineToDOM(\r\n i,\r\n virtualLines.length,\r\n words.length,\r\n element,\r\n virtualLines[i],\r\n options,\r\n globalCharIndex,\r\n totalChars,\r\n addedWordsCount\r\n );\r\n addedWordsCount += virtualLines[i].length;\r\n }\r\n } else {\r\n for (let i = 0; i < virtualLines.length; i++) {\r\n virtualLines[i].forEach((virtualWordSpan: any, wordIndex: any) => {\r\n if (virtualWordSpan.chars.length > 0) {\r\n const wordSpan = document.createElement('span');\r\n wordSpan.classList.add('-s-word');\r\n 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 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: any\r\n private now: any\r\n private then: any\r\n private elapsed: any;\r\n private requestAnimationId: number = 0\r\n public onFrame = ()=>{}\r\n public start(fps: number) {\r\n if (this.isAnimationStarted) { return }\r\n this.fpsInterval = 1000 / fps;\r\n this.then = Date.now();\r\n this.animate();\r\n this.isAnimationStarted = true\r\n }\r\n public stop() {\r\n if (!this.isAnimationStarted) { return }\r\n cancelAnimationFrame(this.requestAnimationId)\r\n this.isAnimationStarted = false\r\n }\r\n private animate() {\r\n this.requestAnimationId = requestAnimationFrame(() => { this.animate() })\r\n this.now = Date.now();\r\n this.elapsed = this.now - this.then;\r\n if (this.elapsed > this.fpsInterval) {\r\n this.then = this.now - (this.elapsed % this.fpsInterval);\r\n this.onFrame()\r\n }\r\n }\r\n}","import { StringModule } from \"../StringModule\";\r\nimport { StringData } from \"../Utils/StringData\";\r\n\r\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\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 = '#C8C2CF';\r\n this.displayElement.style.border = '1px solid #101214';\r\n this.displayElement.style.color = 'green';\r\n this.displayElement.style.zIndex = '1000';\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: attr(fps);\r\n position: relative;\r\n bottom: 0;\r\n right: 0;\r\n color: #101214;\r\n padding: 2px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n this.intervalId = setInterval(() => {\r\n this.displayElement.setAttribute('fps', `${this.callCount}`);\r\n this.callCount = 0;\r\n }, 1000);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++\r\n }\r\n \r\n destructor() {\r\n clearInterval(this.intervalId);\r\n document.body.removeChild(this.displayElement);\r\n }\r\n \r\n}\r\n","import { StringModule } from \"../StringModule\";\r\nimport { StringData } from \"../Utils/StringData\";\r\n\r\n\r\nexport class StringPositionTracker extends StringModule{\r\n private callCount: number = 0;\r\n private intervalId: any;\r\n private displayElement: any;\r\n\r\n\r\n constructor(visitor: any) {\r\n super(visitor)\r\n this._type = 2\r\n }\r\n private createDisplayElement() {\r\n this.displayElement = document.createElement('div');\r\n this.displayElement.style.position = 'fixed';\r\n this.displayElement.style.bottom = '10px';\r\n this.displayElement.style.left = '10px';\r\n this.displayElement.style.backgroundColor = '#C8C2CF';\r\n this.displayElement.style.border = '1px solid #101214';\r\n this.displayElement.style.color = 'green';\r\n this.displayElement.style.zIndex = '1000';\r\n this.displayElement.setAttribute('data-position', '0');\r\n document.body.appendChild(this.displayElement);\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n [data-position]::after {\r\n content: attr(value);\r\n position: relative;\r\n bottom: 0;\r\n right: 0;\r\n color: #101214;\r\n padding: 2px 8px;\r\n font-family: Arial, sans-serif;\r\n font-size: 12px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n onStart() {\r\n this.createDisplayElement();\r\n }\r\n\r\n onScroll(data: StringData): void {\r\n this.displayElement.setAttribute('value', `${this.data.c}`);\r\n }\r\n\r\n onUpdate(data: StringData): void {\r\n this.callCount++\r\n }\r\n \r\n destructor() {\r\n document.body.removeChild(this.displayElement);\r\n }\r\n \r\n}\r\n","export class StringAttribute{\r\n process(e: any, n: string, d: any = null) {\r\n return e.getAttribute(n) == null ? d : e.getAttribute(n)\r\n }\r\n}","export class StringBoundingClientRect{\r\n process(e: any) {\r\n return e.getBoundingClientRect()\r\n }\r\n}","export class StringData {\r\n t: number = 0;\r\n c: number = 0;\r\n d: number = 0;\r\n v: number = 0;\r\n bS: number = 0;\r\n cF: number = 1;\r\n wS: number = 0;\r\n hnwS: number = 0;\r\n\r\n psW: number = 0;\r\n psH: number = 0;\r\n\r\n scsW: number = 1;\r\n scsH: number = 1;\r\n sD: 'vertical' | 'horizontal' = 'vertical';\r\n sC: any;\r\n}\r\n","export class StringEvent{\r\n\r\n private eventsByKey: Map<string, Array<Function>> = new Map<string, Array<Function>>()\r\n private events: Array<Function> = new Array<Function>()\r\n on(id: string, event: Function){\r\n if ( this.eventsByKey.has(id) == false) { \r\n this.eventsByKey.set(id, [])\r\n }\r\n this.eventsByKey.get(id)?.push(event)\r\n this.updateAllEvents()\r\n }\r\n public has(id: string) {\r\n return this.eventsByKey.has(id)\r\n }\r\n public emit(id: string, value: any) {\r\n if (this.eventsByKey.has(id)) {\r\n this.eventsByKey.get(id)?.forEach((event: any) => {\r\n event(value)\r\n });\r\n }\r\n }\r\n public off(id: string, event: Function) {\r\n let ea = this.eventsByKey.get(id)\r\n if (ea!=null) {\r\n this.eventsByKey.set(id, ea.filter((h: any) => h !== event))\r\n }\r\n this.updateAllEvents()\r\n }\r\n public all(value: any) {\r\n this.events.forEach(event => {\r\n event(value)\r\n });\r\n }\r\n private updateAllEvents() {\r\n Array.from(this.eventsByKey.values()).forEach(listOfEvents => {\r\n listOfEvents.forEach(event => {\r\n this.events.push(event)\r\n });\r\n });\r\n }\r\n}","export class StringParser{\r\n public parseSingle(v: string, element: any, wH: any, baseRem: number): number {\r\n let isNegative = v.startsWith('-');\r\n if (isNegative) {\r\n v = v.slice(1);\r\n }\r\n let pV;\r\n if (v === 'selfHeight') {\r\n pV = element.offsetHeight;\r\n } else if (v.endsWith('px')) {\r\n pV = parseFloat(v);\r\n } else if (v.endsWith('%')) {\r\n pV = parseFloat(v) * wH / 100;\r\n } else if (v.endsWith('rem')) {\r\n pV = parseFloat(v) * baseRem;\r\n }\r\n return isNegative ? -pV : pV;\r\n }\r\n}","function nullifyTransforms(el: any) {\r\n let { top, left, width, height } = el.getBoundingClientRect();\r\n let transformArr = parseTransform(el);\r\n if (transformArr.length == 6) {\r\n var t = transformArr;\r\n let det = t[0] * t[3] - t[1] * t[2];\r\n return {\r\n width: width / t[0],\r\n height: height / t[3],\r\n left: (left * t[3] - top * t[2] + t[2] * t[5] - t[4] * t[3]) / det,\r\n top: (-left * t[1] + top * t[0] + t[4] * t[1] - t[0] * t[5]) / det,\r\n };\r\n } else {\r\n return { top, left, width, height };\r\n }\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n}\r\n\r\nexport class StringPosition {\r\n process(e: any, container: any = document.body) {\r\n let br;\r\n try {\r\n br = container.getBoundingClientRect();\r\n } catch (error) {\r\n br = document.body.getBoundingClientRect();\r\n }\r\n let er = nullifyTransforms(e);\r\n let o = er.top - br.top;\r\n let oL = er.left - br.left;\r\n return { top: o, left: oL };\r\n }\r\n}\r\n","import { IStringModule } from './IStringModule';\r\nimport { StringLazy } from './Loading/Modules/StringLazy';\r\nimport { StringLoading } from './Loading/Modules/StringLoading';\r\nimport { StringVideoAutoplay } from './Loading/Modules/StringVideoAutoplay';\r\nimport { StringCursor } from './Mouse/Modules/StringCursor';\r\nimport { StringMagnetic } from './Mouse/Modules/StringMagnetic';\r\nimport { StringVirtualCursor } from './Mouse/StringVirtualCursor';\r\nimport { StringObject } from './Objects/StringObject';\r\nimport { StringScrollbar } from './Scroll/Modules/Scrollbar/StringScrollbar';\r\nimport { StringDisplacement } from './Scroll/Modules/StringDisplacement';\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 { StringFPSTracker } from './Tracker/StringFPSTracker';\r\nimport { StringPositionTracker } from './Tracker/StringPositionTracker';\r\nimport { StringAttribute } from './Utils/StringAttribute';\r\nimport { StringBoundingClientRect } from './Utils/StringBoundingClientRect';\r\nimport { StringData } from './Utils/StringData';\r\nimport { StringEvent } from './Utils/StringEvent';\r\nimport { StringLerp } from './Utils/StringLerp';\r\nimport { StringParser } from './Utils/StringParser';\r\nimport { StringPosition } from './Utils/StringPosition';\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: StringLerp = new StringLerp();\r\n private _attribute: StringAttribute = new StringAttribute();\r\n private _boundingClientRect: StringBoundingClientRect = new StringBoundingClientRect();\r\n private _position: StringPosition = new StringPosition();\r\n\r\n private sEn: StringScroll;\r\n private sEnSmooth: StringScrollSmooth;\r\n private sEnDefault: StringScrollDefault;\r\n private sEnDisable: StringScrollDisable;\r\n\r\n private settings: StringTypeSettings;\r\n private data: StringData;\r\n\r\n protected objects: Map<string, StringObject> = new Map<string, StringObject>();\r\n\r\n protected connectQueue: Array<any> = new Array<any>();\r\n\r\n private globalId: number = 1;\r\n\r\n private _parser = new StringParser();\r\n\r\n get scrollDirection() {\r\n return this.data.sD;\r\n }\r\n\r\n set scrollDirection(scrollDirection: 'vertical' | 'horizontal') {\r\n this.data.sD = scrollDirection;\r\n\r\n this.sEn.scrollDirection = scrollDirection;\r\n this.sEnSmooth.scrollDirection = scrollDirection;\r\n this.sEnDefault.scrollDirection = scrollDirection;\r\n this.sEnDisable.scrollDirection = scrollDirection;\r\n\r\n if (scrollDirection == 'horizontal') {\r\n document.documentElement.classList.add('-horizontal');\r\n document.documentElement.classList.remove('-vertical');\r\n } else {\r\n document.documentElement.classList.add('-vertical');\r\n document.documentElement.classList.remove('-horizontal');\r\n }\r\n\r\n this.rebuild();\r\n this.initObjects();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onChangeScrollDirection();\r\n });\r\n }\r\n get speedAccelerate() {\r\n return this.settings.speedAccelerate;\r\n }\r\n set speedAccelerate(speed: number) {\r\n this.settings.speedAccelerate = speed;\r\n }\r\n get speedDecelerate() {\r\n return this.settings.speedDecelerate;\r\n }\r\n set speedDecelerate(speed: number) {\r\n this.settings.speedDecelerate = speed;\r\n }\r\n\r\n get scrollPosition() {\r\n return this.data.c;\r\n }\r\n set scrollPosition(scrollPosition: number) {\r\n this.data.c = scrollPosition;\r\n this.data.t = scrollPosition;\r\n window.scrollTo(0, this.data.c);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\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 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 this.settings.speedAccelerate = 0.13;\r\n this.settings.speedDecelerate = 0.04;\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 this.sEn = this.sEnSmooth;\r\n this.scrollContainer = window;\r\n this.data.sC = this.window;\r\n\r\n this.data.sD = 'vertical';\r\n document.documentElement.classList.add('-vertical');\r\n\r\n this.onWheelBind = this.onWheelEvent.bind(this);\r\n this.onScrollBind = this.onScrollEvent.bind(this);\r\n this.onResizeBind = this.onResizeEvent.bind(this);\r\n this.onMouseMoveBind = this.onMouseMoveEvent.bind(this);\r\n this.loop.onFrame = () => {\r\n this.onUpdateEvent();\r\n };\r\n this.rebuild();\r\n }\r\n\r\n public static getInstance(): StringTune {\r\n if (!StringTune.i) {\r\n StringTune.i = new StringTune();\r\n }\r\n return StringTune.i;\r\n }\r\n\r\n public use(objectClass: typeof StringModule, settings: any = null) {\r\n const module = new objectClass(\r\n {\r\n data: this.data,\r\n lerp: this._lerp,\r\n attribute: this._attribute,\r\n boundingClientRect: this._boundingClientRect,\r\n position: this._position,\r\n virtualCursor: this._virtualCursor,\r\n events: this.events,\r\n },\r\n settings\r\n );\r\n\r\n if (module.type == 1) {\r\n this.modules.push(module);\r\n }\r\n if (module.type == 2) {\r\n this.modulesUI.push(module);\r\n }\r\n }\r\n public start(fps: number) {\r\n this.data.sC.addEventListener('scroll', this.onScrollBind);\r\n this.data.sC.addEventListener('resize', this.onResizeBind);\r\n\r\n this.root.addEventListener('wheel', this.onWheelBind, { passive: false });\r\n this.root.addEventListener('mousemove', this.onMouseMoveBind);\r\n\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n Array.from(this.objects.values()).forEach((object) => {\r\n this.setupObject(object.el, object);\r\n });\r\n });\r\n resizeObserver.observe(document.body);\r\n\r\n this.loop.start(fps);\r\n document.documentElement.classList.add('-string');\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onStart();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onStart();\r\n });\r\n\r\n this.initObjects();\r\n this.initMutationObserver();\r\n }\r\n\r\n private initObjects() {\r\n document.querySelectorAll('[string]').forEach((element) => {\r\n this.addObject(element as any);\r\n });\r\n document.querySelectorAll('[string-copy-from]').forEach((element) => {\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null && this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n }\r\n });\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onResize();\r\n module.onScroll(this.data);\r\n module.onUpdate(this.data);\r\n });\r\n }\r\n\r\n public destroy() {\r\n this.window.removeEventListener('scroll', this.onScrollBind);\r\n this.root.removeEventListener('wheel', this.onScrollBind);\r\n this.window.removeEventListener('resize', this.onResizeBind);\r\n this.root.removeEventListener('mousemove', this.onMouseMoveBind);\r\n this.loop.stop();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.destructor();\r\n });\r\n }\r\n\r\n public on(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id: string = '') {\r\n switch (key) {\r\n case 'scroll':\r\n this.events.on(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.on(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.on(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.on(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.on(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.on(`cursor`, event);\r\n break;\r\n }\r\n }\r\n public off(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id: string = '') {\r\n switch (key) {\r\n case 'scroll':\r\n this.events.off(`scroll`, event);\r\n break;\r\n case 'progress':\r\n this.events.off(`progress_${id}`, event);\r\n break;\r\n case 'lerp':\r\n this.events.off(`lerp`, event);\r\n break;\r\n case 'intersection':\r\n this.events.off(`intersection_${id}`, event);\r\n break;\r\n case 'inview':\r\n this.events.off(`inview_${id}`, event);\r\n break;\r\n case 'cursor':\r\n this.events.off(`cursor`, event);\r\n break;\r\n }\r\n }\r\n\r\n protected setupObject(el: HTMLElement, object: StringObject) {\r\n object.showObserver?.disconnect();\r\n object.progressObserver?.disconnect();\r\n object.inviewObserver?.disconnect();\r\n\r\n let r = this._boundingClientRect.process(el);\r\n let rW = r.width / this.data.scsW;\r\n let rH = r.height / this.data.scsH;\r\n\r\n let startElementPosition = this._attribute.process(el, `string-enter-el`) || 'top';\r\n let startSourcePosition = this._attribute.process(el, `string-enter-vp`) || 'bottom';\r\n let endElementPosition = this._attribute.process(el, `string-exit-el`) || 'bottom';\r\n let endSourcePosition = this._attribute.process(el, `string-exit-vp`) || 'top';\r\n\r\n object.selfDisable = this._attribute.process(el, `string-self-disable`) == null ? false : true;\r\n object.abs = this._attribute.process(el, `string-abs`) == null ? false : true;\r\n\r\n let targetQuery = this._attribute.process(el, `string-cursor-target`);\r\n\r\n if (targetQuery != null) {\r\n object.cursorTarget = document.querySelector(`[string-cursor-content=\"${targetQuery}\"]`);\r\n }\r\n\r\n object.id = this._attribute.process(el, `string-id`, `string-${this.globalId}`);\r\n object.key = this._attribute.process(el, `string-key`, `--progress`);\r\n\r\n object.strength = this._attribute.process(el, 'string-strength', 0.3);\r\n object.radius = this._attribute.process(el, 'string-radius', 150);\r\n object.lerp = this._attribute.process(el, 'string-lerp', 0.2);\r\n\r\n let parallaxPosition = this._attribute.process(el, 'string-parallax-bias', 0.0);\r\n object.parallaxPositionStart = -0.5 + 0.5 * parallaxPosition;\r\n object.parallaxPositionEnd = 0.5 + 0.5 * (1 - parallaxPosition);\r\n\r\n el.setAttribute(`string-id`, object.id);\r\n if (this.data.sD == 'vertical') {\r\n object.size = rH;\r\n } else {\r\n object.size = rW;\r\n }\r\n\r\n object.oStart = this._parser.parseSingle(this._attribute.process(el, `string-offset-start`, '0%'), el, this.data.wS, 16) * -1;\r\n object.oEnd = this._parser.parseSingle(this._attribute.process(el, `string-offset-end`, '0%'), el, this.data.wS, 16) * -1;\r\n\r\n let observerStart = this._parser.parseSingle(this._attribute.process(el, `string-offset-start`, '0%'), el, this.data.wS, 16) * -1;\r\n let observerEnd = this._parser.parseSingle(this._attribute.process(el, `string-offset-end`, '0%'), el, this.data.wS, 16) * -1;\r\n\r\n object.factor = this._attribute.process(el, `string-parallax`, 0);\r\n\r\n object.oStart += object.factor * this.data.wS * 0.5;\r\n object.oEnd += object.factor * this.data.wS * 0.5;\r\n\r\n object.repeat = this._attribute.process(el, `string-repeat`) == null ? false : true;\r\n object.sElPos = startElementPosition;\r\n object.sScrPos = startSourcePosition;\r\n object.eElPos = endElementPosition;\r\n object.eScrPos = endSourcePosition;\r\n\r\n object.halfWidth = rW / 2;\r\n object.halfHeight = rH / 2;\r\n\r\n let windowSize = this.data.wS;\r\n if (this.data.sD == 'vertical') {\r\n let startPos = this._position.process(el, this.data.sC).top / this.data.scsH;\r\n object.start = startPos;\r\n object.end = startPos + rH;\r\n } else {\r\n let startPos = this._position.process(el, this.data.sC).left / this.data.scsW;\r\n object.start = startPos;\r\n object.end = startPos + rW;\r\n }\r\n object.calculatePositions(windowSize);\r\n\r\n let connectItems = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id == object.id;\r\n });\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return connectQueueItem.id != object.id;\r\n });\r\n\r\n connectItems.forEach((connectItem) => {\r\n object.connects.push(connectItem.element);\r\n });\r\n\r\n let callbackProgress = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n if (object.active == false) {\r\n this.events.emit(`activate_object_${object.id}`, true);\r\n object.enter();\r\n }\r\n } else {\r\n if (object.active == true) {\r\n this.events.emit(`activate_object_${object.id}`, false);\r\n object.leave();\r\n }\r\n }\r\n });\r\n };\r\n let callbackShow = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`intersection_${object.id}`, true);\r\n object.show();\r\n } else {\r\n this.events.emit(`intersection_${object.id}`, false);\r\n object.hide();\r\n }\r\n });\r\n };\r\n let callbackInview = (es: any) => {\r\n es.forEach((e: any) => {\r\n if (e.isIntersecting) {\r\n this.events.emit(`inview_${object.id}`, true);\r\n } else {\r\n this.events.emit(`inview_${object.id}`, false);\r\n }\r\n });\r\n };\r\n\r\n let optionsProgress: any;\r\n let optionsShow: any;\r\n if (this.data.sD == 'vertical') {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `${observerStart + this.data.wS}px 0px ${observerEnd + this.data.wS}px 0px`,\r\n threshold: 0.001,\r\n };\r\n optionsShow = {\r\n root: null,\r\n rootMargin: `${observerStart}px 0px ${observerEnd}px 0px`,\r\n threshold: 0.001,\r\n };\r\n } else {\r\n optionsProgress = {\r\n root: null,\r\n rootMargin: `0px ${observerStart + this.data.wS}px 0px ${observerEnd + this.data.wS}px`,\r\n threshold: 0.001,\r\n };\r\n optionsShow = {\r\n root: null,\r\n rootMargin: `0px ${observerStart}px 0px ${observerEnd}px`,\r\n threshold: 0.001,\r\n };\r\n }\r\n\r\n let optionsInview = {\r\n root: null,\r\n rootMargin: `0px 0px 0px 0px`,\r\n threshold: 0.001,\r\n };\r\n let obProgress = new IntersectionObserver(callbackProgress, optionsProgress);\r\n let obShow = new IntersectionObserver(callbackShow, optionsShow);\r\n let obInview = new IntersectionObserver(callbackInview, optionsInview);\r\n obProgress.observe(el);\r\n obShow.observe(el);\r\n obInview.observe(el);\r\n\r\n object.showObserver = obShow;\r\n object.progressObserver = obProgress;\r\n object.inviewObserver = obInview;\r\n }\r\n\r\n addObject(el: HTMLElement) {\r\n let isInit = this._attribute.process(el, 'string-inited');\r\n let object: any;\r\n if (isInit == null) {\r\n object = new StringObject(el);\r\n } else {\r\n object = this.objects.get(this._attribute.process(el, 'string-id'));\r\n }\r\n el.setAttribute(`string-inited`, '');\r\n this.setupObject(el, object);\r\n this.modules.forEach((module: IStringModule) => {\r\n if (module.tryConnect(object)) {\r\n module.connect(object);\r\n }\r\n });\r\n this.objects.set(object.id, object);\r\n this.globalId++;\r\n }\r\n\r\n public removeObject(id: string) {\r\n let removedObject = this.objects.get(id);\r\n if (removedObject?.showObserver != null) {\r\n removedObject?.showObserver.disconnect();\r\n }\r\n if (removedObject?.progressObserver != null) {\r\n removedObject?.progressObserver.disconnect();\r\n }\r\n if (removedObject?.inviewObserver != null) {\r\n removedObject?.inviewObserver.disconnect();\r\n }\r\n this.objects.delete(id);\r\n removedObject?.el.removeAttribute(`string-inited`);\r\n removedObject?.leave();\r\n removedObject = undefined;\r\n }\r\n\r\n private onMouseMoveEvent(e: MouseEvent) {\r\n this._virtualCursor.onMouseMove(e);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onMouseMove(e);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onMouseMove(e);\r\n });\r\n }\r\n private onWheelEvent(e: WheelEvent) {\r\n this.sEn.onWheel(e);\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onWheel(e);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onWheel(e);\r\n });\r\n }\r\n private onScrollEvent(e: Event) {\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onScroll(this.data);\r\n });\r\n this.events.emit(`lerp`, this.data.v);\r\n this.events.emit(`scroll`, this.data.c);\r\n }\r\n private onUpdateEvent() {\r\n this._virtualCursor.onUpdate();\r\n this.sEn.onUpdate();\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onUpdate(this.data);\r\n });\r\n this.modulesUI.forEach((module: IStringModule) => {\r\n module.onUpdate(this.data);\r\n });\r\n }\r\n private onResizeEvent() {\r\n try {\r\n let rect = this.sEn.scrollContainer.getBoundingClientRect();\r\n this.wW = rect.width;\r\n this.wH = rect.height;\r\n } catch (error) {\r\n this.wW = this.sEn.scrollContainer.innerWidth;\r\n this.wH = this.sEn.scrollContainer.innerHeight;\r\n }\r\n if (\r\n (this.data.sD == 'vertical' && this.wW != this.data.wS) ||\r\n this.window.innerWidth > 1024 ||\r\n (this.data.sD == 'horizontal' && this.wW != this.data.wS) ||\r\n this.window.innerWidth > 1024\r\n ) {\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 }\r\n private initMutationObserver() {\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.type === 'childList') {\r\n if (mutation.addedNodes.length > 0) {\r\n mutation.addedNodes.forEach((addedNode) => {\r\n if (addedNode.nodeType === Node.ELEMENT_NODE) {\r\n (addedNode as Element).querySelectorAll('[string]:not([string-inited])').forEach((element) => {\r\n this.addObject(element as any);\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n if (this.objects.has(connectTargetId)) {\r\n let connectTargetObject = this.objects.get(connectTargetId);\r\n if (connectTargetObject != null) {\r\n connectTargetObject.connects.push(element as any);\r\n }\r\n } else {\r\n this.connectQueue.push({\r\n id: connectTargetId,\r\n element,\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (mutation.removedNodes.length > 0) {\r\n mutation.removedNodes.forEach((removedNode) => {\r\n if (removedNode.nodeType === Node.ELEMENT_NODE) {\r\n (removedNode as Element).querySelectorAll('[string]').forEach((element) => {\r\n let removeId = element.getAttribute('string-id');\r\n let connectTargetId = this._attribute.process(element, 'string-copy-from');\r\n if (connectTargetId != null) {\r\n this.connectQueue = this.connectQueue.filter((connectQueueItem: any) => {\r\n return 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 });\r\n }\r\n if (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0) {\r\n this.modules.forEach((module: IStringModule) => {\r\n module.onRebuild();\r\n });\r\n }\r\n }\r\n });\r\n });\r\n const config = {\r\n attributes: false,\r\n childList: true,\r\n subtree: true,\r\n };\r\n observer.observe(document.body, config);\r\n }\r\n private rebuild() {\r\n function parseTransform(el: any) {\r\n let transform = window.getComputedStyle(el).transform;\r\n return transform\r\n .split(/\\(|,|\\)/)\r\n .slice(1, -1)\r\n .map(function (v) {\r\n return parseFloat(v);\r\n });\r\n }\r\n\r\n try {\r\n let transformContainer: any = parseTransform(this.data.sC);\r\n this.data.scsW = transformContainer[0];\r\n this.data.scsH = transformContainer[3];\r\n } catch (error) {\r\n this.data.scsW = 1;\r\n this.data.scsH = 1;\r\n }\r\n\r\n try {\r\n let rect = this.data.sC.getBoundingClientRect();\r\n this.wW = rect.width / this.data.scsW;\r\n this.wH = rect.height / this.data.scsH;\r\n } catch (error) {\r\n this.wW = this.data.sC.innerWidth;\r\n this.wH = this.data.sC.innerHeight;\r\n }\r\n\r\n let b = document.body,\r\n h = document.documentElement;\r\n\r\n this.data.psW = this.data.sC.scrollWidth;\r\n this.data.psH = this.data.sC.scrollHeight;\r\n if (this.data.psW == undefined) {\r\n this.data.psW = Math.max(b.scrollWidth, b.offsetWidth, h.clientWidth, h.scrollWidth, h.offsetWidth);\r\n }\r\n if (this.data.psH == undefined) {\r\n this.data.psH = Math.max(b.scrollHeight, b.offsetHeight, h.clientHeight, h.scrollHeight, h.offsetHeight);\r\n }\r\n\r\n if (this.data.sD == 'vertical') {\r\n this.data.bS = this.data.psH - this.wH;\r\n this.data.wS = this.wH;\r\n } else {\r\n this.data.bS = this.data.psW - this.wW;\r\n this.data.wS = this.wW;\r\n }\r\n\r\n this.data.hnwS = this.data.wS * -0.5;\r\n }\r\n}\r\n\r\n\r\n \r\nexport {\r\n StringTune as default,\r\n StringCursor, StringDisplacement, StringFPSTracker, StringLazy,\r\n StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, StringScrollbar, StringSplit, StringTune as StringTune, StringVideoAutoplay\r\n};\r\n\r\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","StringModule","type","_type","constructor","visitor","settings","objectsMap","Map","objects","Array","htmlKey","data","lerp","attribute","boundingClientRect","position","virtualCursor","events","destructor","tryConnect","object","stringModuleKeys","process","el","split","forEach","connect","onConnect","addObject","id","set","from","map","name","removeObject","delete","onStart","onUpdate","onResize","onRebuild","onScroll","onMouseMove","e","onWheel","onChangeDevice","onChangeScrollDirection","onMutationObserver","added","removed","StringLazy","super","document","querySelectorAll","element","getImageSize","getAttribute","classList","add","src","addEventListener","url","Promise","resolve","reject","xhr","XMLHttpRequest","open","responseType","onload","status","buffer","response","blob","Blob","img","Image","style","aspectRatio","width","height","URL","revokeObjectURL","onerror","Error","createObjectURL","setRequestHeader","send","StringLoading","loadingTimeout","timeout","setTimeout","documentElement","StringVideoAutoplay","videoElement","videoSrc","started","tagName","toLowerCase","setAttribute","muted","tryPlay","once","load","console","warn","play","catch","err","then","StringCursor","lerpFactor","oldX","oldY","enterObjectsMap","enterObjects","cursor","querySelector","smoothX","smoothY","cursorData","lerpX","lerpY","x","y","emit","setProperty","isMouseMove","rect","getBoundingClientRect","offsetX","calculateOffset","left","offsetY","top","mouseX","mouseY","setMouseCoordinates","halfWidth","halfHeight","onMouseEnterEventBind","onMouseMoveEventBind","onMouseLeaveEventBind","cursorTarget","event","removeEventListener","remove","onEnter","onLeave","selfDisable","toFixed","connects","mousePos","size","StringMagnetic","elementCenterX","elementCenterY","distX","clientX","distY","clientY","distance","Math","sqrt","radius","magneticTargetX","strength","magneticTargetY","isMagneting","magneticX","magneticY","toString","StringLerp","start","end","amt","StringVirtualCursor","_lF","_x","_y","_lerpX","_lerpY","targetX","targetY","floor","tS","bS","lS","rS","StringObject","oStart","oEnd","startPos","endPos","differencePos","factor","sElPos","sScrPos","eElPos","eScrPos","parallaxPositionStart","parallaxPositionEnd","showObserver","progressObserver","inviewObserver","repeat","active","abs","modules","enter","leave","show","hide","push","calculatePositions","windowSize","StringScrollbarHorizontal","scrollbar","thumb","isDragging","startY","startScrollPosition","contentSize","psH","visibleSize","wS","thumbSize","updateThumb","contentHeight","visibleHeight","c","mouseDownEvent","mouseMoveEvent","deltaY","newScrollPosition","t","window","scrollTo","StringScrollbarVertical","startCoordinate","psW","contentWidth","visibleWidth","deltaX","StringScrollbar","startScrollTop","mouseUpEventBind","mouseUpEvent","bind","mouseDownEventBind","mouseMoveEventBind","createScrollbar","addCustomStyles","showScrollbar","hideScrollbar","scrollbarState","sD","scrollbarStateVertical","scrollbarStateHorizontal","createElement","textContent","head","appendChild","body","userSelect","scrollTimeout","clearTimeout","StringDisplacement","v","StringParallax","setupParallax","progress","min","max","transformCompute","transform","StringProgress","setUpObject","currentTop","StringScroll","isProg","isParallaxEnabled","vT","onCalcUpdate","scrollContainer","_scrollDirection","d","scrollDirection","StringScrollDefault","animateC","scrollTop","StringScrollDisable","preventDefault","StringScrollSmooth","isScroll","speed","newC","ceil","StringTypeSettings","sC","sA","speedAccelerate","speedDecelerate","updateScrollParams","StringSplit","splitOptions","parseSplitOptions","innerHTML","html","contains","attributeValue","options","line","word","char","charLine","charWord","wordLine","part","match","prefix","option","params","parseParam","result","align","param","startsWith","random","parseInt","includes","elementRoot","text","length","decodeHtmlEntity","words","globalCharIndex","globalWordIndex","totalChars","replace","tempSpan","compStyles","getComputedStyle","fontFamily","fontSize","letterSpacing","lineHeight","fontWeight","virtualLines","virtualLine","currentLineWidth","wordIndex","wordWidth","offsetWidth","virtualWordSpan","chars","charIndex","virtualCharSpan","hasLineOptions","addedWordsCount","i","appendVirtualLineToDOM","wordSpan","charSpan","applyOptions","removeChild","lineIndex","totalWords","lineSpan","lineCharIndex","totalLineChars","span","optionArray","globalIndex","localIndex","parentLength","optionIndex","index","calculateIndex","variableName","generateVariableName","String","createSpaceSpan","spaceSpan","str","undefined","StringFPS","isAnimationStarted","requestAnimationId","onFrame","fps","fpsInterval","Date","now","animate","stop","cancelAnimationFrame","requestAnimationFrame","elapsed","StringFPSTracker","callCount","createDisplayElement","displayElement","bottom","right","backgroundColor","border","color","zIndex","intervalId","setInterval","clearInterval","StringPositionTracker","StringAttribute","n","StringBoundingClientRect","StringData","cF","hnwS","scsW","scsH","StringEvent","eventsByKey","on","has","updateAllEvents","off","ea","filter","h","all","values","listOfEvents","StringParser","parseSingle","wH","baseRem","pV","isNegative","slice","offsetHeight","endsWith","parseFloat","StringPosition","container","br","error","er","transformArr","parseTransform","det","nullifyTransforms","StringTune","sEn","sEnSmooth","sEnDefault","sEnDisable","rebuild","initObjects","scrollPosition","isUpdateEvents","onScrollBind","onResizeBind","modulesUI","loop","wW","_virtualCursor","_lerp","_attribute","_boundingClientRect","_position","connectQueue","globalId","_parser","onWheelBind","onWheelEvent","onScrollEvent","onResizeEvent","onMouseMoveBind","onMouseMoveEvent","onUpdateEvent","getInstance","use","objectClass","passive","ResizeObserver","entries","setupObject","observe","initMutationObserver","connectTargetId","connectTargetObject","destroy","disconnect","r","rW","rH","startElementPosition","startSourcePosition","endElementPosition","endSourcePosition","targetQuery","parallaxPosition","observerStart","observerEnd","optionsProgress","optionsShow","connectItems","connectQueueItem","connectItem","rootMargin","threshold","obProgress","IntersectionObserver","es","isIntersecting","obShow","obInview","isInit","removedObject","removeAttribute","innerWidth","innerHeight","MutationObserver","mutations","mutation","addedNodes","addedNode","nodeType","Node","ELEMENT_NODE","removedNodes","removedNode","removeId","attributes","childList","subtree","transformContainer","b","scrollWidth","scrollHeight","clientWidth","clientHeight"],"sourceRoot":""}
|
package/dist/index.d.ts
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
import { StringLazy } from './Loading/Modules/StringLazy';
|
2
|
+
import { StringLoading } from './Loading/Modules/StringLoading';
|
3
|
+
import { StringVideoAutoplay } from './Loading/Modules/StringVideoAutoplay';
|
4
|
+
import { StringCursor } from './Mouse/Modules/StringCursor';
|
5
|
+
import { StringMagnetic } from './Mouse/Modules/StringMagnetic';
|
6
|
+
import { StringObject } from './Objects/StringObject';
|
7
|
+
import { StringScrollbar } from './Scroll/Modules/Scrollbar/StringScrollbar';
|
8
|
+
import { StringDisplacement } from './Scroll/Modules/StringDisplacement';
|
9
|
+
import { StringParallax } from './Scroll/Modules/StringParallax';
|
10
|
+
import { StringProgress } from './Scroll/Modules/StringProgress';
|
11
|
+
import { StringSplit } from './Split/Modules/StringSplit';
|
12
|
+
import { StringModule } from './StringModule';
|
13
|
+
import { StringFPSTracker } from './Tracker/StringFPSTracker';
|
14
|
+
import { StringPositionTracker } from './Tracker/StringPositionTracker';
|
15
|
+
declare class StringTune {
|
16
|
+
private static i;
|
17
|
+
private modules;
|
18
|
+
private modulesUI;
|
19
|
+
private events;
|
20
|
+
private loop;
|
21
|
+
private onWheelBind;
|
22
|
+
private onScrollBind;
|
23
|
+
private onResizeBind;
|
24
|
+
private onMouseMoveBind;
|
25
|
+
private wW;
|
26
|
+
private wH;
|
27
|
+
private root;
|
28
|
+
private window;
|
29
|
+
private _virtualCursor;
|
30
|
+
private _lerp;
|
31
|
+
private _attribute;
|
32
|
+
private _boundingClientRect;
|
33
|
+
private _position;
|
34
|
+
private sEn;
|
35
|
+
private sEnSmooth;
|
36
|
+
private sEnDefault;
|
37
|
+
private sEnDisable;
|
38
|
+
private settings;
|
39
|
+
private data;
|
40
|
+
protected objects: Map<string, StringObject>;
|
41
|
+
protected connectQueue: Array<any>;
|
42
|
+
private globalId;
|
43
|
+
private _parser;
|
44
|
+
get scrollDirection(): 'vertical' | 'horizontal';
|
45
|
+
set scrollDirection(scrollDirection: 'vertical' | 'horizontal');
|
46
|
+
get speedAccelerate(): number;
|
47
|
+
set speedAccelerate(speed: number);
|
48
|
+
get speedDecelerate(): number;
|
49
|
+
set speedDecelerate(speed: number);
|
50
|
+
get scrollPosition(): number;
|
51
|
+
set scrollPosition(scrollPosition: number);
|
52
|
+
set scrollContainer(container: any);
|
53
|
+
private constructor();
|
54
|
+
static getInstance(): StringTune;
|
55
|
+
use(objectClass: typeof StringModule, settings?: any): void;
|
56
|
+
start(fps: number): void;
|
57
|
+
private initObjects;
|
58
|
+
destroy(): void;
|
59
|
+
on(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id?: string): void;
|
60
|
+
off(key: 'scroll' | 'progress' | 'intersection' | 'lerp' | 'inview' | 'cursor', event: any, id?: string): void;
|
61
|
+
protected setupObject(el: HTMLElement, object: StringObject): void;
|
62
|
+
addObject(el: HTMLElement): void;
|
63
|
+
removeObject(id: string): void;
|
64
|
+
private onMouseMoveEvent;
|
65
|
+
private onWheelEvent;
|
66
|
+
private onScrollEvent;
|
67
|
+
private onUpdateEvent;
|
68
|
+
private onResizeEvent;
|
69
|
+
private initMutationObserver;
|
70
|
+
private rebuild;
|
71
|
+
}
|
72
|
+
export { StringTune as default, StringCursor, StringDisplacement, StringFPSTracker, StringLazy, StringLoading, StringMagnetic, StringParallax, StringPositionTracker, StringProgress, StringScrollbar, StringSplit, StringTune as StringTune, StringVideoAutoplay };
|
package/package.json
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
{
|
2
|
+
"name": "@fiddle-digital/string-tune",
|
3
|
+
"version": "0.0.1",
|
4
|
+
"description": "StringTune is a cutting-edge JavaScript library designed to deliver high-performance, modular web effects. Whether you're looking to add smooth parallax scrolling, dynamic cursor interactions, progress tracking, or autoplay videos, StringTune empowers developers with a powerful, attribute-driven approach. It simplifies the creation of visually captivating websites while remaining intuitive for both beginner and advanced developers.",
|
5
|
+
"keywords": [
|
6
|
+
"scroll",
|
7
|
+
"smooth",
|
8
|
+
"css",
|
9
|
+
"string",
|
10
|
+
"typescript",
|
11
|
+
"scrolling-library",
|
12
|
+
"javascript-scroll",
|
13
|
+
"parallax-effects",
|
14
|
+
"scroll-animations",
|
15
|
+
"web-animation",
|
16
|
+
"scroll-interaction",
|
17
|
+
"dynamic-scrolling",
|
18
|
+
"custom-scrollbar",
|
19
|
+
"scroll-progress",
|
20
|
+
"responsive-scroll",
|
21
|
+
"scroll-event-handling",
|
22
|
+
"smooth-scrolling",
|
23
|
+
"mobile-scroll",
|
24
|
+
"desktop-scroll",
|
25
|
+
"css-scroll-effects",
|
26
|
+
"scroll-enhancement",
|
27
|
+
"interactive-web-elements",
|
28
|
+
"viewport-scroll",
|
29
|
+
"scroll-control",
|
30
|
+
"advanced-scrolling"
|
31
|
+
],
|
32
|
+
|
33
|
+
"main": "dist/index.js",
|
34
|
+
"types": "dist/index.d.ts",
|
35
|
+
"files": [
|
36
|
+
"dist/"
|
37
|
+
],
|
38
|
+
"exports": {
|
39
|
+
".": "./dist/index.js",
|
40
|
+
"./StringAnimation": "./dist/StringAnimation.js",
|
41
|
+
"./StringAnimationData": "./dist/StringAnimationData.js",
|
42
|
+
"./StringLerpAnimation": "./dist/StringLerpAnimation.js",
|
43
|
+
"./StringParallaxAnimation": "./dist/StringParallaxAnimation.js",
|
44
|
+
"./StringProgressAnimation": "./dist/StringProgressAnimation.js",
|
45
|
+
"./StringShowAnimation": "./dist/StringShowAnimation.js",
|
46
|
+
"./StringScrollbar": "./dist/StringScrollbar.js",
|
47
|
+
"./StringTracker": "./dist/StringTracker.js",
|
48
|
+
"./StringScrollData": "./dist/StringScrollData.js"
|
49
|
+
},
|
50
|
+
"scripts": {
|
51
|
+
"build": "webpack",
|
52
|
+
"minify": "terser dist/index.js --compress --mangle -o dist/index.js"
|
53
|
+
},
|
54
|
+
"authors": [
|
55
|
+
{
|
56
|
+
"name": "Dmitro Troshchylo"
|
57
|
+
},
|
58
|
+
{
|
59
|
+
"name": "Penev Vladislav",
|
60
|
+
"email": "penev.vladislav@gmail.com",
|
61
|
+
"url": "https://github.com/penev-palemiya"
|
62
|
+
}
|
63
|
+
],
|
64
|
+
"license": "MIT",
|
65
|
+
"devDependencies": {
|
66
|
+
"@babel/cli": "^7.22.9",
|
67
|
+
"@babel/core": "^7.22.9",
|
68
|
+
"@babel/preset-env": "^7.22.9",
|
69
|
+
"@babel/preset-typescript": "^7.22.5",
|
70
|
+
"@types/node": "^20.4.2",
|
71
|
+
"terser": "^5.19.0",
|
72
|
+
"ts-loader": "^9.4.4",
|
73
|
+
"typescript": "^5.1.6",
|
74
|
+
"webpack": "^5.88.2",
|
75
|
+
"webpack-bundle-analyzer": "^4.9.0",
|
76
|
+
"webpack-cli": "^5.1.4"
|
77
|
+
},
|
78
|
+
"private": false
|
79
|
+
}
|
package/readme.md
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
|
2
|
+

|
3
|
+
[](https://bundlephobia.com/package/@fiddle-digital/string-tune@0.0.1)
|
5
|
+
|
6
|
+
|
7
|
+
# Overview
|
8
|
+
|
9
|
+
## What is StringTune?
|
10
|
+
|
11
|
+
**StringTune** is a cutting-edge JavaScript library designed to deliver high-performance, modular web effects. Whether you're looking to add smooth parallax scrolling, dynamic cursor interactions, progress tracking, or autoplay videos, StringTune empowers developers with a powerful, attribute-driven approach. It simplifies the creation of visually captivating websites while remaining intuitive for both beginner and advanced developers.
|
12
|
+
|
13
|
+
### Key Features
|
14
|
+
|
15
|
+
- **Modular Architecture**: Use only the modules you need to keep your project lightweight and optimized.
|
16
|
+
- **Attribute-Based Integration**: Configure effects directly in HTML with clear, descriptive attributes.
|
17
|
+
- **Wide Range of Effects**:
|
18
|
+
- Parallax scrolling
|
19
|
+
- Magnetic cursor
|
20
|
+
- Progress indicators
|
21
|
+
- Split text animations
|
22
|
+
- Autoplay videos
|
23
|
+
- **Effortless Initialization**: Start everything with a few lines of JavaScript.
|
24
|
+
- **Performance-Oriented**: Built for smooth performance even on complex pages.
|
25
|
+
|
26
|
+
### Who is StringTune for?
|
27
|
+
|
28
|
+
StringTune is perfect for:
|
29
|
+
|
30
|
+
- **Beginner Developers**: Simplify the process of adding advanced web effects without deep technical knowledge.
|
31
|
+
- **Experienced Developers**: Leverage modularity and API options to create complex, custom effects.
|
32
|
+
- **Designers**: Bring creative visions to life with minimal setup.
|
33
|
+
|
34
|
+
# Introduction
|
35
|
+
|
36
|
+
## Why StringTune?
|
37
|
+
|
38
|
+
In a world of constantly evolving web experiences, **StringTune** helps you stay ahead by offering a versatile toolset to build dynamic, engaging effects without reinventing the wheel. By focusing on simplicity, modularity, and performance, StringTune provides a solution that bridges the gap between creativity and technical execution.
|
39
|
+
|
40
|
+
### Benefits of Using StringTune
|
41
|
+
|
42
|
+
1. **Simplicity**: No need for complex setups. Just include the library, add HTML attributes, and see your effects in action.
|
43
|
+
2. **Flexibility**: A modular system lets you include only the effects you need, ensuring efficiency.
|
44
|
+
3. **Compatibility**: Built with modern web standards to work seamlessly across browsers and devices.
|
45
|
+
4. **Scalability**: Suitable for projects of any size, from personal portfolios to large-scale web applications.
|
46
|
+
|
47
|
+
### Core Principles
|
48
|
+
|
49
|
+
- **Declarative First**: Most configurations are handled via HTML attributes, reducing the need for verbose JavaScript.
|
50
|
+
- **Customizable**: Provides an API for developers who need fine-grained control over effects.
|
51
|
+
- **Performant**: Optimized to handle intensive animations without compromising user experience.
|
52
|
+
|
53
|
+
### Example Use Case
|
54
|
+
|
55
|
+
```html
|
56
|
+
<div class="example-container">
|
57
|
+
<div class="parallax-item" string="parallax" string-factor="0.8">
|
58
|
+
Welcome to StringTune!
|
59
|
+
</div>
|
60
|
+
<div class="cursor-item" string="cursor|magnetic" string-cursor-target="target">
|
61
|
+
Hover over me!
|
62
|
+
</div>
|
63
|
+
</div>
|
64
|
+
|
65
|
+
```
|
66
|
+
|
67
|
+
```javascript
|
68
|
+
const stringTune = StringManager.getInstance();
|
69
|
+
stringTune.use(StringParallax);
|
70
|
+
stringTune.use(StringMagnetic);
|
71
|
+
stringTune.start(60); // Start with 60 FPS
|
72
|
+
|
73
|
+
```
|
74
|
+
|
75
|
+
### When to Use StringTune
|
76
|
+
|
77
|
+
- To create visually appealing websites with minimal effort.
|
78
|
+
- When you need customizable effects that are easy to integrate.
|
79
|
+
- To enhance user engagement through interactive animations.
|
80
|
+
|
81
|
+
----------
|
82
|
+
|
83
|
+
Get started with **StringTune** today and elevate your web experiences to the next level.
|