UNPKG

igot-cb-tour-guide

Version:
1 lines 62.9 kB
{"version":3,"file":"igot-cb-tour-guide.mjs","sources":["../../../projects/ngx-guided-tour/src/lib/guided-tour.constants.ts","../../../projects/ngx-guided-tour/src/lib/windowref.service.ts","../../../projects/ngx-guided-tour/src/lib/guided-tour.service.ts","../../../projects/ngx-guided-tour/src/lib/guided-tour.component.ts","../../../projects/ngx-guided-tour/src/lib/guided-tour.component.html","../../../projects/ngx-guided-tour/src/lib/guided-tour.module.ts","../../../projects/ngx-guided-tour/src/public_api.ts","../../../projects/ngx-guided-tour/src/igot-cb-tour-guide.ts"],"sourcesContent":["\nexport interface TourStep {\n    icon?: string,\n    connectorDirection?: string,\n    nextBtnClass?: string,\n    backBtnClass?: string,\n    skipBtnClass?: string,\n    containerClass?: string,\n    isMobile?: boolean;\n    class?: string,\n    /** Selector for element that will be highlighted */\n    selector?: string;\n    /** Tour title text */\n    title?: string;\n    /** Tour step text */\n    content: string;\n    /** Where the tour step will appear next to the selected element */\n    orientation?: Orientation | OrientationConfiguration[];\n    /** Action that happens when the step is opened */\n    action?: () => void;\n    /** Action that happens when the step is closed */\n    closeAction?: () => void;\n    /** Skips this step, this is so you do not have create multiple tour configurations based on user settings/configuration */\n    skipStep?: boolean;\n    /** Adds some padding for things like sticky headers when scrolling to an element */\n    scrollAdjustment?: number;\n    /** Adds default padding around tour highlighting. Does not need to be true for highlightPadding to work */\n    useHighlightPadding?: boolean;\n    /** Adds padding around tour highlighting in pixels, this overwrites the default for this step. Is not dependent on useHighlightPadding being true */\n    highlightPadding?: number;\n}\n\nexport interface GuidedTour {\n    /** Identifier for tour */\n    tourId: string;\n    /** Use orb to start tour */\n    useOrb?: boolean;\n    /** Steps fo the tour */\n    steps: TourStep[];\n    nextCallback?: (currentStep: number, stepObject: object) => void;\n    prevCallback?: (currentStep: number, stepObject: object) => void;\n    /** Function will be called when tour is skipped */\n    skipCallback?: (stepSkippedOn: number) => void;\n    /** Function will be called when tour is completed */\n    completeCallback?: () => void;\n    /** Minimum size of screen in pixels before the tour is run, if the tour is resized below this value the user will be told to resize */\n    minimumScreenSize?: number;\n    /** Dialog shown if the window width is smaller than the defined minimum screen size. */\n    resizeDialog?: {\n        /** Resize dialog title text */\n        title?: string;\n        /** Resize dialog text */\n        content: string;\n    }\n    /**\n     * Prevents the tour from advancing by clicking the backdrop.\n     * This should only be set if you are completely sure your tour is displaying correctly on all screen sizes otherwise a user can get stuck.\n     */\n    preventBackdropFromAdvancing?: boolean;\n}\n\nexport interface OrientationConfiguration {\n    /** Where the tour step will appear next to the selected element */\n    orientationDirection: Orientation;\n    /** When this orientation configuration starts in pixels */\n    maximumSize?: number;\n}\n\nexport class Orientation {\n    public static readonly Bottom = 'bottom';\n    public static readonly BottomLeft = 'bottom-left';\n    public static readonly BottomRight = 'bottom-right';\n    public static readonly Center = 'center';\n    public static readonly Left = 'left';\n    public static readonly Right = 'right';\n    public static readonly Top = 'top';\n    public static readonly TopLeft = 'top-left';\n    public static readonly TopRight = 'top-right';\n}\n\nexport enum ProgressIndicatorLocation {\n    InsideNextButton = 'inside-next-button',\n    TopOfTourBlock = 'top-of-tour-block',\n    None = 'none',\n    Dots = 'dots'\n}  \n","import { Inject, Injectable, PLATFORM_ID } from \"@angular/core\";\nimport { isPlatformBrowser } from \"@angular/common\";\n\nfunction getWindow(): any {\n    return window;\n}\n\nfunction getMockWindow(): any {\n    return {\n        innerWidth: 0,\n        innerHeight: 0,\n        scrollY: 0,\n        scrollX: 0,\n        pageYOffset: 0,\n        pageXOffset: 0,\n        scroll: () => {},\n        scrollTo: () => {},\n        addEventListener: () => {},\n        removeEventListener: () => {},\n    }\n}\n\n@Injectable()\nexport class WindowRefService {\n    private readonly isBrowser: boolean = false;\n\n    get nativeWindow(): any {\n        if (this.isBrowser) {\n            return getWindow();\n        } else {\n            return getMockWindow();\n        }\n    }\n\n    constructor(@Inject(PLATFORM_ID) platformId) {\n        this.isBrowser = isPlatformBrowser(platformId);\n    }\n}\n","import { debounceTime } from 'rxjs/operators';\nimport { ErrorHandler, Inject, Injectable, DOCUMENT } from '@angular/core';\nimport { Observable, Subject, fromEvent } from 'rxjs';\nimport { GuidedTour, TourStep, Orientation, OrientationConfiguration } from './guided-tour.constants';\nimport { cloneDeep } from 'lodash';\n\nimport { WindowRefService } from \"./windowref.service\";\n\n@Injectable()\nexport class GuidedTourService {\n    public guidedTourCurrentStepStream: Observable<TourStep>;\n    public guidedTourOrbShowingStream: Observable<boolean>;\n\n    private _guidedTourCurrentStepSubject = new Subject<TourStep>();\n    private _guidedTourOrbShowingSubject = new Subject<boolean>();\n    private _currentTourStepIndex = 0;\n    private _currentTour: GuidedTour = null;\n    private _onFirstStep = true;\n    private _onLastStep = true;\n    private _onResizeMessage = false;\n\n    constructor(\n        public errorHandler: ErrorHandler,\n        private windowRef: WindowRefService,\n        @Inject(DOCUMENT) private dom\n    ) {\n        this.guidedTourCurrentStepStream = this._guidedTourCurrentStepSubject.asObservable();\n        this.guidedTourOrbShowingStream = this._guidedTourOrbShowingSubject.asObservable();\n\n        fromEvent(this.windowRef.nativeWindow, 'resize').pipe(debounceTime(200)).subscribe(() => {\n            if (this._currentTour && this._currentTourStepIndex > -1) {\n                if (this._currentTour.minimumScreenSize && this._currentTour.minimumScreenSize >= this.windowRef.nativeWindow.innerWidth) {\n                    this._onResizeMessage = true;\n                    const dialog = this._currentTour.resizeDialog || {\n                        title: 'Please resize',\n                        content: 'You have resized the tour to a size that is too small to continue. Please resize the browser to a larger size to continue the tour or close the tour.'\n                    };\n\n                    this._guidedTourCurrentStepSubject.next(dialog);\n                } else {\n                    this._onResizeMessage = false;\n                    this._guidedTourCurrentStepSubject.next(this.getPreparedTourStep(this._currentTourStepIndex));\n                }\n            }\n        });\n    }\n\n    public nextStep(): void {\n        if (this._currentTour.steps[this._currentTourStepIndex].closeAction) {\n            this._currentTour.steps[this._currentTourStepIndex].closeAction();\n        }\n        if (this._currentTour.steps[this._currentTourStepIndex + 1]) {\n            this._currentTourStepIndex++;\n            this._setFirstAndLast();\n            if (this._currentTour.steps[this._currentTourStepIndex].action) {\n                this._currentTour.steps[this._currentTourStepIndex].action();\n                // Usually an action is opening something so we need to give it time to render.\n                setTimeout(() => {\n                    if (this._checkSelectorValidity()) {\n                        this._guidedTourCurrentStepSubject.next(this.getPreparedTourStep(this._currentTourStepIndex));\n                    } else {\n                        this.nextStep();\n                    }\n                });\n            } else {\n                if (this._checkSelectorValidity()) {\n                    this._guidedTourCurrentStepSubject.next(this.getPreparedTourStep(this._currentTourStepIndex));\n                } else {\n                    this.nextStep();\n                }\n            }\n            if (this._currentTour.nextCallback) {\n                this._currentTour.nextCallback(this._currentTourStepIndex, this._currentTour.steps[this._currentTourStepIndex]);\n            }\n        } else {\n            if (this._currentTour.completeCallback) {\n                this._currentTour.completeCallback();\n            }\n            this.resetTour();\n        }\n    }\n\n    public backStep(): void {\n        if (this._currentTour.steps[this._currentTourStepIndex].closeAction) {\n            this._currentTour.steps[this._currentTourStepIndex].closeAction();\n        }\n        if (this._currentTour.steps[this._currentTourStepIndex - 1]) {\n            this._currentTourStepIndex--;\n            this._setFirstAndLast();\n            if (this._currentTour.steps[this._currentTourStepIndex].action) {\n                this._currentTour.steps[this._currentTourStepIndex].action();\n                setTimeout(() => {\n                    if (this._checkSelectorValidity()) {\n                        this._guidedTourCurrentStepSubject.next(this.getPreparedTourStep(this._currentTourStepIndex));\n                    } else {\n                        this.backStep();\n                    }\n                });\n            } else {\n                if (this._checkSelectorValidity()) {\n                    this._guidedTourCurrentStepSubject.next(this.getPreparedTourStep(this._currentTourStepIndex));\n                } else {\n                    this.backStep();\n                }\n            }\n            if (this._currentTour.nextCallback) {\n                this._currentTour.prevCallback(this._currentTourStepIndex, this._currentTour.steps[this._currentTourStepIndex]);\n            }\n        } else {\n            this.resetTour();\n        }\n    }\n\n    public skipTour(): void {\n        if (this._currentTour.skipCallback) {\n            this._currentTour.skipCallback(this._currentTourStepIndex);\n        }\n        this.resetTour();\n    }\n\n    public resetTour(): void {\n        this.dom.body.classList.remove('tour-open');\n        this._currentTour = null;\n        this._currentTourStepIndex = 0;\n        this._guidedTourCurrentStepSubject.next(null);\n    }\n\n    public startTour(tour: GuidedTour): void {\n        this._currentTour = cloneDeep(tour);\n        this._currentTour.steps = this._currentTour.steps.filter(step => !step.skipStep);\n        this._currentTourStepIndex = 0;\n        this._setFirstAndLast();\n        this._guidedTourOrbShowingSubject.next(this._currentTour.useOrb);\n        if (\n            this._currentTour.steps.length > 0\n            && (!this._currentTour.minimumScreenSize\n                || (this.windowRef.nativeWindow.innerWidth >= this._currentTour.minimumScreenSize))\n        ) {\n            if (!this._currentTour.useOrb) {\n                this.dom.body.classList.add('tour-open');\n            }\n            if (this._currentTour.steps[this._currentTourStepIndex].action) {\n                this._currentTour.steps[this._currentTourStepIndex].action();\n            }\n            if (this._checkSelectorValidity()) {\n                this._guidedTourCurrentStepSubject.next(this.getPreparedTourStep(this._currentTourStepIndex));\n            } else {\n                this.nextStep();\n            }\n        }\n    }\n\n    public activateOrb(): void {\n        this._guidedTourOrbShowingSubject.next(false);\n        this.dom.body.classList.add('tour-open');\n    }\n\n    private _setFirstAndLast(): void {\n        this._onLastStep = (this._currentTour.steps.length - 1) === this._currentTourStepIndex;\n        this._onFirstStep = this._currentTourStepIndex === 0;\n    }\n\n    private _checkSelectorValidity(): boolean {\n        if (this._currentTour.steps[this._currentTourStepIndex].selector) {\n            const selectedElement = this.dom.querySelector(this._currentTour.steps[this._currentTourStepIndex].selector);\n            if (!selectedElement) {\n                this.errorHandler.handleError(\n                    // If error handler is configured this should not block the browser.\n                    new Error(`Error finding selector ${this._currentTour.steps[this._currentTourStepIndex].selector} on step ${this._currentTourStepIndex + 1} during guided tour: ${this._currentTour.tourId}`)\n                );\n                return false;\n            }\n        }\n        return true;\n    }\n\n    public get onLastStep(): boolean {\n        return this._onLastStep;\n    }\n\n    public get onFirstStep(): boolean {\n        return this._onFirstStep;\n    }\n\n    public get onResizeMessage(): boolean {\n        return this._onResizeMessage;\n    }\n\n    public get currentTourStepDisplay(): number {\n        return this._currentTourStepIndex + 1;\n    }\n\n    public get currentTourStepCount(): number {\n        return this._currentTour && this._currentTour.steps ? this._currentTour.steps.length : 0;\n    }\n\n    public get preventBackdropFromAdvancing(): boolean {\n        return this._currentTour && this._currentTour.preventBackdropFromAdvancing;\n    }\n\n    private getPreparedTourStep(index: number): TourStep {\n        return this.setTourOrientation(this._currentTour.steps[index]);\n    }\n\n    private setTourOrientation(step: TourStep): TourStep {\n        const convertedStep = cloneDeep(step);\n        if (\n            convertedStep.orientation\n            && !(typeof convertedStep.orientation === 'string')\n            && (convertedStep.orientation as OrientationConfiguration[]).length\n        ) {\n            (convertedStep.orientation as OrientationConfiguration[]).sort((a: OrientationConfiguration, b: OrientationConfiguration) => {\n                if (!b.maximumSize) {\n                    return 1;\n                }\n                if (!a.maximumSize) {\n                    return -1;\n                }\n                return b.maximumSize - a.maximumSize;\n            });\n\n            let currentOrientation: Orientation = Orientation.Top;\n            (convertedStep.orientation as OrientationConfiguration[]).forEach(\n                (orientationConfig: OrientationConfiguration) => {\n                    if (!orientationConfig.maximumSize || this.windowRef.nativeWindow.innerWidth <= orientationConfig.maximumSize) {\n                        currentOrientation = orientationConfig.orientationDirection;\n                    }\n                }\n            );\n\n            convertedStep.orientation = currentOrientation;\n        }\n        return convertedStep;\n    }\n}\n","import { AfterViewInit, Component, ElementRef, Input, OnDestroy, ViewChild, ViewEncapsulation, TemplateRef, Inject, DOCUMENT } from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\n\nimport { Orientation, TourStep, ProgressIndicatorLocation } from './guided-tour.constants';\nimport { GuidedTourService } from './guided-tour.service';\nimport { WindowRefService } from \"./windowref.service\";\n\n@Component({\n    selector: 'ngx-guided-tour',\n    templateUrl: './guided-tour.component.html',\n    styleUrls: ['./guided-tour.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class GuidedTourComponent implements AfterViewInit, OnDestroy {\n    @Input() public topOfPageAdjustment?= 0;\n    @Input() public tourStepWidth?= 300;\n    @Input() public minimalTourStepWidth?= 200;\n    @Input() public skipText?= 'Skip';\n    @Input() public nextText?= 'Next';\n    @Input() public doneText?= 'Done';\n    @Input() public closeText?= 'Close';\n    @Input() public backText?= 'Back';\n    @Input() public progressIndicatorLocation?: ProgressIndicatorLocation = ProgressIndicatorLocation.InsideNextButton;\n    @Input() public progressIndicator?: TemplateRef<any> = undefined;\n    @ViewChild('tourStep', { static: false }) public tourStep: ElementRef;\n    public highlightPadding = 4;\n    public currentTourStep: TourStep = null;\n    public selectedElementRect: DOMRect = null;\n    public isOrbShowing = false;\n    public progressIndicatorLocations = ProgressIndicatorLocation;\n\n    private resizeSubscription: Subscription;\n    private scrollSubscription: Subscription;\n\n    constructor(\n        public guidedTourService: GuidedTourService,\n        private windowRef: WindowRefService,\n        @Inject(DOCUMENT) private dom: any\n    ) { }\n\n    private get maxWidthAdjustmentForTourStep(): number {\n        return this.tourStepWidth - this.minimalTourStepWidth;\n    }\n\n    private get widthAdjustmentForScreenBound(): number {\n        if (!this.tourStep) {\n            return 0;\n        }\n        let adjustment = 0;\n        if (this.calculatedLeftPosition < 0) {\n            adjustment = -this.calculatedLeftPosition;\n        }\n        if (this.calculatedLeftPosition > this.windowRef.nativeWindow.innerWidth - this.tourStepWidth) {\n            adjustment = this.calculatedLeftPosition - (this.windowRef.nativeWindow.innerWidth - this.tourStepWidth);\n        }\n\n        return Math.min(this.maxWidthAdjustmentForTourStep, adjustment);\n    }\n\n    public get calculatedTourStepWidth() {\n        return this.tourStepWidth - this.widthAdjustmentForScreenBound;\n    }\n\n    public ngAfterViewInit(): void {\n        this.guidedTourService.guidedTourCurrentStepStream.subscribe((step: TourStep) => {\n            this.currentTourStep = step;\n            if (step && step.selector) {\n                const selectedElement = this.dom.querySelector(step.selector);\n                if (selectedElement) {\n                    this.scrollToAndSetElement();\n                } else {\n                    this.selectedElementRect = null;\n                }\n            } else {\n                this.selectedElementRect = null;\n            }\n        });\n\n        this.guidedTourService.guidedTourOrbShowingStream.subscribe((value: boolean) => {\n            this.isOrbShowing = value;\n        });\n\n        this.resizeSubscription = fromEvent(this.windowRef.nativeWindow, 'resize').subscribe(() => {\n            this.updateStepLocation();\n        });\n\n        this.scrollSubscription = fromEvent(this.windowRef.nativeWindow, 'scroll').subscribe(() => {\n            this.updateStepLocation();\n        });\n    }\n\n    public ngOnDestroy(): void {\n        this.resizeSubscription.unsubscribe();\n        this.scrollSubscription.unsubscribe();\n    }\n\n    public scrollToAndSetElement(): void {\n        this.updateStepLocation();\n        // Allow things to render to scroll to the correct location\n        setTimeout(() => {\n            if (!this.isOrbShowing && !this.isTourOnScreen()) {\n                if (this.selectedElementRect && this.isBottom()) {\n                    // Scroll so the element is on the top of the screen.\n                    const topPos = ((this.windowRef.nativeWindow.scrollY + this.selectedElementRect.top) - this.topOfPageAdjustment)\n                        - (this.currentTourStep.scrollAdjustment ? this.currentTourStep.scrollAdjustment : 0)\n                        + this.getStepScreenAdjustment();\n                    try {\n                        this.windowRef.nativeWindow.scrollTo({\n                            left: null,\n                            top: topPos,\n                            behavior: 'smooth'\n                        });\n                    } catch (err) {\n                        if (err instanceof TypeError) {\n                            this.windowRef.nativeWindow.scroll(0, topPos);\n                        } else {\n                            throw err;\n                        }\n                    }\n                } else {\n                    // Scroll so the element is on the bottom of the screen.\n                    const topPos = (this.windowRef.nativeWindow.scrollY + this.selectedElementRect.top + this.selectedElementRect.height)\n                        - this.windowRef.nativeWindow.innerHeight\n                        + (this.currentTourStep.scrollAdjustment ? this.currentTourStep.scrollAdjustment : 0)\n                        - this.getStepScreenAdjustment();\n                    try {\n                        this.windowRef.nativeWindow.scrollTo({\n                            left: null,\n                            top: topPos,\n                            behavior: 'smooth'\n                        });\n                    } catch (err) {\n                        if (err instanceof TypeError) {\n                            this.windowRef.nativeWindow.scroll(0, topPos);\n                        } else {\n                            throw err;\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n    public handleOrb(): void {\n        this.guidedTourService.activateOrb();\n        if (this.currentTourStep && this.currentTourStep.selector) {\n            this.scrollToAndSetElement();\n        }\n    }\n\n    private isTourOnScreen(): boolean {\n        return this.tourStep\n            && this.elementInViewport(this.dom.querySelector(this.currentTourStep.selector))\n            && this.elementInViewport(this.tourStep.nativeElement);\n    }\n\n    // Modified from https://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport\n    private elementInViewport(element: HTMLElement): boolean {\n        let top = element.offsetTop;\n        const height = element.offsetHeight;\n\n        while (element.offsetParent) {\n            element = (element.offsetParent as HTMLElement);\n            top += element.offsetTop;\n        }\n        if (this.isBottom()) {\n            return (\n                top >= (this.windowRef.nativeWindow.pageYOffset\n                    + this.topOfPageAdjustment\n                    + (this.currentTourStep.scrollAdjustment ? this.currentTourStep.scrollAdjustment : 0)\n                    + this.getStepScreenAdjustment())\n                && (top + height) <= (this.windowRef.nativeWindow.pageYOffset + this.windowRef.nativeWindow.innerHeight)\n            );\n        } else {\n            return (\n                top >= (this.windowRef.nativeWindow.pageYOffset + this.topOfPageAdjustment - this.getStepScreenAdjustment())\n                && (top + height + (this.currentTourStep.scrollAdjustment ? this.currentTourStep.scrollAdjustment : 0)) <= (this.windowRef.nativeWindow.pageYOffset + this.windowRef.nativeWindow.innerHeight)\n            );\n        }\n    }\n\n    public backdropClick(event: Event): void {\n        if (this.guidedTourService.preventBackdropFromAdvancing) {\n            event.stopPropagation();\n        } else {\n            this.guidedTourService.nextStep();\n        }\n    }\n\n    public updateStepLocation(): void {\n        if (this.currentTourStep && this.currentTourStep.selector) {\n            const selectedElement = this.dom.querySelector(this.currentTourStep.selector);\n            if (selectedElement && typeof selectedElement.getBoundingClientRect === 'function') {\n                this.selectedElementRect = (selectedElement.getBoundingClientRect() as DOMRect);\n            } else {\n                this.selectedElementRect = null;\n            }\n        } else {\n            this.selectedElementRect = null;\n        }\n    }\n\n    private isBottom(): boolean {\n        return this.currentTourStep.orientation\n            && (this.currentTourStep.orientation === Orientation.Bottom\n                || this.currentTourStep.orientation === Orientation.BottomLeft\n                || this.currentTourStep.orientation === Orientation.BottomRight);\n    }\n\n    public get topPosition(): number {\n        const paddingAdjustment = this.getHighlightPadding();\n\n        if (this.isBottom()) {\n            return this.selectedElementRect.top + this.selectedElementRect.height + paddingAdjustment;\n        }\n\n        return this.selectedElementRect.top - this.getHighlightPadding();\n    }\n\n    public get orbTopPosition(): number {\n        if (this.isBottom()) {\n            return this.selectedElementRect.top + this.selectedElementRect.height;\n        }\n\n        if (\n            this.currentTourStep.orientation === Orientation.Right\n            || this.currentTourStep.orientation === Orientation.Left\n        ) {\n            return (this.selectedElementRect.top + (this.selectedElementRect.height / 2));\n        }\n\n        return this.selectedElementRect.top;\n    }\n\n    private get calculatedLeftPosition(): number {\n        const paddingAdjustment = this.getHighlightPadding();\n\n        if (\n            this.currentTourStep.orientation === Orientation.TopRight\n            || this.currentTourStep.orientation === Orientation.BottomRight\n        ) {\n            return (this.selectedElementRect.right - this.tourStepWidth);\n        }\n\n        if (\n            this.currentTourStep.orientation === Orientation.TopLeft\n            || this.currentTourStep.orientation === Orientation.BottomLeft\n        ) {\n            return (this.selectedElementRect.left);\n        }\n\n        if (this.currentTourStep.orientation === Orientation.Left) {\n            return this.selectedElementRect.left - this.tourStepWidth - paddingAdjustment;\n        }\n\n        if (this.currentTourStep.orientation === Orientation.Right) {\n            return (this.selectedElementRect.left + this.selectedElementRect.width + paddingAdjustment);\n        }\n\n        return (this.selectedElementRect.right - (this.selectedElementRect.width / 2) - (this.tourStepWidth / 2));\n    }\n\n    public get leftPosition(): number {\n        if (this.calculatedLeftPosition >= 0) {\n            return this.calculatedLeftPosition;\n        }\n        const adjustment = Math.max(0, -this.calculatedLeftPosition)\n        const maxAdjustment = Math.min(this.maxWidthAdjustmentForTourStep, adjustment);\n        return this.calculatedLeftPosition + maxAdjustment;\n    }\n\n    public get orbLeftPosition(): number {\n        if (\n            this.currentTourStep.orientation === Orientation.TopRight\n            || this.currentTourStep.orientation === Orientation.BottomRight\n        ) {\n            return this.selectedElementRect.right;\n        }\n\n        if (\n            this.currentTourStep.orientation === Orientation.TopLeft\n            || this.currentTourStep.orientation === Orientation.BottomLeft\n        ) {\n            return this.selectedElementRect.left;\n        }\n\n        if (this.currentTourStep.orientation === Orientation.Left) {\n            return this.selectedElementRect.left;\n        }\n\n        if (this.currentTourStep.orientation === Orientation.Right) {\n            return (this.selectedElementRect.left + this.selectedElementRect.width);\n        }\n\n        return (this.selectedElementRect.right - (this.selectedElementRect.width / 2));\n    }\n\n    public get transform(): string {\n        if (\n            !this.currentTourStep.orientation\n            || this.currentTourStep.orientation === Orientation.Top\n            || this.currentTourStep.orientation === Orientation.TopRight\n            || this.currentTourStep.orientation === Orientation.TopLeft\n        ) {\n            return 'translateY(-100%)';\n        }\n        return null;\n    }\n\n    public get orbTransform(): string {\n        if (\n            !this.currentTourStep.orientation\n            || this.currentTourStep.orientation === Orientation.Top\n            || this.currentTourStep.orientation === Orientation.Bottom\n            || this.currentTourStep.orientation === Orientation.TopLeft\n            || this.currentTourStep.orientation === Orientation.BottomLeft\n        ) {\n            return 'translateY(-50%)';\n        }\n\n        if (\n            this.currentTourStep.orientation === Orientation.TopRight\n            || this.currentTourStep.orientation === Orientation.BottomRight\n        ) {\n            return 'translate(-100%, -50%)';\n        }\n\n        if (\n            this.currentTourStep.orientation === Orientation.Right\n            || this.currentTourStep.orientation === Orientation.Left\n        ) {\n            return 'translate(-50%, -50%)';\n        }\n\n        return null;\n    }\n\n    public get overlayTop(): number {\n        if (this.selectedElementRect) {\n            return this.selectedElementRect.top - this.getHighlightPadding();\n        }\n        return 0;\n    }\n\n    public get overlayLeft(): number {\n        if (this.selectedElementRect) {\n            return this.selectedElementRect.left - this.getHighlightPadding();\n        }\n        return 0;\n    }\n\n    public get overlayHeight(): number {\n        if (this.selectedElementRect) {\n            return this.selectedElementRect.height + (this.getHighlightPadding() * 2);\n        }\n        return 0;\n    }\n\n    public get overlayWidth(): number {\n        if (this.selectedElementRect) {\n            return this.selectedElementRect.width + (this.getHighlightPadding() * 2);\n        }\n        return 0;\n    }\n\n    private getHighlightPadding(): number {\n        let paddingAdjustment = this.currentTourStep.useHighlightPadding ? this.highlightPadding : 0;\n        if (this.currentTourStep.highlightPadding) {\n            paddingAdjustment = this.currentTourStep.highlightPadding;\n        }\n        return paddingAdjustment;\n    }\n\n    // This calculates a value to add or subtract so the step should not be off screen.\n    private getStepScreenAdjustment(): number {\n        if (\n            this.currentTourStep.orientation === Orientation.Left\n            || this.currentTourStep.orientation === Orientation.Right\n        ) {\n            return 0;\n        }\n\n        const scrollAdjustment = this.currentTourStep.scrollAdjustment ? this.currentTourStep.scrollAdjustment : 0;\n        const tourStepHeight = typeof this.tourStep.nativeElement.getBoundingClientRect === 'function' ? this.tourStep.nativeElement.getBoundingClientRect().height : 0;\n        const elementHeight = this.selectedElementRect.height + scrollAdjustment + tourStepHeight;\n\n        if ((this.windowRef.nativeWindow.innerHeight - this.topOfPageAdjustment) < elementHeight) {\n            return elementHeight - (this.windowRef.nativeWindow.innerHeight - this.topOfPageAdjustment);\n        }\n        return 0;\n    }\n}\n","<div *ngIf=\"currentTourStep && selectedElementRect && isOrbShowing\" (mouseenter)=\"handleOrb()\"\n  class=\"tour-orb tour-{{ currentTourStep.orientation }}\" [style.top.px]=\"orbTopPosition\"\n  [style.left.px]=\"orbLeftPosition\" [style.transform]=\"orbTransform\">\n  <div class=\"tour-orb-ring\"></div>\n</div>\n<div *ngIf=\"currentTourStep && !isOrbShowing\">\n  <div class=\"guided-tour-user-input-mask\" (click)=\"backdropClick($event)\"></div>\n  <div class=\"\" [attr.class]=\"'guided-tour-spotlight-overlay ' + currentTourStep?.class\" [style.top.px]=\"overlayTop\"\n    [style.left.px]=\"overlayLeft\" [style.height.px]=\"overlayHeight\" [style.width.px]=\"overlayWidth\">\n  </div>\n</div>\n<div *ngIf=\"currentTourStep && !isOrbShowing\">\n  <div #tourStep *ngIf=\"currentTourStep\"\n    class=\"tour-step tour-{{ currentTourStep.orientation}} {{currentTourStep?.containerClass}}\" [ngClass]=\"{\n                    'page-tour-step': !currentTourStep.selector,\n                    'right-panel': currentTourStep.connectorDirection == 'right',\n                    'left-panel': currentTourStep.connectorDirection == 'left',\n                    'bottom-panel': currentTourStep.connectorDirection == 'bottom',\n                    'top-panel': currentTourStep.connectorDirection == 'top'\n                }\" [style.top.px]=\"(currentTourStep.selector && selectedElementRect ? topPosition : null)\"\n    [style.left.px]=\"(currentTourStep.selector && selectedElementRect ? leftPosition : null)\"\n    [style.width.px]=\"(currentTourStep.selector && selectedElementRect ? calculatedTourStepWidth : null)\"\n    [style.transform]=\"(currentTourStep.selector && selectedElementRect ? transform : null)\">\n\n    <div *ngIf=\"currentTourStep.isMobile && currentTourStep.connectorDirection == 'bottom'\" class=\"tour-buttons tour-button-container\">\n      <div class=\"tour-actions-button-container\">\n        <button *ngIf=\"!guidedTourService.onFirstStep && !guidedTourService.onResizeMessage\"\n          [attr.class]=\"currentTourStep?.backBtnClass + ' back-button'\" (click)=\"guidedTourService.backStep()\">\n          {{ backText }}\n        </button>\n      </div>\n      <button *ngIf=\"!guidedTourService.onLastStep && !guidedTourService.onResizeMessage\" class=\"next-button\"\n        (click)=\"guidedTourService.nextStep()\">\n        {{ nextText }}\n        <ng-container *ngIf=\"progressIndicatorLocation === progressIndicatorLocations.InsideNextButton\">\n          <ng-container *ngTemplateOutlet=\"progress\"></ng-container>\n        </ng-container>\n      </button>\n      <button *ngIf=\"guidedTourService.onLastStep\" [attr.class]=\"currentTourStep?.nextBtnClass + ' next-button'\"\n        (click)=\"guidedTourService.nextStep()\">\n        {{ doneText }}\n      </button>\n      <button *ngIf=\"guidedTourService.onResizeMessage\" class=\"next-button\" (click)=\"guidedTourService.resetTour()\">\n        {{ closeText }}\n      </button>\n\n    </div>\n\n    <div *ngIf=\"currentTourStep.selector\" class=\"tour-arrow\"></div>\n    <div class=\"tour-block\">\n      <div class=\"arrow\" [ngClass]=\"{\n                        'right-connector': (currentTourStep.selector && currentTourStep.connectorDirection == 'right'),\n                        'left-connector': (currentTourStep.selector && currentTourStep.connectorDirection == 'left'),\n                        'bottom-connector': (currentTourStep.selector && currentTourStep.connectorDirection == 'bottom'),\n                        'top-connector': (currentTourStep.selector && currentTourStep.connectorDirection == 'top')\n                    }\">\n        <div class=\"circle\"></div>\n        <div class=\"circle-start-dot\"></div>\n        <div class=\"triangle\"></div>\n      </div>\n\n      <div *ngIf=\"progressIndicatorLocation === progressIndicatorLocations.TopOfTourBlock\n                        && !guidedTourService.onResizeMessage\" class=\"tour-progress-indicator\">\n        <ng-container *ngTemplateOutlet=\"progress\"></ng-container>\n      </div>\n      <div class=\"tour-image\" *ngIf=\"currentTourStep.icon && currentTourStep.selector\">\n        <mat-icon>{{currentTourStep.icon}}</mat-icon>\n      </div>\n      <h3 class=\"tour-title\" *ngIf=\"currentTourStep.title && currentTourStep.selector\">\n        {{ currentTourStep.title }}\n      </h3>\n      <h2 class=\"tour-title\" *ngIf=\"currentTourStep.title && !currentTourStep.selector\">\n        {{ currentTourStep.title }}\n      </h2>\n      <div class=\"tour-content\" [innerHTML]=\"currentTourStep.content\"></div>\n      <div *ngIf=\"!currentTourStep.isMobile\" class=\"tour-buttons tour-button-container\">\n        <!-- <div class=\"tour-skip-container\">\n                            <button *ngIf=\"!guidedTourService.onResizeMessage\"\n                                (click)=\"guidedTourService.skipTour()\"\n                                [attr.class]=\"currentTourStep?.skipBtnClass + ' skip-button link-button'\">\n                                {{ skipText }}\n                            </button>\n                        </div> -->\n        <div class=\"tour-actions-button-container\">\n          <button *ngIf=\"!guidedTourService.onFirstStep && !guidedTourService.onResizeMessage\"\n            [attr.class]=\"currentTourStep?.backBtnClass + ' back-button'\" (click)=\"guidedTourService.backStep()\">\n            {{ backText }}\n          </button>\n        </div>\n        <button *ngIf=\"!guidedTourService.onLastStep && !guidedTourService.onResizeMessage\" class=\"next-button\"\n          (click)=\"guidedTourService.nextStep()\">\n          {{ nextText }}\n          <ng-container *ngIf=\"progressIndicatorLocation === progressIndicatorLocations.InsideNextButton\">\n            <ng-container *ngTemplateOutlet=\"progress\"></ng-container>\n          </ng-container>\n        </button>\n        <button *ngIf=\"guidedTourService.onLastStep\" [attr.class]=\"currentTourStep?.nextBtnClass + ' next-button'\"\n          (click)=\"guidedTourService.nextStep()\">\n          {{ doneText }}\n        </button>\n        <button *ngIf=\"guidedTourService.onResizeMessage\" class=\"next-button\" (click)=\"guidedTourService.resetTour()\">\n          {{ closeText }}\n        </button>\n\n      </div>\n\n\n      <div class=\"progress-container\">\n        <ng-container *ngIf=\"progressIndicatorLocation === progressIndicatorLocations.Dots\">\n          <ng-container *ngTemplateOutlet=\"progress\"></ng-container>\n        </ng-container>\n      </div>\n\n    </div>\n    <div *ngIf=\"currentTourStep.isMobile && currentTourStep.connectorDirection != 'bottom'\" class=\"tour-buttons tour-button-container\">\n      <div class=\"tour-actions-button-container\">\n        <button *ngIf=\"!guidedTourService.onFirstStep && !guidedTourService.onResizeMessage\"\n          [attr.class]=\"currentTourStep?.backBtnClass + ' back-button'\" (click)=\"guidedTourService.backStep()\">\n          {{ backText }}\n        </button>\n      </div>\n      <button *ngIf=\"!guidedTourService.onLastStep && !guidedTourService.onResizeMessage\" class=\"next-button\"\n        (click)=\"guidedTourService.nextStep()\">\n        {{ nextText }}\n        <ng-container *ngIf=\"progressIndicatorLocation === progressIndicatorLocations.InsideNextButton\">\n          <ng-container *ngTemplateOutlet=\"progress\"></ng-container>\n        </ng-container>\n      </button>\n      <button *ngIf=\"guidedTourService.onLastStep\" [attr.class]=\"currentTourStep?.nextBtnClass + ' next-button'\"\n        (click)=\"guidedTourService.nextStep()\">\n        {{ doneText }}\n      </button>\n      <button *ngIf=\"guidedTourService.onResizeMessage\" class=\"next-button\" (click)=\"guidedTourService.resetTour()\">\n        {{ closeText }}\n      </button>\n\n    </div>\n  </div>\n  <ng-template #progress>\n    <ng-container *ngTemplateOutlet=\"\n                progressIndicator || defaultProgressIndicator; \n                context: { currentStepNumber: guidedTourService.currentTourStepDisplay, totalSteps: guidedTourService.currentTourStepCount }\n            \"></ng-container>\n  </ng-template>\n  <ng-template #defaultProgressIndicator let-currentStepNumber=\"currentStepNumber\" let-totalSteps=\"totalSteps\">\n    <!-- <ng-container *ngIf=\"progressIndicatorLocation === progressIndicatorLocations.InsideNextButton\">&nbsp;</ng-container>{{ currentStepNumber }}/{{ totalSteps }} -->\n    <ng-container *ngIf=\"progressIndicatorLocation === progressIndicatorLocations.Dots\">\n      <div class=\"pagination\">\n        <li class=\"nav-dots\">\n          <ng-container *ngFor=\"let dot of [].constructor(totalSteps); first as isFirst; index as i\">\n            <label [ngClass]=\"(currentStepNumber == (i+1)) ? 'nav-dot-active': ''\" class=\"nav-dot\"\n              id=\"img-dot-+{{i}}+{{currentStepNumber}}\"></label>\n          </ng-container>\n        </li>\n      </div>\n    </ng-container>\n  </ng-template>","import { GuidedTourService } from './guided-tour.service';\nimport { GuidedTourComponent } from './guided-tour.component';\nimport { NgModule, ErrorHandler } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WindowRefService } from './windowref.service';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n  declarations: [GuidedTourComponent],\n  imports: [CommonModule, MatIconModule],\n  providers: [WindowRefService],\n  exports: [GuidedTourComponent]\n})\nexport class GuidedTourModule {\n  public static forRoot(): any {\n    return {\n      ngModule: GuidedTourModule,\n      providers: [ErrorHandler, GuidedTourService],\n    };\n  }\n}\n","/*\n * Public API Surface of ngx-guided-tour\n */\n\nexport * from './lib/guided-tour.module';\nexport * from './lib/guided-tour.component';\nexport * from './lib/guided-tour.service';\nexport * from './lib/guided-tour.constants';\nexport * from './lib/windowref.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}