{"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-scroll.mjs","sources":["../../../projects/ng-dsv/ds/scroll/component/base/base.app.scroll.component.ts","../../../projects/ng-dsv/ds/scroll/component/base/base.scroll.component.ts","../../../projects/ng-dsv/ds/scroll/component/scroll.infinite.component.ts","../../../projects/ng-dsv/ds/scroll/component/scroll.infinite.component.html","../../../projects/ng-dsv/ds/scroll/service/scroll.service.ts","../../../projects/ng-dsv/ds/scroll/utils/scroll.utils.ts","../../../projects/ng-dsv/ds/scroll/ng-vagabond-lab-ng-dsv-ds-scroll.ts"],"sourcesContent":["import { inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router, Scroll } from '@angular/router';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { filter, map } from 'rxjs';\nimport { ScrollService, scrollOnClassTo } from '../../public-api';\n\nexport abstract class BaseAppScrollComponent {\n    readonly platformService = inject(PlatformService);\n    readonly scrollService = inject(ScrollService);\n    readonly router = inject(Router);\n\n    currentUrl = toSignal(\n        this.router.events.pipe(\n            filter((event) => event instanceof NavigationEnd),\n            map((event) => event.urlAfterRedirects),\n        ),\n        { initialValue: this.router.url },\n    );\n    scroll = signal<number>(0);\n\n    constructor() {\n        inject(Router)\n            .events.pipe(\n                filter((event): event is Scroll => event instanceof Scroll),\n                map((event: Scroll) => event.position),\n            )\n            .subscribe(() => {\n                if (this.platformService.isPlatformBrowser() && this.scrollService.getScroll()) {\n                    setTimeout(() => {\n                        scrollOnClassTo('scroll', 0, this.scrollService.getScroll() ?? 0);\n                    }, 100);\n                }\n            });\n    }\n\n    doScroll() {\n        const divScroll = document.getElementsByClassName('scroll')?.[0];\n        this.scrollService.saveScroll(divScroll.scrollTop);\n        this.scrollService.scroll.set(divScroll.scrollTop);\n    }\n}\n","import { inject } from '@angular/core';\nimport { BaseSeoContainer } from '@ng-vagabond-lab/ng-dsv/base';\nimport { ScrollService } from '../../public-api';\n\nexport abstract class BaseScrollComponent extends BaseSeoContainer {\n    readonly scrollService = inject(ScrollService);\n\n    loadMore() {\n        if (!this.scrollService.getlocked()) {\n            this.scrollService.doBlocked();\n            this.doLoad();\n            this.scrollService.doBlockedWithTimeout(false, 500);\n        }\n    }\n\n    abstract doLoad(): void;\n}\n","import { Component, ElementRef, inject, input, output } from '@angular/core';\nimport { ScrollService } from '../public-api';\n\n@Component({\n    selector: 'dsv-scroll-infinite',\n    imports: [],\n    templateUrl: './scroll.infinite.component.html',\n    styleUrls: ['./scroll.infinite.component.scss'],\n    host: {\n        class: 'scroll',\n        '(scroll)': 'doScroll()',\n    },\n})\nexport class ScrollInfiniteContainer {\n    scrollService = inject(ScrollService);\n    elementRef = inject(ElementRef);\n\n    class = input<string>('');\n    interval = input<number>(20);\n\n    callback = output<void>();\n\n    loading = input<boolean>(false);\n\n    doScroll() {\n        const divScroll = document.getElementsByClassName(this.class())?.[0];\n        const scrollClientHeight = divScroll?.scrollTop + divScroll?.clientHeight;\n        const distanceToBottom = divScroll?.scrollHeight - scrollClientHeight;\n        this.scrollService.saveScroll(divScroll?.scrollTop);\n        this.scrollService.scroll.set(divScroll?.scrollTop);\n        if (distanceToBottom < this.interval()) {\n            this.callback.emit();\n        }\n    }\n}\n","<ng-content></ng-content>\n","import { Injectable, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ScrollService {\n    scrolls = signal<Map<string, number>>(new Map());\n    blocked = signal<Map<string, boolean>>(new Map());\n    scroll = signal<number>(0);\n\n    saveScroll(scrollTop: number) {\n        this.scrolls.update((value) => {\n            if (scrollTop !== 0) {\n                value.set(location.href, scrollTop);\n            }\n            return value;\n        });\n    }\n\n    getScroll() {\n        return this.scrolls().get(location.href);\n    }\n\n    doBlocked(blocked: boolean = true) {\n        this.blocked.update((value) => {\n            value.set(location.href, blocked);\n            return value;\n        });\n    }\n\n    doBlockedWithTimeout(blocked: boolean, timeout: number = 1000) {\n        setTimeout(() => {\n            this.doBlocked(blocked);\n        }, timeout);\n    }\n\n    getlocked() {\n        return this.blocked().get(location.href);\n    }\n}\n","export const scrollOnClassTo = (scrollClass: string, x: number, y: number, index?: number) => {\n    const scrolls = document.getElementsByClassName(scrollClass);\n    if (index) {\n        scrolls[index]?.scrollTo(x, y);\n    } else {\n        Array.from(scrolls).forEach((scroll) => {\n            scroll?.scrollTo(x, y);\n        });\n    }\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}