UNPKG

ngx-ui-tour-core

Version:
1 lines 74.8 kB
{"version":3,"file":"ngx-ui-tour-core.mjs","sources":["../../../libs/ngx-ui-tour-core/src/lib/utils/deep-merge.ts","../../../libs/ngx-ui-tour-core/src/lib/utils/is-covered.ts","../../../libs/ngx-ui-tour-core/src/lib/utils/is-in-viewport.ts","../../../libs/ngx-ui-tour-core/src/lib/utils/overflow-utils.ts","../../../libs/ngx-ui-tour-core/src/lib/utils/get-scrollable-parent.ts","../../../libs/ngx-ui-tour-core/src/lib/utils/scroll-utils.ts","../../../libs/ngx-ui-tour-core/src/lib/scrolling.service.ts","../../../libs/ngx-ui-tour-core/src/lib/tour-resize-observer.service.ts","../../../libs/ngx-ui-tour-core/src/lib/tour-backdrop.service.ts","../../../libs/ngx-ui-tour-core/src/lib/anchor-click.service.ts","../../../libs/ngx-ui-tour-core/src/lib/scroll-blocking.service.ts","../../../libs/ngx-ui-tour-core/src/lib/tour.service.ts","../../../libs/ngx-ui-tour-core/src/lib/tour-hotkey-listener.component.ts","../../../libs/ngx-ui-tour-core/src/lib/base-tour-proxy-anchor.ts","../../../libs/ngx-ui-tour-core/src/ngx-ui-tour-core.ts"],"sourcesContent":["type PlainObject = Record<string | number | symbol, unknown>;\r\n\r\nexport function deepMerge<T>(...objects: T[]): T {\r\n    return objects.reduce((acc: T, cur: T) => {\r\n\r\n        cur ??= {} as T;\r\n        const keys = Object.keys(cur) as (keyof T)[];\r\n\r\n        for (const key of keys) {\r\n            const accValue = acc[key] as PlainObject | unknown,\r\n                curValue = cur[key] as PlainObject | unknown;\r\n\r\n            if (isPlainObject(accValue) && isPlainObject(curValue)) {\r\n                acc[key] = deepMerge(accValue, curValue) as T[keyof T];\r\n            } else {\r\n                acc[key] = curValue as T[keyof T];\r\n            }\r\n        }\r\n\r\n        return acc;\r\n    }, {} as T);\r\n}\r\n\r\nfunction isPlainObject(value: unknown | PlainObject): value is PlainObject {\r\n    return value instanceof Object && value.constructor === Object;\r\n}\r\n","import {ElementSides} from './is-in-viewport';\r\n\r\nexport function isCovered(htmlElement: HTMLElement, sidesToCheck: ElementSides = ElementSides.All): boolean {\r\n    const rect = htmlElement.getBoundingClientRect(),\r\n        topEl = document.elementFromPoint(rect.left, rect.top),\r\n        bottomEl = document.elementFromPoint(rect.right, rect.bottom),\r\n        isTopCovered = !!topEl && topEl !== htmlElement && !areElementsRelated(topEl, htmlElement),\r\n        isBottomCovered = !!bottomEl && bottomEl !== htmlElement && !areElementsRelated(bottomEl, htmlElement);\r\n\r\n    if (sidesToCheck === ElementSides.Top) {\r\n        return isTopCovered;\r\n    }\r\n\r\n    if (sidesToCheck === ElementSides.Bottom) {\r\n        return isBottomCovered;\r\n    }\r\n\r\n    return isTopCovered || isBottomCovered;\r\n}\r\n\r\nfunction areElementsRelated(el1: Node, el2: Node): boolean {\r\n    return el1.contains(el2) || el2.contains(el1);\r\n}","export const enum ElementSides {\r\n    Top,\r\n    Bottom,\r\n    All\r\n}\r\n\r\nexport function isInViewport(htmlElement: HTMLElement, sidesToCheck: ElementSides = ElementSides.All): boolean {\r\n    const viewportWidth = window.innerWidth,\r\n        viewportHeight = window.innerHeight,\r\n        boundingRectangle = htmlElement.getBoundingClientRect(),\r\n        areCornersInViewport = boundingRectangle.left >= 0 && boundingRectangle.right <= viewportWidth,\r\n        isTopInViewport = boundingRectangle.top >= 0,\r\n        isBottomInViewport = boundingRectangle.bottom <= viewportHeight;\r\n\r\n    if (sidesToCheck === ElementSides.Top) {\r\n        return isTopInViewport && areCornersInViewport;\r\n    }\r\n    if (sidesToCheck === ElementSides.Bottom) {\r\n        return isBottomInViewport && areCornersInViewport;\r\n    }\r\n\r\n    return isTopInViewport && isBottomInViewport && areCornersInViewport;\r\n}\r\n","export class OverflowUtils {\r\n\r\n    static getVisibleSection(childRect: DOMRect, containerRect: DOMRect): DOMRect {\r\n        return OverflowUtils._isHeightOverflowing(childRect, containerRect) ?\r\n            OverflowUtils._getOverlap(childRect, containerRect) :\r\n            childRect;\r\n    }\r\n\r\n    static isHeightOverflowing(child: HTMLElement | DOMRect, container: HTMLElement | DOMRect): boolean {\r\n        return OverflowUtils._isHeightOverflowing(\r\n            child instanceof HTMLElement ? child.getBoundingClientRect() : child,\r\n            container instanceof HTMLElement ? container.getBoundingClientRect() : container,\r\n        );\r\n    }\r\n\r\n    private static _isHeightOverflowing(childRect: DOMRect, containerRect: DOMRect): boolean {\r\n        return containerRect.height < childRect.height;\r\n    }\r\n\r\n    private static _getOverlap(a: DOMRect, b: DOMRect): DOMRect {\r\n        const top = Math.max(a.top, b.top),\r\n            left = Math.max(a.left, b.left),\r\n            right = Math.min(a.right, b.right),\r\n            bottom = Math.min(a.bottom, b.bottom);\r\n        return new DOMRect(left, top, right - left, bottom - top);\r\n    }\r\n}\r\n\r\n","export function getScrollableParent(node: Node): HTMLElement | null {\r\n    if (!(node instanceof HTMLElement || node instanceof ShadowRoot)) {\r\n        return null;\r\n    }\r\n\r\n    const element = node instanceof ShadowRoot ? node.host as HTMLElement : node;\r\n\r\n    const style = getComputedStyle(element),\r\n        isScrollable = element.scrollHeight > element.clientHeight,\r\n        overflow = style.overflowY,\r\n        scrollableOverflow = ['scroll', 'auto'];\r\n\r\n    if (isScrollable && scrollableOverflow.includes(overflow)) {\r\n        return element;\r\n    }\r\n\r\n    return getScrollableParent(element.parentNode);\r\n}\r\n","import {getScrollableParent} from './get-scrollable-parent';\r\n\r\nexport class ScrollUtils {\r\n    \r\n    static getScrollContainer(\r\n        anchorEl: HTMLElement,\r\n        userScrollContainer: string | HTMLElement | undefined\r\n    ): HTMLElement | null {\r\n        if (typeof userScrollContainer === 'string') {\r\n            return document.documentElement.querySelector(userScrollContainer);\r\n        }\r\n        if (userScrollContainer instanceof HTMLElement) {\r\n            return userScrollContainer;\r\n        }\r\n\r\n        return getScrollableParent(anchorEl);\r\n    }\r\n    \r\n}\r\n","import {ElementSides, isCovered, isInViewport, OverflowUtils, ScrollUtils} from './utils';\r\nimport {debounceTime, firstValueFrom, fromEvent, map, of, timeout} from 'rxjs';\r\nimport {inject, Injectable, PLATFORM_ID} from '@angular/core';\r\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\r\n\r\nexport interface ScrollOptions {\r\n    center: boolean;\r\n    smoothScroll: boolean;\r\n    scrollContainer?: string | HTMLElement;\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class ScrollingService {\r\n\r\n    private readonly platformId = inject(PLATFORM_ID);\r\n    private readonly isBrowser = isPlatformBrowser(this.platformId);\r\n    private readonly document = inject(DOCUMENT);\r\n    private readonly window = this.document.defaultView;\r\n    private scrollOptions: ScrollOptions;\r\n    private anchorEl: HTMLElement;\r\n\r\n    ensureVisible(anchorElement: HTMLElement, options: ScrollOptions): Promise<void> {\r\n        this.scrollOptions = options;\r\n        this.anchorEl = anchorElement;\r\n\r\n        const behavior: ScrollBehavior = options.smoothScroll && this.isBrowser ? 'smooth' : 'auto';\r\n\r\n        const userScrollContainer = this.scrollOptions.scrollContainer,\r\n            scrollContainer = ScrollUtils.getScrollContainer(anchorElement, userScrollContainer) ?? document.documentElement;\r\n\r\n        if (OverflowUtils.isHeightOverflowing(anchorElement, scrollContainer)) {\r\n            anchorElement.scrollIntoView({\r\n                block: 'start',\r\n                inline: 'start',\r\n                behavior\r\n            });\r\n        } else if (options.center && !('safari' in this.window)) {\r\n            anchorElement.scrollIntoView({\r\n                block: 'center',\r\n                inline: 'center',\r\n                behavior\r\n            });\r\n        } else if (!isInViewport(anchorElement, ElementSides.Bottom) || isCovered(anchorElement, ElementSides.Bottom)) {\r\n            anchorElement.scrollIntoView({\r\n                block: 'end',\r\n                inline: 'nearest',\r\n                behavior\r\n            });\r\n        } else if (!isInViewport(anchorElement, ElementSides.Top) || isCovered(anchorElement, ElementSides.Top)) {\r\n            anchorElement.scrollIntoView({\r\n                block: 'start',\r\n                inline: 'nearest',\r\n                behavior\r\n            });\r\n        } else {\r\n            return Promise.resolve();\r\n        }\r\n\r\n        return behavior === 'smooth' ? firstValueFrom(this.waitForScrollFinish$) : Promise.resolve();\r\n    }\r\n\r\n    private get waitForScrollFinish$() {\r\n        const userScrollContainer = this.scrollOptions.scrollContainer,\r\n            // Default here is \"document\" instead of \"document.documentElement\" on purpose\r\n            scrollContainer = ScrollUtils.getScrollContainer(this.anchorEl, userScrollContainer) ?? document;\r\n\r\n        return fromEvent(scrollContainer, 'scroll')\r\n            .pipe(\r\n                timeout({\r\n                    each: 75,\r\n                    with: () => of(undefined)\r\n                }),\r\n                debounceTime(50),\r\n                map(() => undefined)\r\n            );\r\n    }\r\n\r\n}\r\n","import {DOCUMENT, isPlatformBrowser} from '@angular/common';\r\nimport {inject, Injectable, PLATFORM_ID} from '@angular/core';\r\nimport {debounceTime, fromEvent, merge, Subject} from 'rxjs';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class TourResizeObserverService {\r\n\r\n    private readonly resizeElSubject = new Subject<void>();\r\n    private readonly platformId = inject(PLATFORM_ID);\r\n    private readonly isResizeObserverSupported = isPlatformBrowser(this.platformId) && !!ResizeObserver;\r\n    private resizeObserver?: ResizeObserver;\r\n    private readonly document = inject(DOCUMENT);\r\n    private readonly window = this.document.defaultView;\r\n\r\n    public readonly resize$ = merge(\r\n        this.resizeElSubject,\r\n        fromEvent(this.window, 'resize')\r\n    ).pipe(\r\n        debounceTime(10)\r\n    );\r\n\r\n    observeElement(target: Element) {\r\n        if (this.isResizeObserverSupported && !this.resizeObserver) {\r\n            this.resizeObserver = new ResizeObserver(\r\n                () => this.resizeElSubject.next()\r\n            );\r\n        }\r\n\r\n        this.resizeObserver?.observe(target);\r\n    }\r\n\r\n    unobserveElement(target: Element) {\r\n        this.resizeObserver?.unobserve(target);\r\n    }\r\n\r\n    disconnect() {\r\n        this.resizeObserver?.disconnect();\r\n        this.resizeObserver = undefined;\r\n    }\r\n\r\n}\r\n","import type {ElementRef} from '@angular/core';\r\nimport {inject, Injectable, RendererFactory2} from '@angular/core';\r\nimport type {Subscription} from 'rxjs';\r\nimport {ScrollingService} from './scrolling.service';\r\nimport {TourResizeObserverService} from './tour-resize-observer.service';\r\nimport type {IStepOption} from './tour.service';\r\nimport {DOCUMENT} from '@angular/common';\r\nimport {OverflowUtils, ScrollUtils} from './utils';\r\n\r\ninterface Rectangle {\r\n    width: number;\r\n    height: number;\r\n    top: number;\r\n    left: number;\r\n}\r\n\r\nexport interface BackdropConfig {\r\n    zIndex?: string;\r\n    backgroundColor?: string;\r\n    /**\r\n     * Parent container CSS selector or html element reference. Set to fix backdrop stacking issues. Defaults to body.\r\n     */\r\n    parentContainer?: string | HTMLElement;\r\n    /**\r\n     * Offset in pixels to add space between the backdrop and the anchor element.\r\n     */\r\n    offset?: number;\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class TourBackdropService {\r\n\r\n    private backdropElements: HTMLElement[];\r\n    private targetHtmlElement: HTMLElement;\r\n    private step: IStepOption;\r\n    private resizeSubscription: Subscription;\r\n    private isSpotlightClosed = false;\r\n\r\n    private readonly rendererFactory = inject(RendererFactory2);\r\n    private readonly renderer = this.rendererFactory.createRenderer(null, null);\r\n    private readonly resizeObserverService = inject(TourResizeObserverService);\r\n    private readonly scrollingService = inject(ScrollingService);\r\n    private readonly document = inject(DOCUMENT);\r\n\r\n    public show(targetElement: ElementRef, step: IStepOption) {\r\n        if (this.targetHtmlElement) {\r\n            this.resizeObserverService.unobserveElement(this.targetHtmlElement);\r\n        }\r\n\r\n        this.targetHtmlElement = targetElement.nativeElement;\r\n        this.step = step;\r\n\r\n        this.resizeObserverService.observeElement(this.targetHtmlElement);\r\n\r\n        if (!this.backdropElements) {\r\n            this.backdropElements = this.createBackdropElements();\r\n            this.subscribeToResizeEvents();\r\n        }\r\n\r\n        this.isSpotlightClosed = false;\r\n        this.setBackdropPosition();\r\n    }\r\n\r\n    public closeSpotlight() {\r\n        if (!this.backdropElements) {\r\n            return;\r\n        }\r\n\r\n        const targetRect = this.targetHtmlElement.getBoundingClientRect(),\r\n            centerX = targetRect.left + (targetRect.width / 2),\r\n            centerY = targetRect.top + (targetRect.height / 2),\r\n            centerRect = {\r\n                top: centerY,\r\n                right: centerX,\r\n                bottom: centerY,\r\n                left: centerX,\r\n                width: 0,\r\n                height: 0\r\n            } as DOMRect;\r\n\r\n        this.isSpotlightClosed = true;\r\n        this.setBackdropPosition(centerRect);\r\n    }\r\n\r\n    private setBackdropPosition(rectangle: DOMRect = null) {\r\n        const docEl = this.document.documentElement,\r\n            scrollContainer = ScrollUtils.getScrollContainer(this.targetHtmlElement, this.step.scrollContainer) ?? docEl,\r\n            elementBoundingRect = rectangle ?? this.targetHtmlElement.getBoundingClientRect(),\r\n            scrollContainerRect = scrollContainer.getBoundingClientRect(),\r\n            visibleSection = OverflowUtils.getVisibleSection(elementBoundingRect, scrollContainerRect),\r\n            scrollHeight = docEl.scrollHeight,\r\n            scrollWidth = docEl.scrollWidth,\r\n            window = this.document.defaultView,\r\n            scrollX = window.scrollX,\r\n            scrollY = window.scrollY,\r\n            offset = this.isSpotlightClosed ? 0 : this.step.backdropConfig?.offset ?? 0,\r\n            leftRect: Rectangle = {\r\n                width: visibleSection.left + scrollX - offset,\r\n                height: scrollHeight,\r\n                top: 0,\r\n                left: 0\r\n            },\r\n            topRect: Rectangle = {\r\n                width: visibleSection.width + offset * 2,\r\n                height: visibleSection.top + scrollY - offset,\r\n                top: 0,\r\n                left: visibleSection.left + scrollX - offset\r\n            },\r\n            bottomRect: Rectangle = {\r\n                width: visibleSection.width + offset * 2,\r\n                height: scrollHeight - (visibleSection.bottom + scrollY) - offset,\r\n                top: visibleSection.bottom + scrollY + offset,\r\n                left: visibleSection.left + scrollX - offset\r\n            },\r\n            rightRect: Rectangle = {\r\n                width: scrollWidth - (visibleSection.right + scrollX) - offset,\r\n                height: scrollHeight,\r\n                top: 0,\r\n                left: visibleSection.right + scrollX + offset\r\n            },\r\n            rectangles: Rectangle[] = [leftRect, topRect, bottomRect, rightRect];\r\n\r\n        for (let i = 0; i < rectangles.length; i++) {\r\n            const styles = this.createBackdropStyles(rectangles[i]);\r\n            this.applyStyles(styles, this.backdropElements[i]);\r\n        }\r\n    }\r\n\r\n    private subscribeToResizeEvents() {\r\n        this.resizeSubscription = this.resizeObserverService.resize$\r\n            .subscribe(\r\n                () => {\r\n                    this.setBackdropPosition();\r\n                    if (!this.step.disableScrollToAnchor) {\r\n                        this.scrollingService.ensureVisible(this.targetHtmlElement, {\r\n                            center: this.step.centerAnchorOnScroll,\r\n                            smoothScroll: false\r\n                        });\r\n                    }\r\n                }\r\n            );\r\n    }\r\n\r\n    public close() {\r\n        if (this.backdropElements) {\r\n            this.resizeObserverService.unobserveElement(this.targetHtmlElement);\r\n            this.removeBackdropElement();\r\n            this.resizeSubscription.unsubscribe();\r\n        }\r\n    }\r\n\r\n    public disconnectResizeObserver() {\r\n        this.resizeObserverService.disconnect();\r\n    }\r\n\r\n    private removeBackdropElement() {\r\n        this.backdropElements.forEach(\r\n            backdropElement => this.renderer.removeChild(this.parentContainer, backdropElement)\r\n        );\r\n        this.backdropElements = undefined;\r\n    }\r\n\r\n    private applyStyles(styles: Partial<CSSStyleDeclaration>, element: HTMLElement) {\r\n        for (const name of Object.keys(styles)) {\r\n            this.renderer.setStyle(element, name, styles[name as keyof CSSStyleDeclaration]);\r\n        }\r\n    }\r\n\r\n    private createBackdropStyles(rectangle: Rectangle) {\r\n        const config = this.step.backdropConfig,\r\n            normalizedRect = {\r\n                ...rectangle,\r\n                width: Math.max(rectangle.width, 0),\r\n                height: Math.max(rectangle.height, 0)\r\n            };\r\n\r\n        return {\r\n            position: 'absolute',\r\n            width: `${normalizedRect.width}px`,\r\n            height: `${normalizedRect.height}px`,\r\n            top: `${normalizedRect.top}px`,\r\n            left: `${normalizedRect.left}px`,\r\n            backgroundColor: config?.backgroundColor ?? 'rgba(0, 0, 0, 0.7)',\r\n            zIndex: config?.zIndex ?? '101'\r\n        } as Partial<CSSStyleDeclaration>;\r\n    }\r\n\r\n    private createBackdropElement() {\r\n        const backdropElement = this.renderer.createElement('div');\r\n        this.renderer.addClass(backdropElement, 'ngx-ui-tour_backdrop');\r\n        this.renderer.appendChild(this.parentContainer, backdropElement);\r\n        return backdropElement;\r\n    }\r\n\r\n    private createBackdropElements() {\r\n        return Array\r\n            .from({length: 4})\r\n            .map(() => this.createBackdropElement());\r\n    }\r\n\r\n    private get parentContainer(): HTMLElement {\r\n        const parent = this.step.backdropConfig?.parentContainer;\r\n\r\n        if (parent instanceof HTMLElement) {\r\n            return parent;\r\n        }\r\n        if (typeof parent === 'string') {\r\n            const queryResult = this.document.documentElement.querySelector(parent) as HTMLElement;\r\n\r\n            return queryResult ?? this.document.body;\r\n        }\r\n\r\n        return this.document.body;\r\n    }\r\n\r\n}\r\n","import {inject, Injectable, RendererFactory2} from '@angular/core';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class AnchorClickService {\r\n\r\n    private readonly rendererFactory = inject(RendererFactory2);\r\n    private readonly renderer = this.rendererFactory.createRenderer(null, null);\r\n\r\n    private unListenToAnchorClickFn: () => void;\r\n\r\n    public removeListener() {\r\n        if (this.unListenToAnchorClickFn) {\r\n            this.unListenToAnchorClickFn();\r\n            this.unListenToAnchorClickFn = undefined;\r\n        }\r\n    }\r\n\r\n    public addListener(anchorEl: HTMLElement, callback: () => void) {\r\n        this.unListenToAnchorClickFn = this.renderer.listen(anchorEl, 'click', callback);\r\n    }\r\n}","import {inject, Injectable, PLATFORM_ID, RendererFactory2} from '@angular/core';\r\nimport {isPlatformBrowser} from '@angular/common';\r\nimport {ScrollUtils} from './utils';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class ScrollBlockingService {\r\n\r\n    private isEnabled = false;\r\n    private userScrollContainer: string | HTMLElement;\r\n\r\n    private readonly platformId = inject(PLATFORM_ID);\r\n    private readonly isBrowser = isPlatformBrowser(this.platformId);\r\n    private readonly rendererFactory = inject(RendererFactory2);\r\n    private readonly renderer = this.rendererFactory.createRenderer(null, null);\r\n\r\n    enable(scrollContainer: string | HTMLElement) {\r\n        if (!this.isBrowser || this.isEnabled) {\r\n            return;\r\n        }\r\n\r\n        this.userScrollContainer = scrollContainer;\r\n        this.toggleOverflow();\r\n        this.isEnabled = true;\r\n    }\r\n\r\n    disable() {\r\n        if (!this.isEnabled) {\r\n            return;\r\n        }\r\n\r\n        this.toggleOverflow();\r\n        this.isEnabled = false;\r\n    }\r\n\r\n    private toggleOverflow() {\r\n        // Don't try to automatically detect scroll container here since that breaks smooth scrolling\r\n        const scrollContainer = ScrollUtils.getScrollContainer(null, this.userScrollContainer) ?? document.documentElement;\r\n\r\n        if (this.isEnabled) {\r\n            this.renderer.removeStyle(scrollContainer, 'overflow');\r\n        } else {\r\n            this.renderer.setStyle(scrollContainer, 'overflow', 'hidden');\r\n        }\r\n    }\r\n\r\n}\r\n","import {inject, Injectable} from '@angular/core';\r\nimport type {IsActiveMatchOptions, UrlSegment} from '@angular/router';\r\nimport {NavigationStart, Router} from '@angular/router';\r\n\r\nimport type {TourAnchorDirective} from './tour-anchor.directive';\r\nimport type {Observable} from 'rxjs';\r\nimport {delay, filter, first, map, merge as mergeStatic, of, Subject, takeUntil, timeout} from 'rxjs';\r\nimport {ScrollingService} from './scrolling.service';\r\nimport type {BackdropConfig} from './tour-backdrop.service';\r\nimport {TourBackdropService} from './tour-backdrop.service';\r\nimport {AnchorClickService} from './anchor-click.service';\r\nimport {ScrollBlockingService} from './scroll-blocking.service';\r\nimport {deepMerge} from './utils';\r\n\r\nexport interface StepDimensions {\r\n    width?: string;\r\n    minWidth?: string;\r\n    maxWidth?: string;\r\n}\r\n\r\nexport interface IStepOption {\r\n    stepId?: string;\r\n    anchorId?: string;\r\n    title?: string;\r\n    content?: string;\r\n    route?: string | UrlSegment[];\r\n    nextStep?: number | string;\r\n    prevStep?: number | string;\r\n    disableScrollToAnchor?: boolean;\r\n    centerAnchorOnScroll?: boolean;\r\n    smoothScroll?: boolean;\r\n    /**\r\n     * CSS selector or html element reference. Only set this config if you have enabled \"smoothScroll\" and tour step\r\n     * description pops-up before scrolling has finished or doesn't show up at all. This should only be the case when\r\n     * scroll container is part of shadow DOM.\r\n     */\r\n    scrollContainer?: string | HTMLElement;\r\n    prevBtnTitle?: string;\r\n    nextBtnTitle?: string;\r\n    endBtnTitle?: string;\r\n    enableBackdrop?: boolean;\r\n    backdropConfig?: BackdropConfig;\r\n    isAsync?: boolean;\r\n    asyncStepTimeout?: number;\r\n    isOptional?: boolean;\r\n    delayAfterNavigation?: number;\r\n    delayBeforeStepShow?: number;\r\n    nextOnAnchorClick?: boolean;\r\n    duplicateAnchorHandling?: 'error' | 'registerFirst' | 'registerLast';\r\n    disablePageScrolling?: boolean;\r\n    allowUserInitiatedNavigation?: boolean;\r\n    stepDimensions?: StepDimensions;\r\n    popoverClass?: string;\r\n    showProgress?: boolean;\r\n}\r\n\r\nexport enum TourState {\r\n    OFF,\r\n    ON,\r\n    PAUSED\r\n}\r\n\r\nexport enum Direction {\r\n    Forwards,\r\n    Backwards\r\n}\r\n\r\nexport interface StepChangeParams<T extends IStepOption = IStepOption> {\r\n    step: T;\r\n    direction: Direction;\r\n}\r\n\r\nconst DEFAULT_STEP_OPTIONS: IStepOption = {\r\n    disableScrollToAnchor: false,\r\n    prevBtnTitle: 'Prev',\r\n    nextBtnTitle: 'Next',\r\n    endBtnTitle: 'End',\r\n    enableBackdrop: false,\r\n    isAsync: false,\r\n    isOptional: false,\r\n    delayAfterNavigation: 100,\r\n    delayBeforeStepShow: 0,\r\n    nextOnAnchorClick: false,\r\n    duplicateAnchorHandling: 'error',\r\n    centerAnchorOnScroll: true,\r\n    disablePageScrolling: true,\r\n    smoothScroll: true,\r\n    allowUserInitiatedNavigation: false,\r\n    stepDimensions: {\r\n        minWidth: '250px',\r\n        maxWidth: '280px',\r\n        width: 'auto'\r\n    },\r\n    showProgress: true\r\n};\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class TourService<T extends IStepOption = IStepOption> {\r\n\r\n    public stepShow$ = new Subject<StepChangeParams<T>>();\r\n    public stepHide$ = new Subject<StepChangeParams<T>>();\r\n    public initialize$ = new Subject<T[]>();\r\n    public start$ = new Subject<void>();\r\n    public end$ = new Subject<void>();\r\n    public pause$ = new Subject<void>();\r\n    public resume$ = new Subject<void>();\r\n    public anchorRegister$ = new Subject<string>();\r\n    public anchorUnregister$ = new Subject<string>();\r\n    public events$: Observable<{ name: string; value: unknown }> = mergeStatic(\r\n        this.stepShow$.pipe(map(value => ({name: 'stepShow', value}))),\r\n        this.stepHide$.pipe(map(value => ({name: 'stepHide', value}))),\r\n        this.initialize$.pipe(map(value => ({name: 'initialize', value}))),\r\n        this.start$.pipe(map(value => ({name: 'start', value}))),\r\n        this.end$.pipe(map(value => ({name: 'end', value}))),\r\n        this.pause$.pipe(map(value => ({name: 'pause', value}))),\r\n        this.resume$.pipe(map(value => ({name: 'resume', value}))),\r\n        this.anchorRegister$.pipe(\r\n            map(value => ({\r\n                name: 'anchorRegister',\r\n                value\r\n            }))\r\n        ),\r\n        this.anchorUnregister$.pipe(\r\n            map(value => ({\r\n                name: 'anchorUnregister',\r\n                value\r\n            }))\r\n        )\r\n    );\r\n\r\n    public steps: T[] = [];\r\n    public currentStep: T;\r\n\r\n    public anchors: Record<string, TourAnchorDirective> = {};\r\n    private status: TourState = TourState.OFF;\r\n    private isHotKeysEnabled = true;\r\n    private direction = Direction.Forwards;\r\n    private waitingForScroll = false;\r\n    private navigationStarted = false;\r\n    private userDefaults: T;\r\n\r\n    private readonly router = inject(Router);\r\n    private readonly backdrop = inject(TourBackdropService);\r\n    private readonly anchorClickService = inject(AnchorClickService);\r\n    private readonly scrollBlockingService = inject(ScrollBlockingService);\r\n    private readonly scrollingService = inject(ScrollingService);\r\n\r\n    public initialize(steps: T[], stepDefaults?: T): void {\r\n        if (this.status === TourState.ON) {\r\n            console.warn('Can not re-initialize the UI tour while it\\'s still active');\r\n            return;\r\n        }\r\n\r\n        if (steps && steps.length > 0) {\r\n            this.status = TourState.OFF;\r\n            this.steps = steps.map(\r\n                step => deepMerge(\r\n                    DEFAULT_STEP_OPTIONS as T,\r\n                    this.userDefaults,\r\n                    stepDefaults,\r\n                    step\r\n                )\r\n            );\r\n            this.validateSteps();\r\n            this.initialize$.next(this.steps);\r\n            this.subscribeToNavigationStartEvent();\r\n        }\r\n    }\r\n\r\n    public setDefaults(defaultOptions: T): void {\r\n        this.userDefaults = defaultOptions;\r\n    }\r\n\r\n    public getDefaults(): T {\r\n        return this.userDefaults;\r\n    }\r\n\r\n    private validateSteps() {\r\n        for (const step of this.steps) {\r\n            if (step.isAsync && step.isOptional && !step.asyncStepTimeout) {\r\n                throw new Error(`Tour step with anchor id \"${step.anchorId}\" can only be both \"async\" and ` +\r\n                    `\"optional\" when \"asyncStepTimeout\" is specified!`);\r\n            }\r\n        }\r\n    }\r\n\r\n    private subscribeToNavigationStartEvent()\r\n    {\r\n        this.router.events\r\n            .pipe(\r\n                filter((event): event is NavigationStart => event instanceof NavigationStart),\r\n                takeUntil(this.end$)\r\n            )\r\n            .subscribe(\r\n                (event) => {\r\n                    if (!this.currentStep) {\r\n                        return;\r\n                    }\r\n\r\n                    const browserBackBtnPressed = event.navigationTrigger === 'popstate',\r\n                      userNavigationAllowed = this.currentStep.allowUserInitiatedNavigation;\r\n\r\n                    if (!this.navigationStarted && (browserBackBtnPressed || !userNavigationAllowed)) {\r\n                        this.end();\r\n                    }\r\n                }\r\n            );\r\n    }\r\n\r\n    public disableHotkeys(): void {\r\n        this.isHotKeysEnabled = false;\r\n    }\r\n\r\n    public enableHotkeys(): void {\r\n        this.isHotKeysEnabled = true;\r\n    }\r\n\r\n    public start(): void {\r\n        if (this.status === TourState.ON) {\r\n            console.warn('tourService.start() called while the tour is already running.');\r\n            return;\r\n        }\r\n        this.startAt(0);\r\n    }\r\n\r\n    public startAt(stepId: number | string): void {\r\n        this.status = TourState.ON;\r\n        this.goToStep(this.loadStep(stepId));\r\n        this.start$.next();\r\n    }\r\n\r\n    public end(): void {\r\n        if (this.waitingForScroll) {\r\n            return;\r\n        }\r\n\r\n        if (this.status === TourState.OFF) {\r\n            return;\r\n        }\r\n        this.status = TourState.OFF;\r\n        this.disableTour();\r\n        this.currentStep = undefined;\r\n        this.direction = Direction.Forwards;\r\n        this.end$.next();\r\n    }\r\n\r\n    public pause(): void {\r\n        this.status = TourState.PAUSED;\r\n        this.disableTour();\r\n        this.pause$.next();\r\n    }\r\n\r\n    private disableTour() {\r\n        this.hideStep(this.currentStep);\r\n        this.anchorClickService.removeListener();\r\n        this.backdrop.close();\r\n        this.backdrop.disconnectResizeObserver();\r\n        this.scrollBlockingService.disable();\r\n    }\r\n\r\n    public resume(): void {\r\n        this.status = TourState.ON;\r\n        this.showStep(this.currentStep);\r\n        this.resume$.next();\r\n    }\r\n\r\n    public toggle(pause?: boolean): void {\r\n        if (pause) {\r\n            if (this.currentStep) {\r\n                this.pause();\r\n            } else {\r\n                this.resume();\r\n            }\r\n        } else {\r\n            if (this.currentStep) {\r\n                this.end();\r\n            } else {\r\n                this.start();\r\n            }\r\n        }\r\n    }\r\n\r\n    public next(): void {\r\n        if (this.waitingForScroll) {\r\n            return;\r\n        }\r\n\r\n        this.direction = Direction.Forwards;\r\n        if (this.hasNext(this.currentStep)) {\r\n            this.goToStep(\r\n                this.loadStep(\r\n                    this.currentStep.nextStep ?? this.getStepIndex(this.currentStep) + 1\r\n                )\r\n            );\r\n        }\r\n    }\r\n\r\n    private getStepIndex(step: T): number {\r\n        const index = this.steps.indexOf(step);\r\n\r\n        return index < 0 ? 0 : index;\r\n    }\r\n\r\n    public hasNext(step: T): boolean {\r\n        if (!step) {\r\n            console.warn('Can\\'t get next step. No currentStep.');\r\n            return false;\r\n        }\r\n        return (\r\n            step.nextStep !== undefined ||\r\n            (this.getStepIndex(step) < this.steps.length - 1 && !this.isNextOptionalAnchorMissing(step))\r\n        );\r\n    }\r\n\r\n    private isNextOptionalAnchorMissing(step: T): boolean {\r\n        const stepIndex = this.getStepIndex(step);\r\n\r\n        for (let i = stepIndex + 1; i < this.steps.length; i++) {\r\n            const nextStep = this.steps[i];\r\n\r\n            if (!nextStep.isOptional || this.anchors[nextStep.anchorId])\r\n                return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public prev(): void {\r\n        if (this.waitingForScroll) {\r\n            return;\r\n        }\r\n\r\n        this.direction = Direction.Backwards;\r\n        if (this.hasPrev(this.currentStep)) {\r\n            this.goToStep(\r\n                this.loadStep(\r\n                    this.currentStep.prevStep ?? this.getStepIndex(this.currentStep) - 1\r\n                )\r\n            );\r\n        }\r\n    }\r\n\r\n    public hasPrev(step: T): boolean {\r\n        if (!step) {\r\n            console.warn('Can\\'t get previous step. No currentStep.');\r\n            return false;\r\n        }\r\n        return step.prevStep !== undefined ||\r\n            (this.getStepIndex(step) > 0 && !this.isPrevOptionalAnchorMising(step));\r\n    }\r\n\r\n    private isPrevOptionalAnchorMising(step: T): boolean {\r\n        const stepIndex = this.getStepIndex(step);\r\n\r\n        for (let i = stepIndex - 1; i > -1; i--) {\r\n            const prevStep = this.steps[i];\r\n\r\n            if (!prevStep.isOptional || this.anchors[prevStep.anchorId])\r\n                return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public goto(stepId: number | string): void {\r\n        this.goToStep(this.loadStep(stepId));\r\n    }\r\n\r\n    public register(anchorId: string, anchor: TourAnchorDirective): void {\r\n        if (!anchorId) {\r\n            return;\r\n        }\r\n\r\n        if (this.anchors[anchorId]) {\r\n            const step = this.findStepByAnchorId(anchorId),\r\n                duplicateAnchorHandling = step?.duplicateAnchorHandling ??\r\n                    this.userDefaults?.duplicateAnchorHandling ?? 'error';\r\n\r\n            switch (duplicateAnchorHandling) {\r\n                case 'error':\r\n                    throw new Error(`Tour anchor with id \"${anchorId}\" already registered!`);\r\n                case 'registerFirst':\r\n                    return;\r\n            }\r\n        }\r\n\r\n        this.anchors[anchorId] = anchor;\r\n        this.anchorRegister$.next(anchorId);\r\n    }\r\n\r\n    private findStepByAnchorId(anchorId: string): T {\r\n        return this.steps.find(step => step.anchorId === anchorId);\r\n    }\r\n\r\n    public unregister(anchorId: string): void {\r\n        if (!anchorId) {\r\n            return;\r\n        }\r\n        delete this.anchors[anchorId];\r\n        this.anchorUnregister$.next(anchorId);\r\n    }\r\n\r\n    public getStatus(): TourState {\r\n        return this.status;\r\n    }\r\n\r\n    public isHotkeysEnabled(): boolean {\r\n        return this.isHotKeysEnabled;\r\n    }\r\n\r\n    private goToStep(step: T): void {\r\n        if (!step) {\r\n            console.warn('Can\\'t go to non-existent step');\r\n            this.end();\r\n            return;\r\n        }\r\n        if (this.currentStep) {\r\n            this.backdrop.closeSpotlight();\r\n            this.hideStep(this.currentStep);\r\n        }\r\n\r\n        this.anchorClickService.removeListener();\r\n\r\n        if (step.route !== undefined && step.route !== null) {\r\n            this.navigateToRouteAndSetStep(step);\r\n        } else {\r\n            this.setCurrentStepAsync(step);\r\n        }\r\n    }\r\n\r\n    private listenToOnAnchorClick(step: T) {\r\n        if (step.nextOnAnchorClick) {\r\n            const anchorEl = this.anchors[step.anchorId].element.nativeElement;\r\n            this.anchorClickService.addListener(anchorEl, () => this.next());\r\n        }\r\n    }\r\n\r\n    private async navigateToRouteAndSetStep(step: T) {\r\n        const url = typeof step.route === 'string' ? step.route : this.router.createUrlTree(step.route),\r\n            matchOptions: IsActiveMatchOptions = {\r\n                paths: 'exact',\r\n                matrixParams: 'exact',\r\n                queryParams: 'subset',\r\n                fragment: 'exact'\r\n            };\r\n\r\n        const isActive = this.router.isActive(url, matchOptions);\r\n\r\n        if (isActive) {\r\n            this.setCurrentStepAsync(step);\r\n            return;\r\n        }\r\n\r\n        this.navigationStarted = true;\r\n        const navigated = await this.router.navigateByUrl(url);\r\n        this.navigationStarted = false;\r\n\r\n        if (!navigated) {\r\n            console.warn('Navigation to route failed: ', step.route);\r\n            this.end();\r\n        } else {\r\n            this.setCurrentStepAsync(step, step.delayAfterNavigation);\r\n        }\r\n    }\r\n\r\n    private loadStep(stepId: number | string): T {\r\n        if (typeof stepId === 'number') {\r\n            return this.steps[stepId];\r\n        } else {\r\n            return this.steps.find(step => step.stepId === stepId);\r\n        }\r\n    }\r\n\r\n    private setCurrentStep(step: T): void {\r\n        this.currentStep = step;\r\n        this.showStep(this.currentStep);\r\n    }\r\n\r\n    private setCurrentStepAsync(step: T, delay = 0): void {\r\n        delay = delay || step.delayBeforeStepShow;\r\n\r\n        setTimeout(() => this.setCurrentStep(step), delay);\r\n    }\r\n\r\n    protected async showStep(step: T, skipAsync = false): Promise<void> {\r\n        const anchor = this.anchors[step && step.anchorId];\r\n\r\n        if (!anchor) {\r\n            if (step.isAsync && !skipAsync) {\r\n                let anchorRegistered$ = this.anchorRegister$\r\n                    .pipe(\r\n                        filter(anchorId => anchorId === step.anchorId),\r\n                        first(),\r\n                        delay(0)\r\n                    );\r\n\r\n                if (step.asyncStepTimeout) {\r\n                    anchorRegistered$ = anchorRegistered$\r\n                        .pipe(\r\n                            timeout({\r\n                                each: step.asyncStepTimeout,\r\n                                with: () => of(null)\r\n                            })\r\n                        );\r\n                }\r\n\r\n                anchorRegistered$\r\n                    .subscribe(\r\n                        () => this.showStep(step, true)\r\n                    );\r\n                return;\r\n            }\r\n            if (step.isOptional) {\r\n                this[this.direction === Direction.Forwards ? 'next' : 'prev']();\r\n                return;\r\n            }\r\n\r\n            console.warn(`Can't attach to unregistered anchor with id \"${step.anchorId}\"`);\r\n            this.end();\r\n            return;\r\n        }\r\n        this.listenToOnAnchorClick(step);\r\n        this.waitingForScroll = true;\r\n        await this.scrollToAnchor(step);\r\n        this.waitingForScroll = false;\r\n        anchor.showTourStep(step);\r\n        this.toggleBackdrop(step);\r\n        this.togglePageScrolling(step);\r\n        this.stepShow$.next({\r\n            step,\r\n            direction: this.direction\r\n        });\r\n    }\r\n\r\n    private hideStep(step: T): void {\r\n        const anchor = this.anchors[step && step.anchorId];\r\n        if (!anchor) {\r\n            return;\r\n        }\r\n        anchor.hideTourStep();\r\n        this.stepHide$.next({\r\n            step,\r\n            direction: this.direction\r\n        });\r\n    }\r\n\r\n    private scrollToAnchor(step: T): Promise<void> {\r\n        if (step.disableScrollToAnchor) {\r\n            return Promise.resolve();\r\n        }\r\n\r\n        const anchor = this.anchors[step?.anchorId],\r\n            htmlElement = anchor.element.nativeElement;\r\n\r\n        return this.scrollingService.ensureVisible(htmlElement, {\r\n            center: step.centerAnchorOnScroll,\r\n            smoothScroll: step.smoothScroll,\r\n            scrollContainer: step.scrollContainer\r\n        });\r\n    }\r\n\r\n    private toggleBackdrop(step: T) {\r\n        const anchor = this.anchors[step?.anchorId];\r\n\r\n        if (step.enableBackdrop) {\r\n            this.backdrop.show(anchor.element, step);\r\n        } else {\r\n            this.backdrop.close();\r\n        }\r\n    }\r\n\r\n    private togglePageScrolling(step: T) {\r\n        if (step.disablePageScrolling) {\r\n            this.scrollBlockingService.enable(step.scrollContainer);\r\n        } else {\r\n            this.scrollBlockingService.disable();\r\n        }\r\n    }\r\n\r\n}\r\n","import {ChangeDetectionStrategy, Component, HostListener, inject} from '@angular/core';\r\nimport {TourService, TourState} from './tour.service';\r\n\r\n\r\n@Component({\r\n    selector: 'tour-hotkey-listener',\r\n    template: `<ng-content></ng-content>`,\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TourHotkeyListenerComponent {\r\n\r\n    protected readonly tourService = inject(TourService);\r\n\r\n    /**\r\n     * Configures hot keys for controlling the tour with the keyboard\r\n     */\r\n    @HostListener('window:keydown.Escape')\r\n    public onEscapeKey(): void {\r\n        if (\r\n            this.tourService.getStatus() === TourState.ON &&\r\n            this.tourService.isHotkeysEnabled()\r\n        ) {\r\n            this.tourService.end();\r\n        }\r\n    }\r\n\r\n    @HostListener('window:keydown.ArrowRight')\r\n    public onArrowRightKey(): void {\r\n        const step = this.tourService.currentStep;\r\n\r\n        if (\r\n            this.tourService.getStatus() === TourState.ON &&\r\n            this.tourService.hasNext(this.tourService.currentStep) &&\r\n            this.tourService.isHotkeysEnabled() &&\r\n            !step?.nextOnAnchorClick\r\n        ) {\r\n            this.tourService.next();\r\n        }\r\n    }\r\n\r\n    @HostListener('window:keydown.ArrowLeft')\r\n    public onArrowLeftKey(): void {\r\n        if (\r\n            this.tourService.getStatus() === TourState.ON &&\r\n            this.tourService.hasPrev(this.tourService.currentStep) &&\r\n            this.tourService.isHotkeysEnabled()\r\n        ) {\r\n            this.tourService.prev();\r\n        }\r\n    }\r\n}\r\n","import {afterNextRender, AfterRenderPhase, Directive, ElementRef, inject} from '@angular/core';\r\nimport type {TourAnchorDirective} from './tour-anchor.directive';\r\nimport {DOCUMENT} from '@angular/common';\r\n\r\n@Directive()\r\nexport abstract class BaseTourProxyAnchor {\r\n\r\n    protected abstract readonly anchorDirective: TourAnchorDirective;\r\n    private readonly document = inject(DOCUMENT);\r\n\r\n    public abstract anchorEl: string | HTMLElement;\r\n\r\n    constructor() {\r\n        afterNextRender(\r\n            () => this.setAnchorElement(), {\r\n                phase: AfterRenderPhase.Read\r\n            }\r\n        );\r\n    }\r\n\r\n    private setAnchorElement(): void {\r\n        if (this.anchorEl instanceof HTMLElement) {\r\n            this.anchorDirective.element = new ElementRef<HTMLElement>(this.anchorEl);\r\n            return;\r\n        }\r\n        const htmlElement = this.document.querySelector<HTMLElement>(this.anchorEl);\r\n\r\n        if (!htmlElement) {\r\n            throw new Error(`Element with \"${this.anchorEl}\" CSS selector could not be found!`);\r\n        }\r\n\r\n        this.anchorDirective.element = new ElementRef<HTMLElement>(htmlElement);\r\n    }\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["mergeStatic"],"mappings":"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"}