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